「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))})
出力結果
寝る時間はみんな一緒です。

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