Rで解析:簡単HeatMapパッケージ「pheatmap」の紹介

Rの解析に役に立つ記事
スポンサーリンク

Pretty Heatmapsがタイトルに設定されているpheatmapを紹介します。2015年3月の時点でバージョンは1.0.2です。

このパッケージは、画像ファイルの出力がコマンド内で設定できるなど非常にシンプルな設計となっています。

今回は、RGoogleAnalyticsパッケージで「ある月の曜日毎の時間別アクセス数」を取得し、ヒートマップで表示するコマンドを紹介します。

スポンサーリンク

パッケージのインストールと準備

pheatmapのインストールは下記コマンドをRで実行します。

install.packages("pheatmap")

コマンドの紹介

コマンドを実行することで、出力例の図が作成できます。なお、pheatmapコマンドで利用できるデータの形式はmatrixです。datafreamでは無いのでご注意ください。紹介コマンドの詳細はコメントを確認してください。また、プロットせずにファイルを直接出力する方法は最下部のコマンドを参照してください。ファイル出力はpng、pdf、 tiff、 bmp、 jpegが対応しています。

#ライブラリの読み込み
library("pheatmap")
library("RGoogleAnalytics")

###GoogleAnalyticsへのアクセス設定#####
#クライアントIDを設定
client.id <- "&#12463;&#12521;&#12452;&#12450;&#12531;&#12488;ID&#12434;&#35373;&#23450;"
#&#12463;&#12521;&#12452;&#12450;&#12531;&#12488;&#12471;&#12540;&#12463;&#12524;&#12483;&#12488;&#12434;&#35373;&#23450;
client.secret <- "&#12463;&#12521;&#12452;&#12450;&#12531;&#12488;&#12471;&#12540;&#12463;&#12524;&#12483;&#12488;&#12434;&#35373;&#23450;"
#&#12463;&#12521;&#12452;&#12450;&#12531;&#12488;ID&#12362;&#12424;&#12403;&#12471;&#12540;&#12463;&#12524;&#12483;&#12488;&#12398;&#12488;&#12540;&#12463;&#12531;&#12434;&#21462;&#24471;
oauth_token <- Auth(client.id, client.secret)
#&#12487;&#12540;&#12479;&#12434;&#21462;&#24471;&#12377;&#12427;&#12503;&#12525;&#12501;&#12449;&#12452;&#12523;id&#12434;&#35373;&#23450;
TableID <- "ga:&#12503;&#12525;&#12501;&#12449;&#12452;&#12523;id"

#&#12503;&#12525;&#12501;&#12449;&#12452;&#12523;&#12398;&#30906;&#35469;
#GetProfiles(oauth_token)
########

###&#21462;&#24471;&#24180;,&#26376;&#12434;&#35373;&#23450;#####
year <- 2014 #&#21462;&#24471;&#12375;&#12383;&#12356;&#24180;&#12434;&#35373;&#23450;
month <- 7 #&#21462;&#24471;&#12375;&#12383;&#12356;&#26376;&#12434;&#35373;&#23450;
########

###&#21462;&#24471;&#24180;,&#26376;&#12398;&#12505;&#12463;&#12488;&#12523;&#12434;&#20316;&#25104;#####
StartDate <- as.Date(paste(year, "-", formatC(month, width = 2, flag="0"), "-01", sep = ""))
EndDate <- as.Date(format(as.Date(format(StartDate,"%Y%m01"),"%Y%m%d") + 31,
                             "%Y%m01"), "%Y%m%d") - 1
########

#Dimensions&#12398;&#35373;&#23450;
Dimensions <- c("ga:dayOfWeekName", "ga:hour")

#&#21462;&#24471;&#12497;&#12521;&#12513;&#12540;&#12479;&#12398;&#35373;&#23450;
query.list <- Init(start.date = as.character(StartDate),
                      end.date = as.character(EndDate),
                      dimensions = Dimensions,
                      metrics = "ga:users",
                      max.results = 10000,
                      table.id = TableID)

#&#21462;&#24471;&#12497;&#12521;&#12513;&#12540;&#12479;&#12540;&#12434;&#20966;&#29702;
query <- QueryBuilder(query.list)

#&#12487;&#12540;&#12479;&#12398;&#21462;&#24471;
AccessData <- GetReportData(query, oauth_token)

###&#12487;&#12540;&#12479;&#12398;&#25972;&#24418;#####
#&#26332;&#26085;&#12398;&#20006;&#12403;&#38918;&#12399;&#12371;&#12371;&#12391;&#35373;&#23450;
WeekDayAnaData <- data.frame(c("Sunday", "Monday", "Tuesday", "Wednesday",
                                  "Thursday", "Friday", "Saturday"))

#&#26332;&#26085;&#12398;&#22240;&#23376;&#21270;
AccessData[, 1] <- factor(AccessData[, 1], levels = WeekDayAnaData[, 1])

#&#26332;&#26085;&#12398;&#20006;&#12403;&#26367;&#12360;
AccessData <- AccessData[order(AccessData[, 1]), ]

###&#12487;&#12540;&#12479;&#12398;&#25972;&#24418;#####
#wide&#12395;&#22793;&#25563;
PlotData <- reshape(AccessData,
                       timevar = "dayOfWeekName",
                       idvar = "hour",
                       direction = "wide")

#rowname&#12398;&#20462;&#27491;
rownames(PlotData) <- PlotData[, 1]
PlotData <- PlotData[, -1]

#colname&#12398;&#20462;&#27491;
colnames(PlotData) <- WeekDayAnaData[, 1]
########

#&#12487;&#12540;&#12479;&#12398;&#12503;&#12525;&#12483;&#12488;
pheatmap(PlotData,
         color = colorRampPalette(c("royalblue", "white", "firebrick3"))(100),
         cluster_row = FALSE,
         cluster_col = FALSE,
         display_numbers = TRUE,
         number_format = "%1.0f",
         number_color = "black")

#&#12501;&#12449;&#12452;&#12523;&#12398;&#20986;&#21147;,filetype&#12399;png, pdf, tiff, bmp, jpeg&#12364;&#23550;&#24540;,&#12501;&#12449;&#12452;&#12523;&#21517;&#12398;&#25313;&#24373;&#23376;&#12434;&#22793;&#26356;&#12375;&#12414;&#12377;&#12290;
pheatmap(PlotData,
         color = colorRampPalette(c("royalblue", "white", "firebrick3"))(100),
         cluster_row = FALSE,
         cluster_col = FALSE,
         display_numbers = TRUE,
         number_format = "%1.0f",
         number_color = "black",
         filename = "HeatMap.png")

出力例

HeatMap

少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました