[Python]Word Cloudを使ってみる(おまけ)

Python

Pythonのwordcloudパッケージやその他に関連する細かいTipsを纏めておきたいと思います。

PythonでのWord Cloudの作り方はこちらをご確認ください。

Word Cloudを円形で出力

デフォルトでは四角形の領域で出力されますが、画像を用意しなくとも、numpyパッケージを使って円形の領域として出力できます。

# 以下のmaskをWordCloudのmaskに渡してあげる(mask=maskを指定)ことで丸型にできます。
import numpy as np
x, y = np.ogrid[:600, :600]
mask = (x - 300) ** 2 + (y - 300) ** 2 > 260 ** 2
mask = 255 * mask.astype(int)

出力結果はこんな感じ。

頻出語の確認

Word Cloudでは頻出語の単語を視覚的に大きく見せてくれますが、頻出回数までは出してくれません。Pythonではcollectionsパッケージを使って簡単に確認できます。

# 頻出語の上位10件を出力する。
# word_listに各単語がリストで含まれていることを想定。
import collections
counter = collections.Counter(word_list)
word_10 = dict(counter.most_common(10))
print(word_10)

# 結果
{'の': 1610, '事': 1207, 'もの': 981, '君': 973, '主人': 932, 'ない': 765, 'ん': 703, 'よう': 696, '人': 602, 'そう': 554}

画像の色に合わせたWord Cloudを生成

出力する単語の色を画像に合わせて出力することができます。

例えば以下のようなPythonのロゴ(python_img.png)を使って表現してみます。

実際のPythonのコードを示します。

from wordcloud import WordCloud, ImageColorGenerator
import numpy as np
import PIL

mask = np.array(PIL.Image.open('python_img.png'))
img_color = ImageColorGenerator(mask)
  :

wordcloud = WordCloud(font_path=FONT_PATH, width=500, height=300, background_color='white', max_font_size=80, mask=mask, color_func=img_color, min_font_size=2, max_words=500).generate(' '.join(word_list))
wordcloud.to_file(OUTPUT_PATH)

やり方は簡単で、5行目で単語の出力領域となる配列を画像から取得して、6行目で画像の色情報を取得しています。

あとは、9行目のWordCloudインスタンス作成時にmaskおよびcolor_funcの引数として、それぞれを渡してあげるだけです。

結果としてこのようなWord Cloudが生成されます。

コメント

タイトルとURLをコピーしました