WordCloudで可視化｜つぶやきをWordcloudで可視化④

私事ではありますが、2020年5月にコーギーという中型犬をお迎えしました。
<b>[愛犬のブログ](https://corgi-komugi.com/)</b>を運営してますので、見てもらえると嬉しいです。

<img width="400" alt="corgi_komugi" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/522259/3cd9a3b3-61cf-6c2c-2088-60c68d84a4b8.jpeg">


<b>「コーギー関連のツイートをWordCloudで可視化したい！」</b>と思い立ち、以下の4項目を実施しました。

1. [TwitterAPIでツイートを取得](https://qiita.com/komugi_papa/items/e5d7fb6dafaf68caa1e0)
2. [正規表現を用いてツイートを整形](https://qiita.com/komugi_papa/items/9b21cc0b5c612b5c0521)
3. [SudachiPyで形態素単位に分割](https://qiita.com/komugi_papa/items/7d04e386550406371ec5)
4. WordCloudで可視化 ← 今回

⇒ <b>[一連のコードと様々なアウトプットの表示](https://corgi-komugi.com/twitter_wordcloud/)</b>

今回は、<b>「WordCloudで可視化」</b>に関して説明していきます。

##対象者

- WordCloudでコードを書いてみたい人
- WordCloudで可愛く可視化したい人

##ざっくりとした要件定義
Input ... 形態素単位に分割したツイート(単語の間をスペースで分割)
Output ... WordCloudの画像

Inputは、テキスト内容を形態素単位に分割し、以下のようになります。

![2021-07-13_08h57_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/522259/a0e0a528-2541-3f64-0f8b-bcf734a08ee5.png)

また、outputはこんな感じです。
文字の出現頻度が多いほど、文字が大きく表示されます。

<img width="600" alt="corgi_komugi" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/522259/f84b95f9-0f1c-73d7-8923-8d43e9787806.png">


##コード
###コード全体
```python
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)
```

###コード解説
<b>まず、WordCloudの細かい条件を指定します。</b>

日本語での表示が文字化けする事象が発生しましたが、コードを実行するフォルダ内に"ipaexg.ttf"のファイルを置くことで解決しました。

なお"ipaexg.ttf"は、日本語を表示可能な[IPAフォント](https://ja.wikipedia.org/wiki/IPA%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88)のひとつで、[こちら](https://moji.or.jp/ipafont/ipaex00401/)からダウンロードできます。<br>
また、マスク画像で白黒のシルエット画像を指定すると、黒い部分にWordCloudの文字が表示されます。

```python
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()

```
<br>
<b>次に、この関数を実行します。</b>

今回は、マスク画像をコードを実行するフォルダ内に置いてます。

```python
msk = np.array(Image.open("Corgi.jpg"))
show_wordcloud(word_chain, msk)
```
<br>
<b>マスク画像(上)、WOrdCloudの画像(下) のように仕上がります。</b>

<img width="600" alt="corgi_komugi" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/522259/4f1cddfc-27e7-cc76-d545-13b52fbf70ff.jpeg">

<img width="600" alt="corgi_komugi" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/522259/f84b95f9-0f1c-73d7-8923-8d43e9787806.png">

##まとめ
これで、ツイートの取得からWordCloudの可視化までの全ての工程を説明しました。

一連のコードと様々な切り口からのアウトプットは、<b>[こちら](https://corgi-komugi.com/twitter_wordcloud/)</b>にまとめてますので、興味があればご覧ください！

##参考文献
[Pythonでwordcloudを作ってみた。](https://qiita.com/sugarcoder18/items/e66f6043fc17528f81ab)