からっぽのしょこ

読んだら書く!書いたら読む!同じ事は二度調べ(たく)ない

【テキストマイニング入門】R言語でこぶつば楽曲をクラスタリング【やってみた】

〇はじめに

 前回はネットワークグラフとワードクラウドを作成しました。
www.anarchive-beta.com
 今回はクラスター分析を行います。文書中の単語を基に類似度を測り分類していきます。

参考書籍
  • 『Rによるテキストマイニング入門』石田基広,森北出版株式会社
  • 『Rによるやさしいテキストマイニング』シリーズ,小林雄一郎,オーム社

〇やってみた

・クラスター分析

分析データ

 ハロー!プロジェクトのグループの「こぶしファクトリー」と「つばきファクトリー」の楽曲の歌詞を用います。
テキストファイル名は、こぶし:kbs、つばき:tbk、シングル曲:s、アルバム曲:a、作品の通し番号1,2,3...、トラック番号1,2,3...:a,b,c...としました。ディレクトリはkbtb。(例:つばきファクトリー4thシングルA面:kbtb/tbk_s4a.txt)

 この2グループは同事務所で同時期に結成されました。楽曲はどちらも様々な作詞家によって書かれています。クラスター分析を行うことで、それぞれのグループで分類されるのでしょうか?グループらしさというものは歌詞からも表れるのでしょうか?やってみましょう!

 RMeCabのdocMatrix2によってテキストデータを単語文書行列にして、デンドログラム(樹形図)で可視化します。

library(RMeCab)
library(magrittr)
library(dplyr)
library(stringr)
library(dendextend)
cluster1 <- docMatrix2("kbtb", pos = c("名詞", "形容詞", "動詞")) 
ncol(cluster1);nrow(cluster1)
colnames(cluster1) %<>% str_replace(".txt", "")
cluster2 <- cluster1 %>% t() %>% dist() %>% hclust("ward.D2") #single,complete,average,median
den <- as.dendrogram(cluster2)
lab.col2 <- ifelse(substr(labels(den), 1,3) == "kbs", "green4","orangered")
labels_colors(den) <- lab.col2
plot(den, main = "title")

f:id:anemptyarchive:20181205024000p:plain
デンドログラム(ウォード法)
 dist()で文書間の距離(非類似度)を測り、hclust()でグループ化します。文書を併合するための手法がいくつかあります。hclust()の引数methodを替えることで選べます。

  • ウォード法:ward.D2
  • 最短一致法:single
  • 最長一致法:complete
  • 群平均法:average
  • メディアン法:median

になります。

f:id:anemptyarchive:20181205024221p:plainf:id:anemptyarchive:20181205024234p:plain
最短一致法,最長一致法
f:id:anemptyarchive:20181205024248p:plainf:id:anemptyarchive:20181205024300p:plain
群平均法,メディアン法

 えーーーと、どうでしょうか、偏りのようなものが見えるでしょうか。ある程度固まってるようですが、綺麗に散らばるのもまた難しいでしょうし。どういう基準で判断すればいいのでしょうね。勉強します!(追記:コメントいただきまして、軽く調べただけなのですが、クラスタを作っていく訳で、トーナメント表のように2つがくっついていくのが良くて、シードばっかりのような形のことを鎖効果といって良くないようです。現在調べ中)

〇さいごに

 今回はクラスタリングを行いました。次回は同じ分類でも、カテゴライゼーションを行います。線形判別分析です。あとは、データハンドリングをちゃんとしてちょっとでも分析の質を上げなきゃだなーと思っているので、それが次の次という感じで考えてます。
www.anarchive-beta.com


 最後まで読んでいただきありがとうございました!またよろしくお願いします。