Rでシーケンスなクラスタリングをする必要がでてきたので勉強して、まとめておく。
用途としては状態があり、時間によって遷移するものをクラスタリング出来る。例としては、天気予報(前日に晴れ、今日は曇り)でいろんな地域をクラスタリングしたいといった用途やwebページの人の訪れをクラスタリング(LP→カテゴリー1→広告)に行くパターン等々・・・。
・使うパッケージTraMineR・cluser
sample.R
library(TraMineR)
library(cluster)
# データの読み込み
data("mvad")
# 状態の定義
mvad_alphab <- c("employment", "FE", "HE", "joblessness","school", "training")
# パターンフォーマット変換
mvad_seq <- seqdef(mvad, 17:86, xtstep = 6, alphabet = mvad_alphab)
# パターンの上位にある頻度を計算
seqtab(mvad_seq, idxs = 1:10)
# 遷移行列
mvad_trate <- seqtrate(mvad_seq)
round(mvad_trate, 2)
# 状態のクラスタリング作成
mvad_om <- seqdist(mvad_seq, method = "OM", indel = 1, sm = "TRATE")
clusterward <- agnes(mvad_om, diss = TRUE, method = "ward")
mvad_cl4 <- cutree(clusterward, k = 4)
cl4_lab <- factor(mvad_cl4, labels = paste("Cluster", 1:4))
# 各クラスターの可視化
seqdplot(mvad_seq, group = cl4_lab, border = NA)
# デンドログラムの可視化
plot(clusterward, which.plots = 2, labels = FALSE)
サンプルデータでは人が働いているか、無職、学校、トレーニングにいっているかといった事をクラスタリングしている。特に面白いのは人の行動パターンのクラスタリングの可視化である。seqdplotをすると以下のようなグラフが得られる。