ワードクラウドは本当にわかりやすい可視化の方法なのか?

 近年、テキストマイニングの結果をワードクラウドと呼ばれる方法で可視化するのが流行しています。

文章中で出現頻度が高い単語を複数選び出し、その頻度に応じた大きさで図示する手法。ウェブページやブログなどに頻出する単語を自動的に並べることなどを指す。文字の大きさだけでなく、色、字体、向きに変化をつけることで、文章の内容をひと目で印象づけることができる。
デジタル大辞泉の解説

 しかし、ワードクラウドという可視化の方法は、それを見る人にとって、本当にわかりやすいものなのでしょうか? まずは、RのlanguageRパッケージのalice(『不思議の国のアリス』)を使って、ワードクラウドを描いてみます。ワードクラウドの作成には、wordcloudパッケージを用います。また、ここではワードクラウドという可視化の方法そのものに焦点を当てるべく、綺麗な色などはつけずにモノクロで作成します。

# 分析データ
library(languageR)
data(alice)
# ワードクラウドの作成(頻度10以上の単語を描画)
library(wordcloud)
wordcloud(alice, min.freq = 10)

 上記スクリプトを実行すると、以下のようなワードクラウドが表示されます。

f:id:langstat:20180111214755p:plain

 この図を見ると、"said"や"alice"といった単語が多く使われていることがわかります。では、それ以外に多く使われている単語は何でしょうか? よく目をこらしてみると、"little"、"queen"、"and"、"time"のような単語が他の単語よりも大きく描かれているような気がします。この「ような気がします」というのが曲者で、人間の目は、文字の大小関係を一度にたくさん把握するのが必ずしも得意ではありません。その結果、分析者の目に「たまたま」とまった単語に注意が向けられ、恣意的な解釈を招く危険性もあります。
 ここで思い出してほしいのは、上記のワードクラウドは、単に単語の頻度の高低(=文字の大小)をランダムに配置しているだけだということです。つまり、このグラフを眺めてわかるのは、よく使われる単語の頻度に関する情報だけです。しかし、先ほど述べたように、ワードクラウド上では、頻度の高低を正確に把握するのが難しく、個々の単語の使用頻度もわかりません。
 単語の頻度に関する順位について知りたければ、単純に頻度上位の単語を棒グラフで可視化する方がよほど効果的です。

# 全ての文字を小文字に変換
alice.lower <- tolower(alice)
# ワードリストの作成
freq.list <- table(alice.lower)
sorted.freq.list <- sort(freq.list, decreasing = TRUE)
# 頻度上位30位までを棒グラフで可視化
barplot(sorted.freq.list[1 : 30], las = 2, ylab = "Freq.")

 上記スクリプトを実行すると、以下のような棒グラフが表示されます。

f:id:langstat:20180111215608p:plain

 この棒グラフを見ると、単語の使用頻度に関する順位が一目瞭然です*1。このように、単語の頻度の高低を議論するのであれば、見た目がキャッチーなだけのワードクラウドではなく、シンプルな棒グラフなどで可視化するのがよいと考えます*2
 ワードクラウドの描画、英語や日本語のテキストからのワードリスト作成については、手前味噌ですが、以下の拙著などにも詳しく説明してあります。

Rによるやさしいテキストマイニング

Rによるやさしいテキストマイニング

*1:棒グラフの描画に使うワードリストを作成する際にストップワードを指定したい場合は、tmパッケージのremoveWords関数などを利用します。

*2:なお、個々の単語の具体的な使用頻度は、sorted.freq.listという変数の中を見ればわかります