からあげ (id:karaage) さんがKindleの蔵書一覧をデータ分析していて面白かったので、自分も試してみることにしました。
データをグラフ化して諸々の項目を観察するのは色々と発見がありそうだと思う一方、自分の嗜好を、どんなタイトルに惹かれやすいのかパッと見で掴みたいなぁという思いもあり。購入タイトルをWord Cloudで可視化してみました。
Word Cloudは、出現頻度の高い単語を大きさで図示する手法です。今回はPython使って作りました。Word Cloudのライブラリがありますし、文章から単語を抜き出す形態素解析もネットに情報が沢山ありますからね。
Kindle蔵書一覧の取得とCSVの整理
こちらを参照に蔵書一覧を入手したら、著者や購入日など、タイトル以外要素を削除します。
ついでに、シリーズものも1巻だけにして間引きしておきます。じゃないと連載長い漫画タイトルがでかでか表示されるだけですからね。
自分のレベルだとpythonで生データ処理するよりエクセルでゴリゴリcsvいじったほうが早いので、ここはマニュアルで泥臭く処理します。気の利いた方法(特にシリーズものの間引き方法)あれば教えて下さい。
各種ライブラリのインストール
pip install janome pip install wordcloud
コード
# coding:utf-8 import csv import codecs from janome.tokenizer import Tokenizer from wordcloud import WordCloud from collections import Counter, defaultdict # 名詞だけ抽出、単語をカウント def counter(texts): t = Tokenizer() words_count = defaultdict(int) words = [] for text in texts: tokens = t.tokenize(text) for token in tokens: # 品詞から名詞だけ抽出 pos = token.part_of_speech.split(',')[0] if pos in ['名詞']: # 実際の結果から思惑に沿わない単語を削除 if token.base_form not in ["コミックス", "文庫", "無料", "新書", "限定", "シリーズ", "ため", "たち", "期間", "試し"]: words_count[token.base_form] += 1 words.append(token.base_form) return words_count, words # 文字コードUTF-8だと化けたのでShift-JISで読み込み、それでも読めないものはignoreで無視 with codecs.open('./Kindle_croud.csv', 'r', "Shift-JIS", "ignore") as f: reader = csv.reader(f, delimiter='\t') texts = [] for row in reader: if(len(row) > 0): text = row[0] # きちんと読み込めてるか確認 print(text) texts.append(text) words_count, words = counter(texts) text = ' '.join(words) # fontに注意 wordcloud = WordCloud(background_color="white", font_path='C:\Windows\Fonts\meiryo.ttc', width=900, height=500).generate(text) wordcloud.to_file("./wordcloud_sample.png")
コードは基本ネットに転がっているものの継ぎ接ぎでなんとかなったのですが、csv読み込み文字コードで詰まったのでご注意を。
UTF-8だと文字化けし、Shift-JISでもエラーが発生。ignore
を追加して、読めないものを無視することでようやく回避できました。
with codecs.open('./Kindle_croud.csv', 'r', "Shift-JIS", "ignore") as f:
あと、Kindleは蔵書タイトル以外のものもタイトルにひっついてきます。タイトル以外の要素は極力削除したかったので、いくつかの単語は読み込まないよう設定しています。
if token.base_form not in ["コミックス", "文庫", "無料", "新書", "限定", "シリーズ", "ため", "たち", "期間", "試し"]:
データ読み込み時にreplace
とstrip
で出版社とか括弧内の文字は削除したかったのですが、上手く行かなかったので妥協と力技で解決です。
出来上がり、ドン引き
こうして出力されたのが記事頭に出したこれなのですが...
仕事...世界...経済...投資...うわぁ…って感じですね。絶対楽しい人生歩めてないだろ、的な。
コミックス各種をタイトルから排除できなかったので、どこの漫画をよく買ってるのかも赤裸々です。HARTA COMIXが頭1抜けていますね。意識してなかったですが、下記らへんがHARTA COMIXです。
- 作者:九井 諒子
- 発売日: 2015/01/15
- メディア: Kindle版
- 作者:大武 政夫
- 発売日: 2013/08/01
- メディア: Kindle版
- 作者:樫木 祐人
- 発売日: 2014/02/14
- メディア: Kindle版
小さい文字にもフィーチャーしていくと、時間とかシンプルとかって単語が見られます。これも基本仕事関係ですが、効率よく仕事をこなしたいという思いが透けて見えますね。なお、実務に役に立っているかは不明です。役立っていることにしておきましょう。
蔵書数と毎年の購入数
ここらへんのやり方がからあげさんの記事を参照です。(ぶん投げ)
蔵書数は528で、購入数は下記の通り。
2013年から2016年にかけてガクッと低下して、そこからちょっとずつ盛り返しつつある感じですね。
2013-2014あたりは漫画もそこそこ買っていたのが蔵書数に寄与していたんだと思います。ここらへんで結婚して子供産まれたり転職したりと、人生の転換期的なものが立て続けに起こり、その結果がドラスティックに現れている感じです。
まとめ
Kindleの蔵書タイトルから、自分がどんなタイトルに惹かれる傾向にあるのか見てみました。
思ってた以上に仕事に毒されているなー、って感想です。もうちょっと昔は漫画も結構読んでいたし、さらに前になると小説に手を出してたりしたんですが、、おとなになるって怖いですね。 人生を豊かにするためにも、もっと趣味的な本を消化していくべきだなって気づきが得られました。いやほんと、人間しらないうちに頭がガッチガチになるものですね、コワイ!
参考リンク
Kindleの蔵書リストをGoogle Colaboratoryでデータ分析してみた - karaage. [からあげ]
Word Cloudでツイートを可視化してみた(python) - Qiita
【Python】ブログの特徴をワードクラウドで可視化しよう!【WordPress】 | みんな栄養に頼りすぎてる
Word Cloudで文章の単語出現頻度を可視化する。[Python] - Qiita
もう怖くない!!Pandasデータ読み込みにおける文字コードの指定 – GeoSpatial Computing LAB Note