#はじめに
機械学習の参考書をみていたら、wordcloudの例が紹介されていて、Perfumeの歌詞をwordcloudで可視化したいという衝動に駆られてしまいました。
数時間、試行錯誤をした結果、wordcloud2で無事可視化ができたので、備忘録として残したいと思います。
この投稿は Rのワードクラウドで審美的なアウトプット wordcloud2ライブラリの紹介
の記事を参考にさせていただきました。
流れとしては テキストファイルの入手 -> 形態素解析ツールによる分析 -> wordcloudによる視覚化 で行います。
#wordcloud2で必要なツール
上記の記事を参考にしつつ色々調べた結果、Rの環境以外に以下のツールが必要であることがわかりました。
###ソフトウェア
MeCab : 日本語形態素解析器(RMeCabだけでは動きません)
###Rのパッケージ
RMeCab : MeCabをRに実装するパッケージ
wordcloud2 : wordcloudを作成するパッケージ
dplyr
###その他ソフトウェア
csvをストレスなく編集できるソフトウェア(Excelなど)
テキストエディタ(CotEditorなど)
一番最初にハマった点が、MeCabをインストールする部分です。
以下、順番に説明をしていきます。
#macで必要な下準備
macの場合は下準備としてMeCabのインストールが必要になります。
##macへMeCabのインストール
rmecabのサイトを参考にして確実にインストールしてください。
macではソースからインストールする方法と、Homebrewでインストールする方法の2つがあります。
過去に他のソフトウェアをインストールなどでHomebrewがインストールされているようでしたら、Homebrewの方が圧倒的にインストールが楽だと思います。
ソースからインストールする場合はターミナルからサイトの指示通りにインストールをしてください。
##RMeCabのインストールと動作確認
ここからRのスクリプトで作業をします。
まず、スクリプトファイルとして保存して、セッションをスクリプトのソースファイルが格納されているディレクトリに指定します。
続いて、macの場合は以下のコマンドでパッケージをインストールします。
URLを追加しないとちゃんと動きませんので注意してください。
install.packages("RMeCab", repos = "https://rmecab.jp/R", type = "source")
library(RMeCab)
続いて、RMeCabが動作するか確認するために、以下のコマンドを実行してみます。
#Test the functionality of RMeCab on my mac.
library(RMeCab)
res <- RMeCabC("ナナイロ 広い空に昇るキラメキ キミのヒラメキ")
unlist (res)
コンソールに以下の出力があれば、無事インストール完了です。
> #Test the functionality of RMeCab on my mac.
> library(RMeCab)
> res <- RMeCabC("ナナイロ 広い空に昇るキラメキ キミのヒラメキ")
> unlist (res)
名詞 形容詞 名詞 助詞 動詞 名詞
"ナナイロ" "広い" "空" "に" "昇る" "キラメキ"
名詞 助詞 名詞
"キミ" "の" "ヒラメキ"
#テキストの読み込み
##歌詞を解析して結果をデータフレームに
著作権上の問題がありますので、歌詞をこの記事に掲載することはできませんが、歌詞を入れたテキストファイルをスクリプトと同じディレクトリに入れます。
今回は LyricTest.txt という名前のテキストファイルを準備しました。
#Specify the text file and Count the frequency of word. Specify the
file <-"LyricTest.txt"
tmpdf <-docMatrix2(file,pos=c("名詞"))
tmpdf<-as.data.frame(tmpdf)
品詞は色々と試してみたのですが、おそらく「名詞」が一番しっくりくると思います。
動詞なども指定することが可能です。
##データフレームの整形
作成したデータフレームをwordcloudに読み込める形に整形します。
#Specify the rowname of the dataframe with the terms
#Rearrange the order of Freq and term for wordcloud function later
tmpdf$term <- row.names(tmpdf)
colnames(tmpdf) <- c("Freq","term")
df <-tmpdf[,c(2,1)]
##csvに出力してExcelなどで確認
Rでも色々とやり方があるかと思いますが、私は使い慣れているExcelで確認をしたいので、以下の通り一旦結果をcsvファイルでスクリプトファイルがあるディレクトリに出力しました。
mac, 日本語, Rの組み合わせでそのまま出力すると確実に文字化けするので、fileEncoding = "CP932" でShift JISを指定しました。
#Output the csv for edit in Excel, specifying the Shift JIS for avoiding corruption of Japanese characters
write.csv(tmpdf,file = "LyricsNoun.csv", fileEncoding = "CP932")
Excelファイルで表示すると、以下のようなキーワードと出現頻度が確認できます。
不要なキーワードなどがある場合はここで除去して、ファイルを保存します。
##編集したcsvファイルを読み込む
編集して保存したcsvファイルを読み込みます。
日本語の文字化けを防ぐため、fileEncoding = "CP932" でShift JISを指定します。
#Read the csv file which was curated by Excel, specifying the Shift JIS for avoiding corruption of Japanese characters
df<-read.csv("LyricsNoun.csv",fileEncoding = "CP932")
df <- data.frame(df)
##wordcloudに読み込む準備
いよいよRにwordcloud2パッケージをインストールして読み込みます。
今回のナナナナナイロ の歌詞は31の名詞が含まれていたので単語数が多くて見辛くなることはないのですが、読み込むテキストによっては膨大な数になります。
そのような場合はdplyrのheadに上限の数を入力します。
install.packages("wordcloud2")
library(wordcloud2)
library(dplyr)
#Sort the rows by decending of frequency (high to low) and specifying the number of words by head() option
wc_df <- df %>% dplyr::arrange(desc(Freq)) %>% head(c(50))
##wordcloud2による描画
以下のコマンドで描画がされるはずです。
sizeのオプションは文字サイズになります。
単語間の距離を広げる場合は、gridSizeオプションで調整します
# Draw the wordcloud. Adjust the size by the options. Use gridSize= option for adjusting the interval of words
wordcloud2(wc_df,size=1,minSize=0)
大好きな曲の歌詞もこのような形で見ることで、一層愛着が湧きますね☺️