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

廿TT

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

googleAnalyticsR の使い方(Version:0.1.0)

V4 API の概要

Google Analytics Core Reporting API V4 では以下のような機能が追加されました。

  1. データの範囲を 2 つ指定できるようになった。
  2. 指標を四則演算して新たな指標を作り出すことができるようになった。
  3. コホートレポートが扱えるようになった。
  4. 一回のリクエストで複数セグメントを指定できるようになった。

Overview  |  Analytics Reporting API V4  |  Google Developers

この V4 API に対応した R パッケージとして googleAnalyticsR が CRAN にアップされました。

オーサライ

library(googleAnalyticsR)
ga_auth()

と入力するとブラウザが立ち上がるので、API の使用を許可してください。

以上でオーサライズは完了です。

google_analytics_account_list でアカウントのリストを取得できます。

ここから対象となるアカウントの view ID を変数に代入しておくと便利です。

account_list <- google_analytics_account_list()
ga_id <- account_list[2,'viewId']

複数期間の指定

例えば前年同期比の成長率を求めたいときなど、複数期間を指定することができます。

multidate_test <- make_ga_4_req(ga_id, 
                                date_range = c("2015-04-01", #start1
                                               "2015-04-30", #end1
                                               "2016-04-01", #start2
                                               "2016-04-30"), #end2
                                dimensions = 'channelGrouping',
                                metrics = 'sessions')

ga_data1 <- fetch_google_analytics_4(multidate_test)

データは以下のように格納されます。

> ga_data1
  channelGrouping sessions.d1 sessions.d2
1          Direct         340        1159
2  Organic Search        5596       10304
3        Referral         374         401
4          Social         120         219

プロットしてみます。

f:id:abrahamcow:20160522114825p:plain

フィルタのかけ方

引数 filtersExpression に直接与えることができます。

セッション数が100以上のランディングページをリストアップしてみます。

ga_data2 <- google_analytics_4(ga_id, 
                               date_range = c("2016-04-01","2016-04-30"),
                               dimensions='landingPagePath', 
                               metrics = 'sessions', 
                               filtersExpression = "ga:sessions>=100")
> head(ga_data2)
           landingPagePath sessions
1 /entry/2013/08/03/160222      211
2 /entry/2014/01/25/232720      478
3 /entry/2014/03/05/001432      818
4 /entry/2014/03/23/064859      277
5 /entry/2014/05/07/024305      112
6 /entry/2014/08/13/031519      297

プロット。

ggplot(ga_data2)+
  geom_bar(aes(x=reorder(landingPagePath,sessions),y=sessions),stat="identity")+
  coord_flip()

f:id:abrahamcow:20160522115155p:plain

googleAnalyticsR ではフィルタを複数組み合わせることができます。

日本からの、自然検索経由のセッションの、セッション数が100以上のランディングページを出したければ以下のようにします。

df1 <- dim_filter("medium", "EXACT", "organic")
df2 <- dim_filter("country", "EXACT", "Japan")
df <-filter_clause_ga4(list(df1,df2),"AND")
ga_data3 <- google_analytics_4(ga_id, 
                               date_range = c("2016-04-01","2016-04-30"),
                               dimensions='landingPagePath', 
                               metrics = 'sessions', 
                               dim_filters = df,
                               filtersExpression = "ga:sessions>=100")
> head(ga_data3)
           landingPagePath sessions
1 /entry/2014/01/25/232720      432
2 /entry/2014/03/05/001432      721
3 /entry/2014/03/23/064859      254
4 /entry/2014/05/07/024305      103
5 /entry/2014/08/13/031519      277
6 /entry/2014/09/11/024924      110
ggplot(ga_data3)+
  geom_bar(aes(x=reorder(landingPagePath,sessions),y=sessions),stat="identity")+
  coord_flip()

f:id:abrahamcow:20160522124008p:plain

計算指標

指標どうしを四則演算して新たな指標を作ることができます。

しかし R から呼ぶ場合にこれができて嬉しいかというとそうでもないかもしれません、計算は R でできるので。

ここでは、セッション数から直帰数を引いて、unbounces(回遊数)という指標をつくってみます。

ga_data4 <- google_analytics_4(ga_id,
                               date_range = c("2016-04-01",
                                              "2016-04-30"),
                               dimensions='landingPagePath', 
                               metrics = c(unbounces = "ga:sessions-ga:bounces",
                                           'bounces',"sessions"), 
                               metricFormat = c("INTEGER","INTEGER","INTEGER"),
                               dim_filters = df,
                               filtersExpression = "ga:sessions>=100")
> head(ga_data4)
           landingPagePath unbounces bounces sessions
1 /entry/2014/01/25/232720        33     399      432
2 /entry/2014/03/05/001432        72     649      721
3 /entry/2014/03/23/064859        38     216      254
4 /entry/2014/05/07/024305        20      83      103
5 /entry/2014/08/13/031519        21     256      277
6 /entry/2014/09/11/024924         9     101      110
library(tidyr)
ga_data4_g <-gather(ga_data4,key,value,-c(landingPagePath,sessions))
ggplot(ga_data4_g)+
  geom_bar(aes(x=reorder(landingPagePath,sessions),y=value,fill=key),stat = "identity")+
  coord_flip()

