Pythonによるワードクラウドの作成方法
「ワードクラウド」とは、文章中に現れる出現頻度の高い単語を抽出し、1枚の絵にしたものです。
ある文章がどんな傾向なのか視覚的に”パッと見”で分かるので、手っ取り早く、かつ取っつきやすい方法のひとつです。
オンラインでワードクラウドが作成できるページも幾つかありますが、今回はPythonを用いて作成してみます。
Pythonによるワードクラウドの作成方法
対象となる文章の読み込み
今回は、夏目漱石「こころ」に登場する単語でワードクラウドを作成してみます。
改行などは何も考えず、単純に全文を一気に読み込んでしまって問題ありません。
ここは頻出単語の抽出と一緒です。
1 2 3 4 |
#夏目漱石「こころ」の取り込み f = open('kokoro.txt') text = f.read() # ファイル終端まで全て読んだデータを返す f.close() |
単語の抽出
お次は形態素解析(文章中の単語を分割)します。今回はMeCabを用いてみます。
また、ここでワードクラウドに表示させたい単語を選びます。
今回は、「名詞」「動詞」「形容詞」だけをピックアップしてみます。
頻出単語の抽出ではピックアップした単語をリストに格納しましたが、ワードクラウド作成の場合はその仕様上「単語の間に半角スペースを入れて連結」しますので、ご注意下さい。
1 2 3 4 5 6 7 8 9 10 11 12 |
#単語の分割 import MeCab m = MeCab.Tagger ('-Ochasen') word="" node = m.parseToNode(text) while node: hinshi = node.feature.split(",")[0] if hinshi in ["名詞","動詞","形容詞"]: origin = node.feature.split(",")[6] word = word + " " + origin node = node.next |
ちなみに、単語はそのままでなく原型を取り出しています。
それにより「食べた」「食べて」・・・などがすべて「食べる」という単語としてカウントされます。
ワードクラウドの作成
ここまで準備すれば、あとは「WordCloud」というそのままの名称の便利なパッケージがありますので、これをインポートすれば簡単にワードクラウドが作成できます。
1 2 3 4 5 6 7 8 |
#ワードクラウドの作成 from wordcloud import WordCloud fpath = "/Library/Fonts/ヒラギノ角ゴシック W3.ttc" wordcloud = WordCloud(background_color="white",font_path=fpath,width=600,height=400,min_font_size=15) wordcloud.generate(word) wordcloud.to_file("./wordcloud.png") |
フォントはデフォルトだと日本語が表示されない場合があります。
なので、ご自身のPCの中のお好きなフォントを指定して下さい。
実行すると、ソースファイルと同じディレクトリに以下の「wordcloud.png」作成されます。
これで完成です。簡単ですね。
ここからはもう少し見栄えを整えていきましょう。
図の微調整
表示させたくない単語の削除
上記のワードクラウドを見ると、「する」「いる」のような、「そりゃ沢山使われるよね」という単語がデカデカと表示されています。
そういった、「消したい単語」は、単語を連結する際に省いておく必要があります。
具体的には、以下のように、単語が指定した語句一覧に含まれていたら文字列連結をやめる処理にすればOKです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#単語の分割 import MeCab import pandas as pd import numpy as np m = MeCab.Tagger ('-Ochasen') word="" node = m.parseToNode(text) while node: hinshi = node.feature.split(",")[0] if hinshi in ["名詞","動詞","形容詞"]: origin = node.feature.split(",")[6] #word = word + " " + origin if origin not in ["する","いる","ある","なる"]: word = word + " " + origin node = node.next |
先ほどと同様にWordCloudメソッドを実行してみると。。。
頻出して当然な単語の数が減り、文章の傾向がより分かりやすくなりました。
余白の調整
見栄えをどう思うかは人によって違いますが、個人的には少し単語が少しぎゅうぎゅう詰めかな?という気がします。
その場合は、WordCloudメソッドの引数「min_font_size」を大きめに設定すればOKです。
今回は、以下のように15くらいにしてみます。
1 |
wordcloud = WordCloud(background_color="white",font_path=fpath,width=600,height=400,min_font_size=15) |
すると。。。
余白が増え、見やすくなりました。
まあ、表示されている単語の数は減っているので、一長一短ではありますが・・・。
このように、個人や資料を見せる相手の好みに合わせ、見栄えを調整してみてください。
ただし、WordCloudメソッドには幾つかオプションがありますが、思い通りのワードクラウドが作れるほどのあまり細かいオプションは備えていません。
この場合は、WordCloudメソッド自身を改変する、ワードクラウド自体を自作する、もしくはワードクラウド作成サービスを活用するなどで対応する事になります。