廿TT

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

(R + Google アナリティクス)コーホート比較でユーザーの定着具合を測る

バズやキャンペーンの効果を測る

f:id:abrahamcow:20150512224407p:plain

過去何回か記事がバズったことがある。

このブログはごく個人的なものだが、仮にメディアを運営しているつもりになって考えるとすると、バズをきっかけにユーザーが定着してくれることが望ましい。

そこでユーザーの再訪傾向を調べてみる。

Google アナリティクスのAPIでは、

segment = "users::condition::dateOfSession<>2015-01-03_2015-01-03;ga:sessionCount==1;sessions::condition::ga:landingPagePath=@/entry/2015/01/03/105115"

とすると、「2015-01-03 に初回訪問して、/entry/2015/01/03/105115 にランディングした」という条件に一致するユーザーのデータがとれる。

詳しくは、Core Reporting API - Segments  |  Analytics Core Reporting API  |  Google Developers を参照。

データ抽出

まずは R にデータを読み込む。

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

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

データ抽出時のクエリはこんな感じ。
セグメントのかけ方がポイント。

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

sta ="2015-01-03"
en = as.character(as.Date(sta) +89)
#ユーザーレベルのセグメントを使用する場合、期間が90日を超えるとエラーになる

query$Init(start.date = sta,
           end.date = en,
           dimensions = "ga:date", 
           metrics = "ga:users,ga:sessions,ga:pageviews",
           table.id = paste("ga:",ga.profiles$id[1],sep="",collapse=","),
           max.result=10000,
           segment = "users::condition::dateOfSession<>2015-01-03_2015-01-03;ga:sessionCount==1;sessions::condition::ga:landingPagePath=@/entry/2015/01/03/105115", 
           access_token=access_token)

dat_20150103<- ga$GetReportData(query)

sta ="2014-01-06"
en = as.character(as.Date(sta) +89)

query$Init(start.date = sta,
           end.date = en,
           dimensions = "ga:date", 
           metrics = "ga:users,ga:sessions,ga:pageviews",
           table.id = paste("ga:",ga.profiles$id[1],sep="",collapse=","),
           max.result=10000,
           segment = "users::condition::dateOfSession<>2014-01-06_2014-01-06;ga:sessionCount==1;sessions::condition::ga:landingPagePath=@/entry/2014/01/05/081748", 
           access_token=access_token)

dat_20140106<- ga$GetReportData(query)

プロット

として経過日数ごとユーザー数を折れ線グラフにする。

df1 <- data.frame(
  elapsed = rep(1:89,2),
  day =c(rep("A",89),rep("B",89)),
  UU =c(dat_20150103$users[-1],
        dat_20140106$users[-1])
)

library(ggplot2)
theme_set(theme_bw(15,"HiraKakuPro-W3"))
ggplot(df1,aes(x=elapsed,y=UU,colour=day)) +
  geom_line(size=1) +
  labs(x="経過日数",y="再訪ユーザー数",colour="記事")

f:id:abrahamcow:20150512235444p:plain

最初は記事 A のほうが多くのユーザー数を集めるのに貢献していたが、再訪傾向は記事 B のほうが強いことが分かる。

傾向が見やすいように移動平均をとってみる。

library(latticeExtra)
df2 <- data.frame(
  elapsed = rep(1:89,2),
  day =c(rep("A",89),rep("B",89)),
  UU =c(simpleSmoothTs(dat_20150103$users[-1],width=7),
        simpleSmoothTs(dat_20140106$users[-1],width=7))
)

ggplot(df2,aes(x=elapsed,y=UU,colour=day)) +
  geom_line(size=1) +
  labs(x="経過日数",y="再訪ユーザー数(7日移動平均)",colour="記事")

f:id:abrahamcow:20150512235822p:plain

こんな感じだ。