廿TT

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

(R + Google アナリティクス)スパークラインからはじめる探索的アクセス解析

はじめに

多くのWeb解析担当者という人たちは日々なにをやっているのでしょうか。

おそらくみんな「注目すべき事象」と「その原因」を探しています。

こういうとむずかしく感じるかもしれませんが、分解していくとその作業は単純です。

「注目すべき事象」と「その原因」というのは言い換えると「変化」と「その内訳」です。

もっというと「データを時系列でみる」→「データを層別でみる」これだけです。

スパークライン

ではデータを時系列でみてみましょう。このブログは特定の商品を売るなどの目的がないため、メディア系サイトよりの思考になります。ご了承ください。

7月に多くのセッション(訪問)があったページはどんな様子だったでしょうか。

Google アナリティクスの管理画面からダウンロードしてエクセルで集計してもまったく構いません。しかし、似たような作業は毎月発生することが予想され、スクリプト化して省力化したいので、ぼくは R を使います。

データ抽出時のクエリはこんな感じです。

(RGoogleAnalytics について、詳しくは RGoogleAnalytics をいじっている - 廿TT を参照してください。)

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

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

ga <- RGoogleAnalytics()
ga.profiles <- ga$GetProfileData(access_token)
sta ="2015-07-01"
en ="2015-07-31"
query$Init(start.date = sta,
           end.date = en,
           dimensions = "ga:date,ga:PagePath",
           metrics = "ga:sessions",
           #           sort= ,
           max.results = 10000,
           table.id = paste("ga:",ga.profiles$id[1],sep="",collapse=","),
           access_token=access_token)
PP <- ga$GetReportData(query)

全部みるのは大変なので上位10件の傾向を眺めることにします。

集計はこんな感じです。

Cumulative <-tapply(PP$sessions, factor(PP$PagePath), sum)
#ページごとに合算

Cumulative <- sort(Cumulative,decreasing = TRUE)

top10 <- subset(PP, PagePath %in% names(Cumulative[1:10]))
#上位10ページ
top10_wide <- spread(top10,date, sessions)
top10_mat <- t(top10_wide[,-1])
colnames(top10_mat) <- top10_wide[,1]
total <-colSums(top10_mat,na.rm=TRUE)
top10_mat <-top10_mat[,order(total,decreasing=TRUE)]
#左から大きい順に並べ替え
library(YaleToolkit)
sparklines(data.frame(top10_mat),time=1:31)

YaleToolkitパッケージを使うとスパークライン(ミニ折れ線グラフ)が描けます。

f:id:abrahamcow:20150801124754p:plain

この中から特に変な動きをしている系列を探してみます。

f:id:abrahamcow:20150801125022p:plain

上から9番目のページを見ると、ほとんどずっと0に近い値なのに、一日だけぴょこっと高く飛び出しています。

9番目の系列だけプロットするにはこうやります。

plot.ts(top10_mat[,9])

f:id:abrahamcow:20150801130716p:plain

次はこの急増の内訳をみていきます。

積み上げ棒グラフ

セッション(訪問)の数に変化があったのでその内訳は、「なにを経由してサイトに来たか」をみることで明らかにできそうです。

大体の場合、すべての経路(チャネル)からの訪問が均等に増えたり減ったりすることはありません。

チャネルごとのセッションをみるためには次のようにデータを抽出します。

query$Init(start.date = sta,
           end.date = en,
           dimensions = "ga:date,ga:channelGrouping",  
           metrics = "ga:sessions",
           table.id = paste("ga:",ga.profiles$id[1],sep="",collapse=","),
           filters= paste0("ga:pagePath==",colnames(top10_mat)[9]),#9番目のページを閲覧したセッションのみ取り出す
           access_token=access_token)
CG_9 <- ga$GetReportData(query)

この手のデータ可視化はggplot2パッケージを使うと楽です。

library(ggplot2)
ggplot(CG_9,aes(x=date,y=sessions,fill=channelGrouping)) +
  geom_bar(stat="identity")

f:id:abrahamcow:20150801130142p:plain

セッションは大多数がOrganic Search(自然検索)でした。これでセッションが増えた理由が、検索経由訪問に絞られました。

自然検索のさらに内訳をみるには検索キーワードをみると良さそうです。

このくらいならGoogle アナリティクスの管理画面でちゃちゃっと確認できます。

「行動」→「すべてのページ」→「/entry/2013/11/03/022616」から「セカンダリディメンション」で「キーワード」を選びます。

f:id:abrahamcow:20150801130615p:plain

もしもし関連ワードが多いようです。

よそのデータをみる

ではなぜ「もしもし 語源」などの検索が増えたのでしょうか。

こういうときはGoogle トレンド( Google トレンド )をみたりします。

f:id:abrahamcow:20150801133827p:plain

やはり7月15日にもしもしの検索数が増えているようです。

しかし、特に目立ったニュースは見当たりません。

そこで、なにか「もしもし」が話題になっていないか、ツイッターで検索( もしもし 語源 - Twitter Search )してみたりします。

f:id:abrahamcow:20150801131846p:plain

こんなツィートがみつかりました。だいぶ拡散されています。おそらくこのツィートの真偽を確認したくて、「もしもし」で検索するユーザーが増えたのではないでしょうか。

示唆を得る

さて「変化」と「その要因」はわかりました。

しかし、セッションが増えたのはうれしい現象としても、「もしもし関連のツィートがバズったらアクセスが増える」ということがわかってもあまりうれしくありません。

風が吹けば桶屋が儲かるとしても、風が吹くのを待っているだけでは桶屋は儲かりにくいでしょう。

そこでこの現象から、サイト改善の示唆が得られないか考えてみます。

この現象はいい傾向でしょうか、悪い傾向でしょうか。

ちょっと気になるのは、セッションの増加が一日に限られており、単発で終わっている点です。

そこでこのもしもし効果で獲得したユーザーがサイトに定着しているか調べてみます。

詳しくは (R + Google アナリティクス)コーホート比較でユーザーの定着具合を測る - 廿TT を参照してください。

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

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

dat_20150715<- ga$GetReportData(query)
plot.ts(dat_20150715[,2])

f:id:abrahamcow:20150801132932p:plain

なんともしもし効果で獲得したユーザーの再訪はずっと0。

もしもしの語源 - 廿TT はあまり印象に残らない記事だったみたいですね。

関連ページへのリンクを貼るなどして、さらにユーザーの興味を刺激するようにしたらいいかもしれません。

……というようなことをまとめれば、7月分の報告書はだいたい完成です。

参考文献

データ解析の実務プロセス入門

データ解析の実務プロセス入門

関連エントリ

abrahamcow.hatenablog.com