wordcloudで遊んでみた!


はじめに

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 化することによって、
その文字列が何を表しているかなどの指標にも使うことができますねー( ˘ω˘ )