廿TT

譬如水怙牛過窓櫺 頭角四蹄都過了 因甚麼尾巴過不得

(R+Google アナリティクス)曜日・時間帯別セッション数のヒートマップ

(R+Google アナリティクス)日付・時間帯別セッション数のヒートマップ - 廿TT の続きです。

(R+Google アナリティクス)日付・時間帯別セッション数のヒートマップ - 廿TT では日付・時間帯別でしたが、今回は曜日・時間帯別のヒートマップ(色付きテーブル)を作ります。

R では weekdays 関数を使うと日付の曜日を取得できます。

また、tapply の第二引数に list を与えてやると、かんたんに複数の因子ごとで集計ができます。

出来上がりはこんな感じです。

f:id:abrahamcow:20150412082941p:plain

f:id:abrahamcow:20150412082115p:plain

やはり自然検索トラフィックは平日の日中、ソーシャル経由のトラフィックは9時台の比較的早い時間帯と夜12時ごろや土日のセッションが多いようです。

以下に R のコードを記載します。

#まずはデータの取得
#アカウントのオーサライズ
library("RGoogleAnalytics")
query <- QueryBuilder()
access_token <- query$authorize()

ここでアクセストークンをコピペ。
(詳しくは RGoogleAnalytics をいじっている - 廿TT を参照。)

###データ抽出時のクエリ###
ga <- RGoogleAnalytics()
ga.profiles <- ga$GetProfileData(access_token)

sta = "2015-02-01"
en = "2015-02-28"

query$Init(start.date = sta,
           end.date = en,
           dimensions = "ga:date,ga:hour,ga:channelGrouping",
           metrics = "ga:sessions",
           sort = "ga:date",
           #filters=””,
           #segment=””,
           max.results = 10000,
           table.id = paste("ga:",ga.profiles$id[1],sep="",collapse=","),
           access_token=access_token)
dat1 <- ga$GetReportData(query)
#データ抽出は完了

Date <-as.Date(paste(
  substr(dat1$date,1,4),
  substr(dat1$date,5,6),
  substr(dat1$date,7,8),
  sep="/")) #日付オブジェクトに変えてる

day <- weekdays(Date)
dat1$day <- day

scl <- subset(dat1,channelGrouping=="Social")
org <- subset(dat1,channelGrouping=="Organic Search")

library(tidyr)
#集計用の使い捨て関数
agg <- function(scl){

  tmp <- tapply(scl$sessions,list(scl$hour,scl$day),sum)
  #hour × day ごとに足し算
  tmp <- as.data.frame(tmp)
  tmp$hour <-rownames(tmp)
  
  scl2 <-gather(tmp, day, sessions, -hour)
  scl2[is.na(scl2)] <- 0 #NA を 0 とおいてる
  
  scl2$day <- factor(scl2$day,
                     levels=c("月曜日","火曜日","水曜日","木曜日","金曜日","土曜日","日曜日"))
  #月火水木金土日の順に並ぶように設定
  
  scl2$hour <- factor(scl2$hour)
  scl2$hour <- factor(scl2$hour, levels=rev(levels(scl2$hour)))
  # 00が一番上にくるよう並べ替え
  scl2
}


scl2 <- agg(scl)
org2 <- agg(org)

###プロット###
library(ggplot2)

theme_set(theme_bw(15,"HiraKakuPro-W3"))

p1 <- ggplot(data=scl2, aes(x=day,y=hour))
p1 + geom_tile(aes(fill=sessions)) +
  scale_fill_gradient(low = "white", high = "cornflowerblue") +
  geom_text(aes(fill = sessions, label = sessions)) + 
  labs(x="", y="時間帯",fill="セッション", title="ソーシャル(2月)")

p2 <- ggplot(data=org2, aes(x=day,y=hour)) 
p2 + geom_tile(aes(fill=sessions)) +
  scale_fill_gradient(low = "white", high = "darkseagreen") +
  geom_text(aes(fill = sessions, label = sessions)) + 
  labs(x="", y="時間帯",fill="セッション", title="自然検索(2月)")

参考文献は下記の通りです。