私事ではありますが、2020年5月にコーギーという中型犬をお迎えしました。
愛犬のブログを運営してますので、見てもらえると嬉しいです。
「コーギー関連のツイートをWordCloudで可視化したい!」と思い立ち、以下の4項目を実施しました。
- TwitterAPIでツイートを取得
- 正規表現を用いてツイートを整形
- SudachiPyで形態素単位に分割
- WordCloudで可視化 ← 今回
今回は、「WordCloudで可視化」に関して説明していきます。
##対象者
- WordCloudでコードを書いてみたい人
- WordCloudで可愛く可視化したい人
##ざっくりとした要件定義
Input ... 形態素単位に分割したツイート(単語の間をスペースで分割)
Output ... WordCloudの画像
Inputは、テキスト内容を形態素単位に分割し、以下のようになります。
また、outputはこんな感じです。
文字の出現頻度が多いほど、文字が大きく表示されます。
##コード
###コード全体
import numpy as np
from wordcloud import WordCloud
from PIL import Image
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams['font.family'] = "IPAexGothic"
def show_wordcloud(word_chain, msk, font_path='ipaexg.ttf', mx_words=100):
#WordCloudの指定
wc = WordCloud(background_color="white",
font_path=font_path, max_words=mx_words, mask=msk,
max_font_size=100, contour_width=1, contour_color='steelblue')
wc.generate(word_chain)
#wordcloudの描写
plt.figure(figsize=(12,10))
plt.imshow(wc, cmap=plt.cm.gray, interpolation="bilinear")
plt.axis("off")
plt.show()
msk = np.array(Image.open("Corgi.jpg"))
show_wordcloud(word_chain, msk)
###コード解説
まず、WordCloudの細かい条件を指定します。
日本語での表示が文字化けする事象が発生しましたが、コードを実行するフォルダ内に"ipaexg.ttf"のファイルを置くことで解決しました。
なお"ipaexg.ttf"は、日本語を表示可能なIPAフォントのひとつで、こちらからダウンロードできます。
また、マスク画像で白黒のシルエット画像を指定すると、黒い部分にWordCloudの文字が表示されます。
def show_wordcloud(word_chain, msk, font_path='ipaexg.ttf', mx_words=100):
#WordCloudの指定
wc = WordCloud(background_color="white",
font_path=font_path, max_words=mx_words, mask=msk,
max_font_size=100, contour_width=1, contour_color='steelblue')
wc.generate(word_chain)
#wordcloudの描写
plt.figure(figsize=(12,10))
plt.imshow(wc, cmap=plt.cm.gray, interpolation="bilinear")
plt.axis("off")
plt.show()
次に、この関数を実行します。
今回は、マスク画像をコードを実行するフォルダ内に置いてます。
msk = np.array(Image.open("Corgi.jpg"))
show_wordcloud(word_chain, msk)
マスク画像(上)、WOrdCloudの画像(下) のように仕上がります。
##まとめ
これで、ツイートの取得からWordCloudの可視化までの全ての工程を説明しました。
一連のコードと様々な切り口からのアウトプットは、こちらにまとめてますので、興味があればご覧ください!
##参考文献
Pythonでwordcloudを作ってみた。