廿TT

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

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

はじめに

Google アナリティクスの iOS 向け公式アプリでは下図のようなヒートマップ(色付きテーブル)を見ることができる。

f:id:abrahamcow:20150411034708p:plain

きれいな図だがセグメント(層別)がしづらい。

例えば、ソーシャル経由でサイトに訪問する場合とその他ではアクセスが集中しやすい時間帯が違うのではないか。

そういうことを思いついたら、この図を層別に描いてみたくなる。

ソーシャル経由で訪問が集中しやすい時間帯がわかったら、そのときを狙ってツイッター等で記事を告知することで、さらなる集客がねらえるかもしれない。

R + Google アナリティクスによる実践

RGoogleAnalytics ではセグメントを自由に切れる。

やってみる。

f:id:abrahamcow:20150411161539p:plain

上図をみる限りでは、自然検索トラフィックは平日のデイタイムの訪問(セッション)が多い。

仕事中の調べものなんかに、検索エンジンを使っているのかもしれない。

一方、ソーシャル経由のトラフィックは9時台の比較的早い時間帯と夜12時ごろのセッションが多いようだ。

みなさん通勤時間とか、寝る前とかに SNS をながめることが多いのかもしれない。

この図の書き方を以下に示す。

R のコード

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

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

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

query$Init(start.date = "2015-02-15",
           end.date = "2015-02-21",
           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)
#以上でデータ抽出は完了

###下処理###
dat1$date <-paste(
  substr(dat1$date,1,4),
  substr(dat1$date,5,6),
  substr(dat1$date,7,8),
  sep="/")
#年月日の間に / を入れている

dat1$hour <- factor(dat1$hour)
dat1$hour <- factor(dat1$hour, levels=rev(levels(dat1$hour)))
# 00が一番上にくるよう並べ替え


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

###プロット###
library(ggplot2)
theme_set(theme_bw(12,"HiraKakuPro-W3"))
p1 <- ggplot(data=scl, aes(x=date,hour))
p1 <-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="ソーシャル")

p2 <- ggplot(data=org, aes(x=date,hour))
p2 <-p2 + geom_tile(aes(fill=sessions)) +
  scale_fill_gradient(low = "white", high = "cornflowerblue") +
  geom_text(aes(fill = sessions, label = sessions)) + 
  labs(x="日付(日〜土曜日)", y="時間帯",fill="セッション", title="自然検索")

#図をふたつ並べる
library(grid)
grid.newpage()
pushViewport(viewport(layout = grid.layout(1, 2)))
print(p1,  vp=viewport(layout.pos.row = 1, layout.pos.col = 1))
print(p2,  vp=viewport(layout.pos.row = 1, layout.pos.col = 2))

応用例

今回はチャネルごとで層別にしたが、他のセグメントでも同じような図が描ける。

クエリの "dimensions" の "ga:channelGrouping" のところを "ga:userGender" に変えてやれば男女でアクセスする時間帯に差があるかを調べられるし、"ga:deviceCategory" に変えてやればパソコンとスマホの使い分け状況を推察できる。

R から API で Google アナリティクスのデータを読むこめるパッケージ, RGoogleAnalytics のクエリ作成方法 - 廿TT 等を参照していろいろ試して頂ければ幸い。

参考にしたページ

Changing the order of levels of a factor

関連エントリ

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