Lecture09: 階層的クラスター分析
自作関数ファイルの読み込み
source("func4lec09.R")
分析テキストURL
article_urls <- c()
article_urls <- readLines("Lec09_ArticleURL_info")
article_urls
[1] "https://mainichi.jp/english/articles/20241107/p2a/00m/0et/015000c"
[2] "https://mainichi.jp/english/articles/20241110/p2g/00m/0li/028000c"
[3] "https://mainichi.jp/english/articles/20241111/p2g/00m/0na/048000c"
[4] "https://mainichi.jp/english/articles/20241112/p2g/00m/0sp/005000c"
[5] "https://mainichi.jp/english/articles/20241209/p2g/00m/0sp/035000c"
[6] "https://mainichi.jp/english/articles/20241207/p2g/00m/0sp/037000c"
[7] "https://mainichi.jp/english/articles/20231124/p2a/00m/0et/016000c"
[8] "https://mainichi.jp/english/articles/20230526/p2a/00m/0et/013000c"
[9] "https://mainichi.jp/english/articles/20241203/p2a/00m/0li/022000c"
[10] "https://mainichi.jp/english/articles/20241209/p2g/00m/0na/024000c"
[11] "https://mainichi.jp/english/articles/20241207/p2g/00m/0bu/002000c"
[12] "https://mainichi.jp/english/articles/20241208/p2g/00m/0sc/027000c"
Term-Document Matrixの作成
contents <- lapply(article_urls, getArticleContent)
tmMtx <- getDocumentTermMTX(contents, term="lemma")
Processed document 10 of 12
dim(tmMtx)
[1] 1119 12
head(tmMtx)
文書単語行列(相対頻度 & TF-IDF2)
文書頻度(Dcument Frequency:DF)
DF<-apply(tmMtx, 1, function(x) length(x[x>0]))
head(DF)
-team ' 's 15th 20 20s
1 1 10 1 1 1
文書数
(N<-ncol(tmMtx))
[1] 12
TF-IDF
\[w=tf*(log(\frac{N}{df})+1) \]
tf_idf2 <- relative_tmMtx*(log(N/DF)+1)
head(tf_idf2)
練習1:DF値を条件として、tmMtxを部分抽出する
DF値が5以上の行を抽出してください
結果の抜粋(抽出結果を変数名tmMtx_c5に格納)
head(tmMtx_c5)
tmMtx_c5の行列サイズを確認
dim(tmMtx_c5)
[1] 41 12
階層的クラスター分析
文書間の距離を測る(euclidean距離)
dist.euclidean <- as.matrix(dist(t(relative_tmMtx)))
round(dist.euclidean,3)
1 2 3 4 5 6 7 8 9 10 11 12
1 0.000 0.119 0.129 0.128 0.112 0.102 0.085 0.083 0.112 0.099 0.104 0.107
2 0.119 0.000 0.143 0.127 0.107 0.119 0.113 0.121 0.102 0.109 0.113 0.128
3 0.129 0.143 0.000 0.146 0.138 0.136 0.132 0.123 0.137 0.132 0.132 0.147
4 0.128 0.127 0.146 0.000 0.128 0.116 0.136 0.137 0.129 0.121 0.130 0.140
5 0.112 0.107 0.138 0.128 0.000 0.104 0.107 0.116 0.115 0.111 0.106 0.127
6 0.102 0.119 0.136 0.116 0.104 0.000 0.107 0.109 0.112 0.105 0.109 0.111
7 0.085 0.113 0.132 0.136 0.107 0.107 0.000 0.083 0.114 0.108 0.106 0.119
8 0.083 0.121 0.123 0.137 0.116 0.109 0.083 0.000 0.112 0.107 0.111 0.116
9 0.112 0.102 0.137 0.129 0.115 0.112 0.114 0.112 0.000 0.101 0.110 0.118
10 0.099 0.109 0.132 0.121 0.111 0.105 0.108 0.107 0.101 0.000 0.086 0.108
11 0.104 0.113 0.132 0.130 0.106 0.109 0.106 0.111 0.110 0.086 0.000 0.118
12 0.107 0.128 0.147 0.140 0.127 0.111 0.119 0.116 0.118 0.108 0.118 0.000
階層的クラスター分析1
- Distance measure: euclidean
- Agglomeration method: ward
粗頻度データ
hc.raw.euclidean <- hclust(dist(t(tmMtx)), method = "ward.D2")
plot(hc.raw.euclidean)

