クラスタリングとヒートマップをexcel形式で出力
Rで結果を出力するときwrite.table()を使って
CSV形式で出力するのが楽だが、
結果をExcelでくれ!ってなる場合もある
それにクラスタリングした結果を並べ替えたり
色を付けなおしたりするにはExcel便利
なので一度Rで計算して結果をExcelファイルに出力する
Excel形式で出力するライブラリがこれ
library(openxlsx)
を使う
例えば前回やったクラスタリングの結果を
Excel形式で出力するときに使っているコードはこちら
WriteClusteringinXlsx <- function(Data.All){ # 行名の取得 Sp.Name <- rownames(Data.All) # 距離の計算 Dist.Data <- dist(Data.All, method = "euclidean") # クラスタリング Clust.Data <- hclust(Dist.Data, method = "ward.D2") # クラスタリングの結果に行名を付ける Clust.Order <- Clust.Data$order Clust.Order <- t(rbind(seq(length(Clust.Order)), Clust.Order)) Clust.Order <- as.data.frame(Clust.Order) colnames(Clust.Order) <- c("num", "hc") Clust.Order <- cbind(Clust.Order[order(Clust.Order$hc),], Sp.Name, Data.All) Clust.Order <- Clust.Order[order(Clust.Order$num),] Clust.Order <- Clust.Order[, c(-1)] # クラスタリングの履歴をクラスタリングの結果と結合する Clust.Height <- cbind(Clust.Data$merge, format(Clust.Data$height, digit = 3, scientific = TRUE)) Clust.Height <- rbind(Clust.Height, c(NA, NA, NA)) colnames(Clust.Height) <- c("Element1", "Element2", "Height") Clust.Height <- cbind(Clust.Order, Clust.Height) # Excel形式での出力 Excel.Workbook <- createWorkbook() Workbook.Name = sprintf("Cluster.xlsx") Sheet.Name = sprintf("IRIS") addWorksheet(Excel.Workbook, sheetName = Sheet.Name) writeData(Excel.Workbook, sheet = Sheet.Name, x = Clust.Height) saveWorkbook(Excel.Workbook, Workbook.Name, overwrite = TRUE) }
Excel形式での出力はまず
createWorkbook()でワークブックを作って、
addWorksheet()でシートを足す
データの書き込みはwriteData()で行う
引数のxが書き込むデータになる
saveWorkbook()で保存してファイルを閉じる
ファイルが開いているとエラーが出る
openxlsx package | R Documentation
RとExcel(ファイルの読み書き、データフレームをExcelで編集) | marketechlabo
R で openxlsx パッケージを用いて xlsx ファイルを扱う - Qiita
pheatmap()でクラスタリングの結果を出力する方法がわからなかったので
dist()とhist()で距離の計算とクラスタリングを行っている
クラスタリング後は種の行の名前がなくなるのでつけ直している
元データは前回と同じでiris
# データの用意 Data.Iris <- iris Par.List <- colnames(Data.Iris) Sp.Num <- paste(Sp.Names, rep(1:50, 3), sep = ", ") d <- Data.Iris[1:4] rownames(d) <- Sp.Num # Excel形式で出力 WriteClusteringinXlsx(d)
結果はこちら
hc | Sp.Name | Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Element1 | Element2 | Height | |
1 | 36 | setosa, 36 | 5 | 3.2 | 1.2 | 0.2 | -102 | -143 | 0.00e+00 |
2 | 13 | setosa, 13 | 4.8 | 3 | 1.4 | 0.1 | -8 | -40 | 1.00e-01 |
3 | 2 | setosa, 2 | 4.9 | 3 | 1.4 | 0.2 | -1 | -18 | 1.00e-01 |
~中略~ | |||||||||
148 | 86 | versicolor, 36 | 6 | 3.4 | 4.5 | 1.6 | 146 | 147 | 1.23e+01 |
149 | 52 | versicolor, 2 | 6.4 | 3.2 | 4.5 | 1.5 | 145 | 148 | 3.24e+01 |
150 | 57 | versicolor, 7 | 6.3 | 3.3 | 4.7 | 1.6 |
はてな記法で表組みは簡単だけど手間が多い
表組みをつくる(表組み記法) - はてなダイアリーのヘルプ
hcがhclust()のクラスタリングの結果でクラスタリングする前の行番号を表す
行番号が並べ替えられてしまうので種の名前もつけた
Element1/2はクラスタリングの履歴でHeightは距離を示す
R: Hierarchical Clustering
2つの場合はユークリッド距離だけどクラスター同士の計算方法がわからなかった
ヒートマップはExcelでも表示可能
"ホーム" -> "条件付き書式" -> "新しいルール”
で最小値・最大値を数値にすれば同じRと同じように表示できる