はじめに
wordcloudを使用することになったので備忘録として投稿
mecabを使用するので、「mecabってなんぞや?」という方はこちらをどうぞ!
wordcloudのインストールから画像出力までをまとめてみた
お品書きは下記の通り
- これは何の物語でしょう?
- wordcloud とは
- 実際に動かしてみた
- 設定いろいろ
- 日本語でやりがちな失敗
- おわりに
これは何の物語でしょう?
せっかくなので wordcloud で出力した問題を出します(笑)
答えはおわりにで書いておきます!
wordcloud とは
文章中で出現頻度が高い単語を複数選び出し、その頻度に応じた大きさで図示する手法のこと
公式はこちら
インストールは pip などでインストールすればすぐ使える
pip install wordcloud
実際に動かしてみた
画像を用いて説明したほうが早いと思うので早速動かしてみた
ここで使用した物語は「赤ずきん」
プログラム
import MeCab
from wordcloud import WordCloud
FILE_NAME = "sample.txt"
with open(FILE_NAME, "r", encoding="utf-8") as f:
CONTENT = f.read()
tagger = MeCab.Tagger("-Owakati")
parse = tagger.parse(CONTENT)
wordcloud = WordCloud()
wordcloud.generate(CONTENT)
wordcloud.to_file("wordcloud.png")
wordcloud = WordCloud()
生成および描画用のワードクラウドオブジェクト
wordcloud.generate("文字列")
テキスト(文字列)から wordcloud を作成
wordcloud.to_file("写真名")
画像ファイルにエクスポート
以上の手順により wordcloud の画像が作成されます
画像
wordcloud では多く使用している単語は大きく表示する
ただし、A, 俺 など1文字の単語は表示されないので注意!
「赤ずきん」の中では、grandmother, Little Red, Red Riding が多く使用されていることが分かる
設定いろいろ
背景や文字制限など、 WordCloud の中で設定を追加することができる
その中で、よく使うであろう設定をいくつか紹介
parameter | デフォルト | 説明 |
---|---|---|
width | 400 | 横幅 |
height | 200 | 縦幅 |
background_color | "black" | 背景色 |
colormap | None | 文字色 |
collocations | True | 連語 |
stopwords | None | 除外する単語(リスト) |
max_words | 200 | 表示する最大単語数 |
regexp | r"\w[\w']+" | 表示される文字の正規表現 |
画像の大きさを変えたい
先ほどの画像は少し小さい(Qiita用なので)
Desktopのサイズでもある 縦1080, 横1920に設定しようとすると以下のようになる
wordcloud = WordCloud(width=1920, height=1080)
色を変えたい
背景や文字の色が見づらい…
背景色は指定したい色を宣言する
文字の色は文字のイメージカラーがいくつかあるためそちらを宣言する
今回は、背景色を白,文字のイメージカラーを summer とする
wordcloud = WordCloud(background_color="white", colormap="summer")
Red Riding みたいな連語を分解したい
Red Riding や Little Red のように、 「Red」が画面上に多発することが多々ある
そこで、下記のように設定をしてみる
連語を別々の単語として判断することができるのでとても便利
wordcloud = WordCloud(background_color="white", colormap="summer", collocations=False)
ある文字を表示したくない
「the、and、to」のような言葉を wordcloud 上に出してもあまり意味がない
それらの言葉を表示させたくない場合は以下のように配列を使用して宣言してあげるとよい
(今回はわかりやすいように、["Little", "grandmother"]を表示させないようにしてみる)
wordcloud = WordCloud(background_color="white", colormap="summer", collocations=False, stopwords=["Little", "grandmother"])
表示する文字数制限したい
wordcloud では、デフォルトで200個の文字を出力するように設定されている
以下のように設定すれば、何個の文字を出力するか設定することができる
wordcloud = WordCloud(background_color="white", colormap="summer", collocations=False, stopwords=["Little", "grandmother"], max_words=10])
これを見ると、[the, and, to] あたりを消したらよさそうなデータが取れそう??
1文字の単語も表示したい
上のほうでも記述した通り、 wordcloudでは1文字の単語は出力できないようになっている
regexpで制限することで、1文字以上の単語でも対応することができる
wordcloud = WordCloud(background_color="white", colormap="summmer", collocations=False, stopwords=["the", "and", "to"], max_words=20, regexp=r"[\w']+")
a が一番多くなるのは納得ですね…
ほかのも教えてよ!という方は公式さんから
日本語でやりがちな失敗
上記のプログラムで日本語文を流すと以下のような画像に…
これは wordcloud 内で使用しているフォントが日本語対応していないから
なので、フォントを設定してあげればよい
フォントの設定は、以下のようにしてあげる
FONT_FILE = "C:\Windows\Fonts\MSGOTHIC.TTC"
wordcloud = WordCloud(font_path=FONT_FILE, background_color="white", colormap="summer",
collocations=False, regexp=r"[\w']+")
え? なんでMS ゴシックなのかって?
元コボラー だからだよ!(わかる人にはわかる…と思う)
※ フォントは何でもいいので自分が一番好きなフォントにしてあげてください(^-^)
そんなこんなでこんな出力になった
おわりに
ざっくりと wordcloud についてまとめてみました
ちなみに先ほどの問題の答えは…
三匹の子豚です!
wordcloud は大きい文字がよく出てくる単語
画像を見ると
little
pig
house
上記の三つがよく出てくる単語になっています!
こんな風に wordcloud 化することによって、
その文字列が何を表しているかなどの指標にも使うことができますねー( ˘ω˘ )