〇はじめに
前回は文書中の単語ごとの出現頻度を計測しました。
www.anarchive-beta.com今回は視覚化していきます。前回のようにテキストを数値で捉えたものを、視覚的に捉えられる形式に加工します。具体的には、ネットワークグラフとワードクラウドを作成します。
・参考書籍
- 『Rによるテキストマイニング入門』石田基広,森北出版株式会社
- 『Rによるやさしいテキストマイニング』シリーズ,小林雄一郎,オーム社
〇やってみた
・分析対象データ
前回と同様にモーニング娘。'18のシングル楽曲を利用します。ファイルの構成は以下の通りです。
- ディレクトリ名はmor18
- ファイル名:曲タイトル
- mor18_65a.txt:A you Happy?
- mor18_65b.txt:A ganna
- mor18_66a.txt:フラリ銀座
- mor18_66b.txt:自由な国だから
- mor18_66c.txt:Y字路の途中
・ネットワークグラフの作成
まずは、バイグラムを作成します。バイグラムとは2つの単語の繋がりの事です。例えば
「銀座の街をフラリ散歩しましょう」
という文を
「銀座」-「街」、「街」-「フラリ」、「フラリ」-「散歩」・・・(※名詞, 動詞, 形容詞をピックアップする場合)
というように、ある単語とその次にくる単語をセットにしていきます。今回は2語の繋がりに注目するのでバイグラム(2-gram)と言いますが、分析によっては3語以上の場合もあります。そのため語数に関わらず、単語の連なりをNグラム(n-gram)と呼びます。
library(RMeCab) file_name1 <- "mor18_66a.txt" file_path1 <- paste("mor18", file_name, sep = "/") bigram1 <- docDF(file_path, type = 1, nDF = 1, N = 2, pos = c("名詞", "動詞", "形容詞"))
library(dplyr) library(igraph) bigram2 <- bigram1 %>% select(everything(), FREQ = file_name) bigram3 <- bigram2 %>% select(N1, N2, FREQ) network1 <- graph_from_data_frame(bigram3) tkplot(network1, vertex.color = "SkyBlue", vertex.size = 13, vertex.label.cex = 0.75, vertex.label.dist = 0, vertex.label.family = "JP1")
ネットワークグラフの雰囲気を掴んでいただけたでしょうか。それでは、全ての文書を統合してみましょう。
file_name2 <- list.files("mor18") file_path2 <- paste("mor18", file_name2, sep = "/") bigram4 <- data.frame() for(i in 1:length(file_path2)) { tmp1 <- file_path2[i] tmp2 <- docDF(tmp1, type = 1, nDF = 1, N = 2, pos = c("名詞", "動詞", "形容詞")) tmp3 <- rename(tmp2, FREQ = file_name2[i]) bigram4 <- rbind(bigram4, tmp3) } bigram5 <- bigram4 %>% select(N1, N2, FREQ) %>% group_by(N1, N2) %>% summarise(FREQ = sum(FREQ))
bigram6 <- bigram5 %>% select(N1, N2, FREQ) %>% filter(FREQ >= 2) NROW(bigram6) network2 <- graph_from_data_frame(bigram6) tkplot(network2, vertex.color = "SkyBlue", vertex.size = 13, vertex.label.cex = 0.75, vertex.label.dist = 0, vertex.label.family = "JP1")
以上でネットワークグラフは完成です。ここからどのように解釈していくのかについては、また勉強した後にまとめます!
・ワードクラウドの作成
次に、皆さん見る機会も多いかと思われるワードクラウドを作成します。プロットにはwordcloud2パッケージのwordcloud2()を利用します。
library(RMeCab) library(dplyr) library(wordcloud2) file_name2 <- list.files("mor18") file_path2 <- paste("mor18", file_name2, sep = "/") wc1 <- data.frame() for(i in 1:length(file_path2)) { tmp1 <- file_path2[i] tmp2 <- docDF(tmp1, type = 1, pos = c("名詞", "動詞", "形容詞")) tmp3 <- tmp2 %>% select(everything(), FREQ = file_name2[i]) wc1 <- rbind(wc1, tmp3) } wc2 <- wc1 %>% select(everything()) %>% group_by(TERM, POS1, POS2) %>% summarize(FREQ = sum(FREQ)) wc3 <- wc2 %>% select(everything()) %>% filter(FREQ >= 3) NROW(wc3) wc4 <- wc3[,c("TERM","FREQ")] wordcloud2(wc4, size = 0.6, color = "random-light")
〇さいごに
今回は、基本的な作成手法についてまとめました。途中にも書きましたが、理論的な話は今後の進捗次第です。記号や品詞の異なる英単語、その他不要な単語を剪定して、必要な単語のみを残すようなアレンジも今後まとめていく予定です。
最後まで読んでいただきありがとうございました!次回は、出現する単語によって文書を分類する方法について書くつもりです。またよろしくお願いします。
www.anarchive-beta.com
2018.12.30追記:不要な単語を取り除きたい場合にはこちらの記事を参考ください。
www.anarchive-beta.com