乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

wordcloud

今回はワードクラウドの時系列変化を
アニメーション化する事ができるライブラリ
AnimatedWordCloudのご紹介です。


解説動画はこちら


ワードクラウドとは
データから単語を抜き出し
画像化したもののことです。

こんな感じのものです
2

単語の頻出数が文字の大きさになります。


このワードクラウドをアニメーション化する
ライブラリ「AnimatedWordCloud」を
リリースした方がいました。

Github


早速試してみましょう。
Google Colabで試せるコードになっています。


ライブラリのインストール
!pip install AnimatedWordCloudTimelapse==0.9.5

コマンドでインストールできますが
たまに失敗することもある様です。

Colabのバックエンドが
一定ではないためかと思いますが
何度か再起動してインストールすれば
成功すると思います。



ライブラリの読み込み

ワードクラウドの作成に必要な
ライブラリを全部読み込みします。
from AnimatedWordCloud import animate, Config
config = Config(output_path="/content/")

import pandas as pd
from datetime import datetime as dt
from sklearn.feature_extraction.text import CountVectorizer
configではアウトプット先の設定を行えます。
ワードクラウドに使用するデータの作成は
Pandasデータフレームを用いると楽です。

単語のカウント用に CountVectorizer を用います。



サンプルデータの読み込み


ここからは製作者様のコードを
一部引用させていただいています。

githubに付属されていた
イーロンマスクのツイートデータ(2012 - 2018)
の読み込みです。
df = pd.read_table("https://raw.githubusercontent.com/konbraphat51/AnimatedWordCloudExampleElon/main/elonmusk_tweets.csv",sep=",")

df["created_at"] = pd.to_datetime(df["created_at"])
df.head()

結果が出ていれば読み込み成功です。



ワードクラウド作成用のデータ構造


このライブラリでアニメーションワードクラウドを
作成するには、データ構造を合わせないといけません

このデータは次の様なデータ構造になっています。


[
(数値(年度),
 {'ワード' : 数値(回数) , ・・・ }
) , ・・・
]


2つの要素を持ったタプルが複数格納されたリストで
リストの要素のタプルは
1.数値型の時系列
2.キー:ワード , 値:回数の辞書
という構造になっています。

ちょっと複雑な構造体ですので
形に合わせる集計が必要になっています。


データの加工

こちらも元のコードを参考にしたコードとなります。
dfs_by_year = []
for year in range(2012, 2018):
    df_year = df[dt(year, 1, 1) <= df["created_at"] ]
    df_year = df_year[dt(year+1, 1, 1) > df_year["created_at"]]
    dfs_by_year.append(df_year)
    print(df_year.shape)

stopwords = ["the", "co", "http", "to", "of", "and", "on", "for", "just", "that", "with", "by", "is", "in", "at", "will"]

min_df = 10
counter = CountVectorizer(stop_words=stopwords)
dicts_by_year = []

for cnt in range(len(dfs_by_year)):
    np_year = counter.fit_transform(dfs_by_year[cnt]["text"]).toarray()
    df_year = pd.DataFrame(np_year, columns=counter.get_feature_names_out())
    sr_sum = df_year.sum(axis=0).sort_values(ascending=False)
    sr_sum = sr_sum[sr_sum >= min_df]

    #to dictionary
    dict_year = sr_sum.to_dict()
    dicts_by_year.append(dict_year)

wordvector_timelapse = []
for cnt in range(len(dicts_by_year)):
    year = 2012 + cnt
    wordvector_timelapse.append((year, dicts_by_year[cnt]))


ワードクラウドの作成

変数 = animate(データ, config) でワードクラウドの作成
configで指定したパスに
output.gif が保存される仕組みです
result = animate(wordvector_timelapse, config)



イメージの再生


出来上がったら見てみましょう。
from IPython.display import display, Image

with open('/content/output.gif','rb') as f:
    display(Image(data=f.read(), format='png',width=600))

2


ワードクラウドがアニメーション表示されると思います。

ツイートのデータなどは
良くワードクラウドで表現される事が多いかと思いますが
それを時系列でアニメーション化させる
表現手法は作成するのに結構手間がかかると思います。

それを少しのコードだけで
作成する事ができるのは
めちゃくちゃ便利だと思います。


このライブラリを公開された方のような人が
今後沢山出てきていただけると嬉しいですね。

今回は
アニメーションワードクラウドを
作成出来る
AnimatedWordCloud
のご紹介でした。

それでは

ワードクラウドづくりにハマっております。

ワードクラウドは文章中で

出現頻度が高い単語を複数選び出し
その頻度に応じた大きさで図表化する手法のことで
文章の特徴を一目で見ることができると言うものです。


解説動画はこちら



Pythonでは
wordcloud
と言うライブラリがあるので
これを用いるとワードクラウドを簡単に作成できます。

インストール方法は

pip install wordcloud

これでライブラリがインストールされたら
必要なものとしては
文章をまとめたものが必要です。

スクレイピングや
形態素解析などして
集めて集計すればできます。

名詞や動詞など意味のあるものだけを残し
要らない助詞などは削ります。

単語と単語の間はスペースなどで
空けておきましょう。

ファイル化したら
ワードクラウドの作成です。

嵐の歌詞を集めて
ワードクラウドを作ってみましょう。

ワードクラウドは次のようなコードで作成できます。
from wordcloud import WordCloud
from PIL import Image
import matplotlib.pyplot as plt
%matplotlib inline

with open('arashi_list.txt', encoding='utf-8') as _f:
    text = _f.read()
font_path = '/System/Library/Fonts/ヒラギノ丸ゴ ProN W4.ttc'
exc_words = ['たち','みる','そう', 'ない', 'いる', 'する', 'まま', 'よう', 'てる', 'なる', 'こと', 'もう', 'いい', 'ある', 'ゆく', 'れる']
wordcloud = WordCloud(background_color='white',
    font_path=font_path, width=800, height=600, stopwords=set(exc_words)).generate(text)
wordcloud.to_file('arashi.png')

im = Image.open('arashi.png')
plt.figure(figsize=(16,12))
plt.imshow(im)
plt.tick_params(labelbottom=False,labelleft=False,labelright=False,labeltop=False)
plt.tick_params(bottom=False,left=False,right=False,top=False)
plt.show()

ワードクラウドを作るには
フォントの指定が必要です。

日本語でやるには日本語対応のフォントが必要です。
上記の例はmacなので
/System/Library/Fonts/
フォルダを指定していますが
Windowsの人は

C:/Windows/Fonts/

配下になると思います。
.ttc拡張子のファイルを指定しましょう。

フォントをうまく指定できたら
画像ファイルができるので
それを表示してみると

download-2

はい出来ました。

僕らを筆頭に未来、明日、きっとなど
すごく明るい未来が感じられる世界観の歌詞だと
見受けられますねーーー

1曲も知らないけどwww

こんな感じですぐに作ることができるので
めちゃくちゃ楽しいです。

今度は
米津玄師さんの歌詞でやってみましょう!!!

こうなりました。
download-1

あなた、笑う が
中心の世界観です。

嵐と比べてみると
download

人称の違いや
言葉のチョイスが対照的で面白いですね

・嵐は自分中心
・米津さんは相手想い

そんな歌詞なんだろうと思いますね。
Lemonしか知らないけどwww

非常に面白いし、理解しやすいので
表現方法として優秀です。

皆さんも
作ってみてはいかがでしょうか?

それでは

このページのトップヘ