相対頻度データ
hc.relative.euclidean <- hclust(dist(t(relative_tmMtx)), method = "ward.D2")
plot(hc.relative.euclidean)

TF-IDFデータ
hc.tfidf.euclidean <- hclust(dist(t(tf_idf2)), method = "ward.D2")
plot(hc.tfidf.euclidean)

階層的クラスター分析2
- Distance measure: canberra
- Agglomeration method: ward
粗頻度データ
hc.raw.canberra <- hclust(dist(t(tmMtx)), method = "ward.D2")
plot(hc.raw.canberra)

相対頻度データ
hc.relative.canberra <- hclust(dist(t(relative_tmMtx), method = "canberra"), method = "ward.D2")
plot(hc.relative.canberra)

TF-IDFデータ
hc.tfidf.canberra <- hclust(dist(t(tf_idf2), method = "canberra"), method = "ward.D2")
plot(hc)

課題(締め切り2024年12月17日)
“app_tmMtx_hclust”フォルダのserver.Rを編集して、次のTask1-3に取り組んでください。
Task1:
UI.Rの変数”tfIdf”がTRUE値をとるとき、tf-idf2の計算結果をweigited_tmMtxに代入する
Task2:
UI.Rの変数”smilMethod”の値が変更されたとき、simil関数の引数methodに反映して、動的にSimilarity
Matrixの結果を表示する
Task3:
UI.Rの変数”distance”と”agglomeration”が変更されたとき、階層的クラスタリング結果を、動的に表示する
LS0tCnRpdGxlOiAiTGVjMDk6IChGYWxsIDIwMjQpIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKZWRpdG9yX29wdGlvbnM6IAogIGNodW5rX291dHB1dF90eXBlOiBpbmxpbmUKLS0tCgojIExlY3R1cmUwOTog6ZqO5bGk55qE44Kv44Op44K544K/44O85YiG5p6QCiMjIOiHquS9nOmWouaVsOODleOCoeOCpOODq+OBruiqreOBv+i+vOOBvwpgYGB7cn0Kc291cmNlKCJmdW5jNGxlYzA5LlIiKQpgYGAKCiMjIOWIhuaekOODhuOCreOCueODiFVSTApgYGB7cn0KYXJ0aWNsZV91cmxzIDwtIGMoKQphcnRpY2xlX3VybHMgPC0gcmVhZExpbmVzKCJMZWMwOV9BcnRpY2xlVVJMX2luZm8iKQpgYGAKCiMjIFRlcm0tRG9jdW1lbnQgTWF0cml444Gu5L2c5oiQCmBgYHtyfQpjb250ZW50cyA8LSBsYXBwbHkoYXJ0aWNsZV91cmxzLCBnZXRBcnRpY2xlQ29udGVudCkKdG1NdHggPC0gZ2V0RG9jdW1lbnRUZXJtTVRYKGNvbnRlbnRzLCB0ZXJtPSJsZW1tYSIpCmRpbSh0bU10eCkKaGVhZCh0bU10eCkKYGBgCgojIyDnm7jlr77poLvluqbooYzliJcKLSA8YSBocmVmPSJodHRwczovL3d3dy5yLWJsb2dnZXJzLmNvbS8yMDIyLzA3L2hvdy10by11c2UtdGhlLXN3ZWVwLWZ1bmN0aW9uLWluLXIvIiB0YXJnZXQ9Il9ibGFuayI+c3dlZXDplqLmlbA8L2E+44Gu5Yip55SoCgpgYGB7cn0KIyMjIGFwcGx5KHRtTXR4LCAyLCBmdW5jdGlvbih4KSB4L3N1bSh4KSkgI2NmLiBsZWN0dXJlMDYKcmVsYXRpdmVfdG1NdHggPC0gc3dlZXAodG1NdHgsIE1BUkdJTiA9IDIsIGNvbFN1bXModG1NdHgpLCBGVU4gPSAiLyIpCmhlYWQocmVsYXRpdmVfdG1NdHgpCmBgYAoKIyMg5paH5pu45Y2Y6Kqe6KGM5YiXKOebuOWvvumgu+W6piAmIFRGLUlERjIpIAojIyMg5paH5pu46aC75bqmKERjdW1lbnQgRnJlcXVlbmN5OkRGKQpgYGB7cn0KREY8LWFwcGx5KHRtTXR4LCAxLCBmdW5jdGlvbih4KSBsZW5ndGgoeFt4PjBdKSkKaGVhZChERikKYGBgCgojIyMg5paH5pu45pWwCmBgYHtyfQooTjwtbmNvbCh0bU10eCkpCmBgYAojIyMgVEYtSURGCiQkdz10ZioobG9nKFxmcmFje059e2RmfSkrMSkgJCQKYGBge3J9CnRmX2lkZjIgPC0gcmVsYXRpdmVfdG1NdHgqKGxvZyhOL0RGKSsxKQpoZWFkKHRmX2lkZjIpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyAiPue3tOe/kjE8L3NwYW4+OkRG5YCk44KS5p2h5Lu244Go44GX44Gm44CBdG1NdHjjgpLpg6jliIbmir3lh7rjgZnjgosKIyMjIERG5YCk44GMNeS7peS4iuOBruihjOOCkuaKveWHuuOBl+OBpuOBj+OBoOOBleOBhApgYGB7ciwgZWNobz1GQUxTRX0KdG1NdHhfYzUgPC0gdG1NdHhbKERGPj01KSwgXQpgYGAKCiMjIyDntZDmnpzjga7mipznsovvvIjmir3lh7rntZDmnpzjgpLlpInmlbDlkI10bU10eF9jNeOBq+agvOe0jSkKYGBge3J9CmhlYWQodG1NdHhfYzUpCmBgYAojIyMgdG1NdHhfYzXjga7ooYzliJfjgrXjgqTjgrrjgpLnorroqo0KYGBge3J9CmRpbSh0bU10eF9jNSkKYGBgCgojIyDpmo7lsaTnmoTjgq/jg6njgrnjgr/jg7zliIbmnpAKKiA8YSBocmVmPSJodHRwczovL2JlbGxjdXJ2ZS5qcC9zdGF0aXN0aWNzL2NvdXJzZS8yNzE1NS5odG1sIiB0YXJnZXQ9Il9ibGFuayI+5Y+C6ICD44K144Kk44OIMTog6ZqO5bGk55qE44Kv44Op44K544K/44O85YiG5p6QPC9hPgoqIDxhIGhyZWY9Imh0dHBzOi8vbnVtZXJpY3MubWF0aGRvdG5ldC5jb20vRGlzdGFuY2UiIHRhcmdldD0iX2JsYW5rIj7lj4LogIPjgrXjgqTjg4gyOiDot53pm6LooYzliJc8L2E+CgojIyMg5paH5pu46ZaT44Gu6Led6Zui44KS5ris44KL77yIZXVjbGlkZWFu6Led6Zui77yJCmBgYHtyfQpkaXN0LmV1Y2xpZGVhbiA8LSBhcy5tYXRyaXgoZGlzdCh0KHJlbGF0aXZlX3RtTXR4KSkpCnJvdW5kKGRpc3QuZXVjbGlkZWFuLDMpCmBgYAoKIyMjIOmajuWxpOeahOOCr+ODqeOCueOCv+ODvOWIhuaekDEKKiBEaXN0YW5jZSBtZWFzdXJlOiBldWNsaWRlYW4KKiBBZ2dsb21lcmF0aW9uIG1ldGhvZDogd2FyZAoKIyMjIyDnspfpoLvluqbjg4fjg7zjgr8KYGBge3J9CmhjLnJhdy5ldWNsaWRlYW4gPC0gaGNsdXN0KGRpc3QodCh0bU10eCkpLCBtZXRob2QgPSAid2FyZC5EMiIpCnBsb3QoaGMucmF3LmV1Y2xpZGVhbikKYGBgCgojIyMjIOebuOWvvumgu+W6puODh+ODvOOCvwpgYGB7cn0KaGMucmVsYXRpdmUuZXVjbGlkZWFuIDwtIGhjbHVzdChkaXN0KHQocmVsYXRpdmVfdG1NdHgpKSwgbWV0aG9kID0gIndhcmQuRDIiKQpwbG90KGhjLnJlbGF0aXZlLmV1Y2xpZGVhbikKYGBgCgojIyMjIFRGLUlERuODh+ODvOOCvwpgYGB7cn0KaGMudGZpZGYuZXVjbGlkZWFuIDwtIGhjbHVzdChkaXN0KHQodGZfaWRmMikpLCBtZXRob2QgPSAid2FyZC5EMiIpCnBsb3QoaGMudGZpZGYuZXVjbGlkZWFuKQpgYGAKCiMjIyDpmo7lsaTnmoTjgq/jg6njgrnjgr/jg7zliIbmnpAyCiogRGlzdGFuY2UgbWVhc3VyZTogY2FuYmVycmEKKiBBZ2dsb21lcmF0aW9uIG1ldGhvZDogd2FyZAoKIyMjIyDnspfpoLvluqbjg4fjg7zjgr8KYGBge3J9CmhjLnJhdy5jYW5iZXJyYSA8LSBoY2x1c3QoZGlzdCh0KHRtTXR4KSksIG1ldGhvZCA9ICJ3YXJkLkQyIikKcGxvdChoYy5yYXcuY2FuYmVycmEpCmBgYAoKIyMjIyDnm7jlr77poLvluqbjg4fjg7zjgr8KYGBge3J9CmhjLnJlbGF0aXZlLmNhbmJlcnJhIDwtIGhjbHVzdChkaXN0KHQocmVsYXRpdmVfdG1NdHgpLCBtZXRob2QgPSAiY2FuYmVycmEiKSwgbWV0aG9kID0gIndhcmQuRDIiKQpwbG90KGhjLnJlbGF0aXZlLmNhbmJlcnJhKQpgYGAKCiMjIyMgVEYtSURG44OH44O844K/CmBgYHtyfQpoYy50ZmlkZi5jYW5iZXJyYSA8LSBoY2x1c3QoZGlzdCh0KHRmX2lkZjIpLCBtZXRob2QgPSAiY2FuYmVycmEiKSwgbWV0aG9kID0gIndhcmQuRDIiKQpwbG90KGhjKQpgYGAKCiMjICDoqrLpoYzvvIjnt6DjgoHliIfjgooyMDI05bm0MTLmnIgxN+aXpe+8iQojIyMgImFwcF90bU10eF9oY2x1c3Qi44OV44Kp44Or44OA44Guc2VydmVyLlLjgpLnt6jpm4bjgZfjgabjgIHmrKHjga5UYXNrMS0z44Gr5Y+W44KK57WE44KT44Gn44GP44Gg44GV44GE44CCCgojIyMjICBUYXNrMTogVUkuUuOBruWkieaVsCJ0ZklkZiLjgYxUUlVF5YCk44KS44Go44KL44Go44GN44CBdGYtaWRmMuOBruioiOeul+e1kOaenOOCkndlaWdpdGVkX3RtTXR444Gr5Luj5YWl44GZ44KLCgojIyMjIFRhc2syOiBVSS5S44Gu5aSJ5pWwInNtaWxNZXRob2Qi44Gu5YCk44GM5aSJ5pu044GV44KM44Gf44Go44GN44CBc2ltaWzplqLmlbDjga7lvJXmlbBtZXRob2Tjgavlj43mmKDjgZfjgabjgIHli5XnmoTjgatTaW1pbGFyaXR5IE1hdHJpeOOBrue1kOaenOOCkuihqOekuuOBmeOCiwoKIyMjIyBUYXNrMzogVUkuUuOBruWkieaVsCJkaXN0YW5jZSLjgagiYWdnbG9tZXJhdGlvbiLjgYzlpInmm7TjgZXjgozjgZ/jgajjgY3jgIHpmo7lsaTnmoTjgq/jg6njgrnjgr/jg6rjg7PjgrDntZDmnpzjgpLjgIHli5XnmoTjgavooajnpLrjgZnjgosKCgoKCg==