廿TT

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

(R + Google アナリティクス)何ページ目でセッションから離脱するか。ファンネルグラフによる可視化。

ファンネルグラフ

ユーザーの回遊傾向を見る際、Webアクセス解析の分野では直帰率が低く抑えられているかチェックすることが多いようです。

直帰率という指標は、もともとのデータを「直帰」「直帰でない」という情報に要約したものです。

実際には「直帰」、「1ページ進んだ先で離脱」、「2ページ進んだ先で離脱」、……と様々なセッションがあります。

数ページ進んだ先で、どれだけのセッションが途切れず継続しているかを見るには、ファンネルグラフが便利です。

ファンネル(funnel; 漏斗)状に段階的に数を減らしていく様子を把握できます。

縦軸が訪問時に進んだページ数、横軸が継続しているセッション数です。

f:id:abrahamcow:20150228105121p:plain

http://abrahamcow.hatenablog.com/entry/2015/02/10/201256 にランディングした場合は、2ページ目に進むケースが比較的多いようです。

裾野の部分も長めでわりと回遊傾向があることが伺えます。

一方 http://abrahamcow.hatenablog.com/entry/entry/2014/12/19/221230 などは、あまり回遊傾向はないようです。

以下にこの図の書き方を記載します。

R のコード

RGoogleAnalytics でデータ抽出

アカウントのオーサライ
library("RGoogleAnalytics")
query <- QueryBuilder()
access_token <- query$authorize()

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

詳しくは RGoogleAnalytics をいじっている - 廿TT を参照。

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

query$Init(start.date = "2015-02-01",
           end.date = "2015-02-27",
           dimensions = "ga:landingPagePath,ga:pageDepth",
           metrics = "ga:sessions",
           sort = "-ga:sessions",
           #filters="",
           #segment=""
           #max.results =,
           table.id = paste("ga:",ga.profiles$id[1],sep="",collapse=","),
           access_token=access_token)

LPPD <- ga$GetReportData(query) #データ取得完了

データ抽出時のクエリについては必要に応じて
R から API で Google アナリティクスのデータを読むこめるパッケージ, RGoogleAnalytics のクエリ作成方法 - 廿TT
を参照してください。

データ下処理と集計とプロット

LPPD$pageDepth <- as.numeric(LPPD$pageDepth)

#集計用の関数を定義
aggfunnel <- function(data,group){
  sub1 <-data[data[,1] ==group,]
  sub1 <-sub1[order(sub1$pageDepth),]
  m1 <-max(sub1$pageDepth)
  step <-1:m1
  risk <- numeric(m1)
  cs <-rev(cumsum(rev(sub1[,3])))
  for(i in step){
    flg <- sub1$pageDepth == i  
    if(all(!flg)){
      risk[i] <- tmp
    }else{
      risk[i] <- cs[flg]
      tmp <- cs[flg]
    }
  }
  data.frame(group,step,risk)
}


#注目したいLPを入れる
out1 <-aggfunnel(LPPD,"/entry/2015/02/10/201256")
out2 <-aggfunnel(LPPD,"/entry/2014/08/13/031519")
out3 <-aggfunnel(LPPD,"/entry/2014/01/25/232720")
out4 <-aggfunnel(LPPD,"/entry/2014/12/19/221230")
out <- rbind(out1,out2,out3,out4)

###プロット
library(ggplot2)
theme_set(theme_grey(15,"HiraKakuPro-W3"))
ggplot(out,aes(x=step,y=risk))+
  facet_wrap(~LPpath)+
  geom_bar(stat="identity",width=1) +
  labs(x="訪問時のページ数",y="セッション数") +
  coord_flip()+
  scale_x_reverse()

例2:期間比較

f:id:abrahamcow:20150228200522p:plain

#クエリ
query$Init(start.date = "2014-12-01",
           end.date = "2015-02-27",
           dimensions = "ga:yearMonth,ga:pageDepth",
           metrics = "ga:sessions",
           sort = "-ga:sessions",
           #filters="",
           #segment=""
           #max.results =,
           table.id = paste("ga:",ga.profiles$id[1],sep="",collapse=","),
           access_token=access_token)

ymPD <- ga$GetReportData(query)#データ取得完了

ymPD$pageDepth <- as.numeric(ymPD$pageDepth)

ymPD$yearMonth <- paste(substring(ymPD$yearMonth, 1, 4),"/",
      substring(ymPD$yearMonth, 5, 6),sep="")

out1 <-aggfunnel(ymPD,"2014/12")
out2 <-aggfunnel(ymPD,"2015/01")
out3 <-aggfunnel(ymPD,"2015/02")
out <- rbind(out1,out2,out3)

#プロット
ggplot(out,aes(x=step,y=risk))+
  facet_wrap(~group)+
  geom_bar(stat="identity",width=1) +
  labs(x="訪問時のページ数",y="セッション数") +
  coord_flip()+
  scale_x_reverse()

参考文献

エンジニアのための データ可視化[実践]入門 ~D3.jsによるWebの可視化 (Software Design plus)

エンジニアのための データ可視化[実践]入門 ~D3.jsによるWebの可視化 (Software Design plus)