今回はワードクラウドの時系列変化を
アニメーション化する事ができるライブラリ
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
のご紹介でした。

それでは