読者です 読者をやめる 読者になる 読者になる

廿TT

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

RGoogleAnalytics で変化の要因を読みとく(変化率と寄与度のグラフ)

変化率と寄与度

下の図は当ブログのセッション(訪問数)の月次推移です。
f:id:abrahamcow:20140925094557p:plain

GDP をみるときなどは GDP そのものでなく、GDP の成長率に注目したりします。

アクセス解析の分野でも、目標を立てて指標を定期的にするときなどには変化率(増加率、成長率)に着目することがあるでしょう。

そのとき、各成分が成長に及ぼした影響を調べるためには、寄与度と呼ばれる指標を使います。

寄与度は

  • A の寄与度 = A の変化率 × A の構成比
  • B の寄与度 = B の変化率 × B の構成比
  • ……以下同様

と定義されます。

  • 全体の変化率 = 各成分の寄与度の合計

です。

下図はセッションの変化率を折れ線グラフで、流入経路(チャネル)の寄与度を積み上げ棒グラフで示したものです。
f:id:abrahamcow:20140925110036p:plain

このような図をかくと、

  • 2014年1月の急増は、ソーシャル経由の訪問の寄与が特に大きいことがわかります。
  • 2月の減少は1月に増加した反動でしょう。
  • 気になるのは、2014年8月のマイナス成長です。これまで安定して成長してきたオーガニック(自然検索)が減少に転じています。季節性のものかもしれませんが、そろそろブログのエントリが伸び悩みの時期に来ているのかもしれません。

……とこんな具合のプレゼンテーションが行えます。

RGoogleAnalytics でデータ取得、ggplot2 でプロット

はじめに API でデータを取得します。

library("RGoogleAnalytics")
query <- QueryBuilder()
access_token <- query$authorize()

ここでアクセストークンをコピペ。

RGoogleAnalytics をいじっている - 廿TT を参照。)

sta ="2013-08-01"
en ="2014-08-31"

ga <- RGoogleAnalytics()
ga.profiles <- ga$GetProfileData(access_token)

query$Init(start.date = sta,
           end.date = en,
           dimensions = "ga:yearMonth,ga:channelGrouping",  
           metrics = "ga:visits",
           table.id = paste("ga:",ga.profiles$id[1],sep="",collapse=","),
           access_token=access_token)
cg<- ga$GetReportData(query)

t1 <-seq.Date(as.Date(sta),as.Date(en),by="1 month")

#成長率
grow <- function(x){diff(x)/x[-length(x)]}

#寄与度
cont <- function(a,all){
  grow(a) * (a/all)[-length(a)]
}

tmp <-acast(cg, yearMonth~channelGrouping)

cg2 <-ifelse(is.na(tmp),0,tmp)

#dim1 <-dim(cg2)

ss=apply(cg2,1,sum) #全チャネルの合計

growth <-  data.frame(date =t1[-1],value =grow(ss))

cont1 <-apply(cg2,2,function(a)cont(a=a,all=ss))
cont1 <- ifelse(is.nan(cont1),0,cont1)

library(reshape2)
df1 <-melt(data.frame(date=t1[-1],cont1),"date", variable.name="channel")

#head(df1)
sub1 <-subset(df1,value>0)
sub2 <-subset(df1,value<=0)

library(ggplot2)
library(scales)

#変化率と寄与度のグラフ
theme_set(theme_bw(20)) #背景は白に固定。文字は大きめに。
ggplot() + 
  geom_bar(data = sub1, aes(x=date, y=value, fill=channel),stat = "identity") +
  geom_bar(data = sub2, aes(x=date, y=value, fill=channel),stat = "identity") +
  geom_line(data =growth, aes(x=date, y=value), size=1, colour="grey40")+
  scale_x_date(labels = date_format("20%y/%m"))+
  labs(x="",y="") +
  scale_y_continuous(labels = percent)  #y軸を%表示に
#  theme(legend.position="bottom")

#折れ線グラフ
ggplot() +
  geom_line(data =data.frame(date=t1,visits= ss), aes(x=date, y=visits), size=1, colour="grey40")+
  scale_x_date(labels = date_format("20%y/%m")) +
  scale_y_continuous(labels = comma)

ここではディメンションを "ga:channelGrouping"(デフォルトチャネルグループ)、指標を "ga:visits" (セッション)にしましたが、目的に合わせていろいろ変えてみても、上のコードはほぼそのまま使い回せるはずです。

Google アナリティクス API のディメンション、指標は下記を参照してください。
Dimensions & Metrics Reference - Google Analytics — Google Developers

参考文献

reshape2 — 柔軟なデータ変形ツール — Watallica metallicus

r - ggplot2 and a Stacked Bar Chart with Negative Values - Stack Overflow

統計グラフのウラ・オモテ―初歩から学ぶ、グラフの「読み書き」 (ブルーバックス)

統計グラフのウラ・オモテ―初歩から学ぶ、グラフの「読み書き」 (ブルーバックス)

Rによる時系列分析入門

Rによる時系列分析入門

関連エントリ


RGoogleAnalytics で変化の要因を読みとく(変化量と寄与率のグラフ+散布図) - 廿TT


RGoogleAnalytics で変化の要因を読みとく(折れ線グラフ、帯グラフ、積み上げ棒グラフ) - 廿TT