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


「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"
########

###取得年,月を設定#####
year <- 2020 #取得したい年を設定
month <- 7 #取得したい月を設定
########

###取得年,月のベクトルを作成#####
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
########

###曜日の並び順はここで設定#####
WeekDayAnaData <- data.frame(c("Sunday", "Monday", "Tuesday", "Wednesday",
                               "Thursday", "Friday", "Saturday"))
########

###曜日/時間別のセッション数を取得#####
GetData <- get_ga(profileId = IDSet, start.date = StartDate, end.date = EndDate,
                  metrics = "ga:sessions",
                  dimensions = "ga:dayOfWeekName, ga:hour")
######

###取得データの整形#####
#曜日の因子化
GetData[, 1] <- factor(GetData[, 1], levels = WeekDayAnaData[, 1])
#曜日で並び替え
GetData <- GetData[order(GetData[, 1]), ]
#曜日名を基準に時間別セッション数を計算
HeatMapData <- reshape(GetData, idvar = "hour", timevar = "dayOfWeekName", direction = "wide")
#時間をrow.namesに付与
row.names(HeatMapData) <- HeatMapData[, 1]
#時間を削除
HeatMapData <- HeatMapData[, -1]
#colnamesを変更
colnames(HeatMapData) <- WeekDayAnaData[, 1]
########

###ヒートマップ体裁データの作成#####
#曜日毎のヒストグラムを作成
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)
)
#時間毎のヒストグラムを作成
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"))
########

###ヒートマップ描写#####
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, "月の時間/曜日別セッション数"),
        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))})
#RStudioで実行するとうまく表示されないのでコメントアウトです
#decorate_annotation("rtextplot", {grid.text("Hour Sessions", x = unit(0, "mm"), y = unit(122, "mm"),
#                                            just = "bottom", rot = 0, gp = gpar(fontsize = 10))})
########

出力結果

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

RGAHeatmap


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

スポンサードリンク

おすすめコンテンツ


スポンサードリンク