[Python] WordCloudを使ってみる

こちらのほぼ写経です。

Pythonのwordcloudというモジュールを使ってWordCloudを作ってみます。

word cloud / tag cloud


タグ・クラウド (tag cloud) はタグの視覚的記述を指す。


出典: フリー百科事典『ウィキペディア(Wikipedia)』

wordcloud

WordCloud for Python documentation

Pythonで簡単にワード・クラウドを作れるモジュールです。

インストールしておきます。

pip install wordcloud

matplotlib

https://matplotlib.org/

Pythonのグラフ描画モジュールです。

インストールしておきます。

pip install matplotlib

ワード・クラウドの表示

モジュールをインポートしておきます。

>>> import nltk
>>> import matplotlib.pyplot as plt
>>> from wordcloud import WordCloud

ワード・クラウドで表示するテキストを用意します。

>>> text = ('Father: "When Abe Lincoln was your age, he was studying books by the light of the fireplace." '
...         'His son: "When Lincoln was your age, he was President."')

ワード・クラウドを生成します。

>>> basecloud = WordCloud().generate(text)

ワード・クラウドを表示します。

>>> plt.imshow(basecloud)
‹matplotlib.image.AxesImage object at 0x0000022D03549D68›
>>> plt.axis('off')
(-0.5, 399.5, 199.5, -0.5)
>>> plt.show()

ワード・クラウドが表示されました。

ワード・クラウドの表示は関数にまとめておきます。

>>> def plot_wordcloud(wordcloud):
...     plt.imshow(wordcloud)
...     plt.axis('off')
...     plt.show()
...

表示されたワード・クラウドの表示は単語が元の文章と比較してだいぶ少なくなっています。これは、デフォルトでは、英語でよく使われる単語をwordcloudが表示しないように設定しているからです。

stopwordsという引数を与えることで、自身で表示しない単語を決めることができます。

>>> wordcloud = WordCloud(stopwords={'by', 'of'}).generate(text)
>>> plot_wordcloud(wordcloud)

表示される単語が増えました。

長文をワード・クラウドにする

nltk.corpusの大統領就任演説をもとに、より長い文章でワード・クラウドを作成してみます。まずは演説を読み込みます。

>>> washington = nltk.corpus.inaugural.raw('1789-Washington.txt')
>>> obama = nltk.corpus.inaugural.raw('2009-Obama.txt')

ジョージワシントンの就任演説をワード・クラウドにします。

>>> wordcloud = WordCloud().generate(washington)
>>> plot_wordcloud(wordcloud)

‘every’ と ‘will’ はストップワードに加えて、もう一度ワード・クラウドを作成します。

>>> from wordcloud import STOPWORDS
>>> stopwords = set(STOPWORDS)
>>> stopwords.add('every')
>>> stopwords.add('will')
>>> wordcloud = WordCloud(stopwords=stopwords).generate(washington)
>>> plot_wordcloud(wordcloud)

らしくなりました。

オバマ大統領の就任演説も同じようにワード・クラウドにしてみます。

>>> wordcloud = WordCloud(stopwords=stopwords).generate(obama)
>>> plot_wordcloud(wordcloud)

マスクしたワード・クラウドを作成

安倍首相の2015年訪米時の議会演説を安倍首相のシルエットでマスクしたワード・クラウドを作成します。

安倍首相の2015年訪米時の議会演説は、ここからテキストファイルにして、python対話モードを実行しているディレクトリと同じディレクトリに保存しておきます。

ワード・クラウドを作成します。

>>> text = open('abe_shinzo_address_uscongress.txt', encoding='utf-8_sig').read()
>>> wordcloud = WordCloud().generate(text)
>>> plot_wordcloud(wordcloud)

良い感じっぽいので、安倍首相のマスクを作ります。

wikipediaの安倍首相の写真を白と黒で塗りつぶします。

誰か分からなくなってしまいましたが続けます。

numpy と pillow をインストールしておきます。

pip install pillow
pip install numpy

モジュールを読み込みます。

>>> import numpy as np
>>> from PIL import Image
>>>
>>> import nltk
>>> import matplotlib.pyplot as plt
>>> from wordcloud import WordCloud

マスクを作成します。

>>> img = Image.open('Shinzo_Abe_Official.jpg')
>>> mask = np.array(img)

ワード・クラウドを作成します。

>>> text = open('abe_shinzo_address_uscongress.txt', encoding='utf-8_sig').read()
>>> wc = WordCloud(max_words=1000, mask=mask).generate(text)
>>> plt.title('アメリカ議会で演説する安倍首相')
Text(0.5,1,'アメリカ議会で演説する安倍首相')
>>> plt.imshow(wc)

>>> plt.axis('off')
(-0.5, 1155.5, 1481.5, -0.5)
>>> plt.show()

今一つです。