f:id:abrahamcow:20160522120057p:plain

コホート

コホート関連のレポートを扱うときは、date_range を指定しません。

最長で 90日後までユーザーのセッションを追えます。

cohort1 <- make_cohort_group(list("cohort 1" = c("2016-02-01","2016-02-01"), 
                                  "cohort 2" = c("2015-02-01","2015-02-01")))
cohort_data <- google_analytics_4(ga_id, 
                                     dimensions=c('cohort','cohortNthDay'), 
                                     cohort = cohort1, 
                                     metrics = c('cohortActiveUsers','cohortTotalUsers'))
> head(cohort_data)
    cohort cohortNthDay cohortActiveUsers cohortTotalUsers
1 cohort 1         0001                 0                0
2 cohort 1         0002                 0                0
3 cohort 1         0003                 2              239
4 cohort 1         0004                 0                0
5 cohort 1         0005                 0                0
6 cohort 1         0006                 1              239

cohortTotalUsers は指定した日に獲得した新規ユーザーの総数です。

cohortActiveUsers が 0 の日は cohortTotalUsers にも 0 が入るようです。

なぜか cohort 2 の方にだけ、cohortNthDay が 0000 のデータが入っているので取り除いたほうが扱いやすいと思います。

library(dplyr)
cohort_data2 <-cohort_data %>% filter(cohortNthDay!="0000")%>%
  group_by(cohort) %>%
  mutate(cusumUsers=cumsum(cohortActiveUsers),
         cohortNthDay=as.numeric(cohortNthDay))

library(ggplot2)
ggplot(cohort_data2)+
  geom_step(aes(x=cohortNthDay,y=cusumUsers,colour=cohort))

f:id:abrahamcow:20160522120907p:plain

複数セグメントの指定

セグメントのかけ方はちょっと複雑です。

「/entry/2014/12/19/221230 にランディングした」というセグメントと、「/entry/2014/12/19/221230」にランディングしたというセグメントを同時にかけてみます。

lp1 <- segment_element("landingPagePath", 
                       operator = "BEGINS_WITH", 
                       type = "dimension", 
                       expressions = "/entry/2015/01/15/073029")

lp2 <- segment_element("landingPagePath", 
                       operator = "BEGINS_WITH", 
                       type = "dimension", 
                       expressions = "/entry/2014/12/19/221230")

sv_lp1 <- segment_vector_simple(list(list(lp1)))
sv_lp2 <- segment_vector_simple(list(list(lp2)))

seg_def1 <- segment_define(list(sv_lp1))
seg_def2 <- segment_define(list(sv_lp2))

segment1 <- segment_ga4("LP1", user_segment = seg_def1)
segment2 <- segment_ga4("LP2", user_segment = seg_def2)

segment_example <- google_analytics_4(ga_id, 
                                      c("2016-04-01","2016-04-30"), 
                                      dimensions=c('segment','date','landingPagePath'), 
                                      segments = c(segment1,segment2),
                                      metrics = c('sessions')
)

いくつかゴミのように、他のページヘランディングしたデータも含まれてしまっています。

> head(segment_example)
  segment       date          landingPagePath sessions
1     LP1 2016-04-01 /entry/2015/01/15/073029       36
2     LP1 2016-04-02 /entry/2014/11/06/060634        1
3     LP1 2016-04-02 /entry/2015/01/15/073029       46
4     LP1 2016-04-03                   /about        1
5     LP1 2016-04-03 /entry/2015/01/15/073029       60
6     LP1 2016-04-04                (not set)        1

取り除いてプロットしてみます。

segment_example2 <- filter(segment_example,
       landingPagePath %in% c("/entry/2015/01/15/073029","/entry/2014/12/19/221230"))
ggplot(segment_example2)+
  geom_line(aes(x=as.Date(date),y=sessions,colour= landingPagePath))

f:id:abrahamcow:20160522121443p:plain

ピボット

ふつうは行持ちのデータを列持ちにすることができます。

tidyr を使えばいいかな、という気がします。

pivme <- pivot_ga4("medium",
                   metrics = c("sessions"), 
                   maxGroupCount = 4)

pivtest1 <- google_analytics_4(ga_id, 
                               c("2016-01-30","2016-05-01"), 
                               dimensions=c('source'), 
                               metrics = c('sessions'), 
                               pivots = list(pivme))
> head(pivtest1)
               source sessions medium..none..sessions medium.referral.sessions medium.twitter.sessions
1              (null)        1                      0                        1                       0
2    10.10.1.33:21128        1                      0                        1                       0
3   10.128.8.162:6080        2                      0                        2                       0
4 10.160.84.231:15871        7                      0                        7                       0
5 10.160.84.233:15871       10                      0                       10                       0
6 10.161.84.231:15871        5                      0                        5                       0

参考文献

github.com