jnobuyukiのブログ

研究していて困ったことやその解決に関するメモ。同じように困ったあなたのために。twitter ID: @j_nobuyuki

R言語でワードクラウドを作る

今回は、R言語のwordcloudパッケージを利用して、アンケートの自由記述回答をwordcloud形式で表現する方法をまとめます。

ワードクラウドとは?

コトバンクによれば「文章中で出現頻度が高い単語を複数選び出し、その頻度に応じた大きさで図示する手法」とのこと。例えばアンケートの自由記述で頻出する単語をこの方法で直感的に把握できます。そして、こちらで重要であると思ってほしい言葉が、回答内に頻出しているかを確認すると、アンケート回答者の理解を推し量れるでしょう。

https://kotobank.jp/word/%E3%83%AF%E3%83%BC%E3%83%89%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89-674221

実例でまとめるワードクラウドの作り方

テキストの準備

今回は、三木市子ども・子育て支援事業計画策定のためのアンケート調査の自由記述を解析します。
http://www2.city.miki.lg.jp/miki.nsf/image/9513DF93DD522FA849257CE50048B44E/$FILE/syo-no17.pdf

あらかじめ、自由記述内容をコピーペーストしたファイルをテキスト形式で保存(answertext.txt)しておきます。
R言語でこのファイルを読み込みます。

textdata <- read.table("~/Desktop/answertext.txt",sep = " ", as.is = TRUE)

3番目の引数as.isが大事です。これはデフォルトでFALSEなのですが、TRUEにすると文字列変数がfactor型で読み込まれることを防止できます。

RMeCabで形態素解析

自由記述されたテキストは単語ごとに分かち書きされていません。そこで、先日紹介したRMeCabで形態素解析を行って、単語ごとの分かち書きをするとともに、各単語の品詞をチェックします。

今回はRでは普通やらないfor文を利用して、各回答について形態素解析を実施します。

# 最終的な単語リストを保存するオブジェクトの確保
wordlist <- ""

#テキストが回答ごとに別の要素になっているのでfor文を利用する
for (i in 1:nrow(textdata)){
 currentlist <- unlist(RMeCabC(textdata[i,"V1"], mypref = 1))
wordlist <- append(wordlist, currentlist)
}

RMeCabCは文字列を形態素解析する関数です。引数のmyprefは0にするとテキスト内での表記通り、1にするとその単語の終止形で単語が出力されます。

データの整理

今のデータをワードクラウドにしてしまうと、おそらく助詞や助動詞が大きく表示されます。今回は回答の内容を把握したいので、品詞情報を利用して、名詞または動詞にデータを限定します。

res <- wordlist[names(wordlist) == "名詞" | names(wordlist) == "動詞"]

さらに、「ある」「いる」「する」「こと」のような動詞や名詞を除外します。

res <- res[res != "ある" & res != "いる" & res != "する" & res!= "こと"]
wordcloud関数を使ってワードクラウドを作る

最後にwordcloudパッケージのwordcloud関数を使います。

require(wordcloud)
library(wordcloud)

#日本語フォントがグラフに表示されるように設定(macの場合)
par(family = "Osaka")

#wordcloud
wordcloud(names(table(res)),freq = table(res), min.freq = 8, color = c("purple", "blue", "green", "orange", "pink", "red"))

wordcloud関数の引数min.freqはワードクラウド内の表示されることばの最低頻度です。colorは頻度の少ないもの方高いものまでを順に表す色を指定します。

できあがり

できあがったワードクラウドはこちらです。

f:id:jnobuyuki:20150731120727p:plain

これを見ると学校教育に関して、保護者の方が考えているキーワードが見えてきます。