Rでコマンド:Google Analyticsデータをヒートマップでプロットするコマンドの紹介

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

「ComplexHeatmap」、「RGA」、「scales」パッケージを利用してGoogle Analyticsのデータをプロットするコマンドの紹介です。実行コマンドはGoogle Analyticsで取得できる「特定年月の、時間と曜日別のセッション」をプロットする内容です。

なお、コマンドを実行するにはGoogle Analyticsの設定が必要です。Google Analyticsの設定は他サイトを参照ください。

各パッケージの紹介記事です。

・Rでウェブ解析:Google Analyticsからデータを取得「RGA」パッケージの紹介
 https://www.karada-good.net/analyticsr/r-141/

・Rで解析:理想のヒートマップ作成に役に立ちます「ComplexHeatmap」パッケージ
 https://www.karada-good.net/analyticsr/r-437/

・Rで解析:カラーパレット作成や連続・離散スケールの操作が簡単「scales」パッケージの紹介
 https://www.karada-good.net/analyticsr/r-109/

実行コマンドはwindows 7およびOS X 10.11.2のR version 3.2.3で確認しています。

スポンサーリンク

実行コマンド

詳細はコメント、コマンドのヘルプを確認してください。

#パッケージのインストール
install.packages("devtools")
devtools::install_github("jokergoo/ComplexHeatmap")
install.packages("RGA")

#パッケージの読み込み
library("ComplexHeatmap")
library("RGA")
library("scales")

###GoogleAnalyticsと連携#####
authorize()
#####

###データを読み込みidを確認#####
list_profiles()
########

#データ取得idの設定
#数値はダミーです
IDSet <- "ga:99999999"
########

###&#21462;&#24471;&#24180;,&#26376;&#12434;&#35373;&#23450;#####
year <- 2020 #&#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
########

###&#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;/&#26178;&#38291;&#21029;&#12398;&#12475;&#12483;&#12471;&#12519;&#12531;&#25968;&#12434;&#21462;&#24471;#####
GetData <- get_ga(profileId = IDSet, start.date = StartDate, end.date = EndDate,
                  metrics = "ga:sessions",
                  dimensions = "ga:dayOfWeekName, ga:hour")
######

###&#21462;&#24471;&#12487;&#12540;&#12479;&#12398;&#25972;&#24418;#####
#&#26332;&#26085;&#12398;&#22240;&#23376;&#21270;
GetData[, 1] <- factor(GetData[, 1], levels = WeekDayAnaData[, 1])
#&#26332;&#26085;&#12391;&#20006;&#12403;&#26367;&#12360;
GetData <- GetData[order(GetData[, 1]), ]
#&#26332;&#26085;&#21517;&#12434;&#22522;&#28310;&#12395;&#26178;&#38291;&#21029;&#12475;&#12483;&#12471;&#12519;&#12531;&#25968;&#12434;&#35336;&#31639;
HeatMapData <- reshape(GetData, idvar = "hour", timevar = "dayOfWeekName", direction = "wide")
#&#26178;&#38291;&#12434;row.names&#12395;&#20184;&#19982;
row.names(HeatMapData) <- HeatMapData[, 1]
#&#26178;&#38291;&#12434;&#21066;&#38500;
HeatMapData <- HeatMapData[, -1]
#colnames&#12434;&#22793;&#26356;
colnames(HeatMapData) <- WeekDayAnaData[, 1]
########

###&#12498;&#12540;&#12488;&#12510;&#12483;&#12503;&#20307;&#35009;&#12487;&#12540;&#12479;&#12398;&#20316;&#25104;#####
#&#26332;&#26085;&#27598;&#12398;&#12498;&#12473;&#12488;&#12464;&#12521;&#12512;&#12434;&#20316;&#25104;
DaySession <- HeatmapAnnotation(textplot = anno_text(colSums(HeatMapData),
                                                     gp = gpar(col = "blue")),
                                barplot = anno_barplot(colSums(HeatMapData),
                                                       axis = FALSE,
                                                       axis_side = "left",
                                                       ylim = c(0, max(colSums(HeatMapData))*1.2),
                                                       gp = gpar(fill = as.character(cscale(colSums(HeatMapData),
                                                                                            seq_gradient_pal("white", "red"))))
                                ),
                                annotation_height = c(0.5, 2)
)
#&#26178;&#38291;&#27598;&#12398;&#12498;&#12473;&#12488;&#12464;&#12521;&#12512;&#12434;&#20316;&#25104;
HourSession <- rowAnnotation(rbarplot = row_anno_barplot(rowSums(HeatMapData),
                                                         axis = FALSE,
                                                         axis_side = "top",
                                                         ylim = c(0, max(rowSums(HeatMapData))*1.2),
                                                         gp = gpar(fill = as.character(cscale(rowSums(HeatMapData),
                                                                                              seq_gradient_pal("white", "red"))))),
                             rtextplot = row_anno_text(rowSums(HeatMapData),
                                                       gp = gpar(col = "blue")),
                             width = unit(3, "cm"))
########

###&#12498;&#12540;&#12488;&#12510;&#12483;&#12503;&#25551;&#20889;#####
Heatmap(HeatMapData, cluster_rows = FALSE, cluster_columns = FALSE,
        top_annotation = DaySession,
        top_annotation_height = unit(3, "cm"),
        row_names_side = "left",
        row_title = "Hour",
        #column_title = paste0("GoogleAnalytics:", month, "&#26376;&#12398;&#26178;&#38291;/&#26332;&#26085;&#21029;&#12475;&#12483;&#12471;&#12519;&#12531;&#25968;"),
        column_title_side = "bottom",
        name = "Session",
        #col = cscale(c(t(HeatMapData)), seq_gradient_pal("yellow", "blue")))
) +
  HourSession
decorate_annotation("barplot", {grid.text("Day Sessions", unit(-2, "mm"),
                                          just = "bottom", rot = 90, gp = gpar(fontsize = 10))})

出力結果

寝る時間はみんな一緒です。

RGAHeatmap

少しでも、あなたのウェブや実験の解析が楽になりますように!!

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