Google Analyticsには非常に見やすいグラフ等が用意されていますが、詳細な統計を取るのには不向きです。データ自体はCSV形式でダウンロードも可能です、Excel等を使う事もできます。今回は提供されているAPIを使用し、半自動的にグラフ化処理まで行ってみましょう。APIを使うことで取得するデータに自由にフィルターをかけたり、直接Rに読み込ませることが可能となります。
なお、ドキュメントはこちら。サンプルコードは公式のサンプルから一部書き直しています。また、「RでGoogle Analtyics: 時間帯別グラフ | Google Analytics アクセス解析」を参考にさせて頂きました。
最初にライブラリをダウンロードして展開しておきましょう。こちらからダウンロードします。作業ディレクトリ、ライブラリのパス、ログイン情報は適宜変更して下さい。設置したら以下を実行。
これを使ってグラフを表示してみましょう。まずはシンプルなplotです。横軸は適当(時刻が入る)で、縦軸に訪問者数を書きます。
見やすいグラフにしてみましょう。3つのパラメーター(時刻、日付、訪問者数)を使い、ヒートマップを書きます。
次にこのデータをまとめて、曜日毎に集計してみましょう。
ここまではこちらの記事を多いに参考にしました。
何ができるのか、色々やってみましょう。googleから来た人のみをfilterを使って集計してみます。
googleから来た人のうち特定の検索キーワードを含むものを列挙してみましょう。filterにセミコロンで区切りながら条件を書けばand検索となります。
全訪問者のうち、特定のキーワードで来た人の割合を集計してみましょう。(ちょっと強引過ぎる実装ですが、他に思いつきませんでした。なお割合を求めているのに数字が100を超えたのは、数週間分のデータを合計したからです。)
曜日による違いはあまり見えません。また、木曜昼間に何かあったようです。
アクセス元がPCとモバイルとで滞在時間がどのように違うのか見てみましょう。モバイルかどうかの判定はga:isMobileにて取得できます。
全体の様子も見てみましょう。
想像通りPCの方が滞在時間が長い事がよくわかります。
■まとめ
・RからAPIを比較的簡単に使うことができる
・APIを使うことで、google analyticsから様々なデータを引っ張ることができる
・google analytics apiのfilterが強力そう
・Rのlevelplotによるグラフ描画が凄い
■コメント
・今回書いた事は、githubのgistにもまとめました。R_Google_Analyrics_Sample.R — Gist
・データフレーム的な扱いをするにはどうするのかわからない(ga.data$data$ga:visitorsみたいにしたい)
・ggplot2が使えると楽しそう
・取得できる最大件数は1万件。なのでフィルターで上手く処理しておかないといけない
・Google AnalyticsのAPIにはJavascriptやphp向けのライブラリもありますし、こういったものを使ったアプリ(例えばQuicklyticsとか)も存在します。このように何かサービス化するのも面白そう。
■資料
・かなり参考にさせて頂きました。こちらで書かれていたライブラリがなぜか使えなかったので、google側が用意したRライブラリを使って今回の記事を書きました。
RでGoogle Analtyics: 時間帯別グラフ | Google Analytics アクセス解析
・公式のサンプルコード
GettingStarted - r-google-analytics - Getting Started with the RGoogleAnalytics package - Google Analytics For The R Statistical Programming Language - Google Project Hosting
・APIのパラメーターについて、Data Feed URIを作ることができる。非常にわかりやすい。
Google Analytics Tools - Query Explorer
・どんなパラメーターを取得できるのか
Dimensions & Metrics Reference - Google Analytics — Google Developers
・Google Analytics Core Reporting API全体についてのドキュメント
What Is The Core Reporting API - Overview - Google Analytics — Google Developers
なお、ドキュメントはこちら。サンプルコードは公式のサンプルから一部書き直しています。また、「RでGoogle Analtyics: 時間帯別グラフ | Google Analytics アクセス解析」を参考にさせて頂きました。
最初にライブラリをダウンロードして展開しておきましょう。こちらからダウンロードします。作業ディレクトリ、ライブラリのパス、ログイン情報は適宜変更して下さい。設置したら以下を実行。
#ライブラリ読み込み source("RGoogleAnalytics.R") source("QueryBuilder.R") library(lattice) #levelplot関数に必要 # 1. Create a new Google Analytics API object ga <- RGoogleAnalytics() # 2. Authorize the object with your Google Analytics Account Credentials ga$SetCredentials("username", "password") #適宜変更してください # 3. Get the list of different profiles, to help build the query profiles <- ga$GetProfileData() print(profiles[1]);まずはここまで実行しましょう。ここでprofiles[1]には、google analyticsに登録してあるサイト一覧が入っています(AccountName、ProfileName、TableId)。この中から目的のサイトを探し、TableIdという項目の「ga:xxxxxxxxxx」を以下にはめ込んでデータを取得します。
# 4. Build the Data Export API query query <- QueryBuilder() query$Init(start.date = "2011-01-01", end.date = "2011-01-29", dimensions = c("ga:date","ga:hour"), metrics = "ga:visitors", sort = "ga:date", table.id = "ga:xxxxxxxxxx") #tableIDに先程見つけた番号を入れます #5. Make a request to get the data from the API ga.data <- ga$GetReportData(query) #6. Look at the returned data head(ga.data$data)取得したいデータの期間、種類、ソート順位、どのサイトかを指定して、データを取得します。今回は各時刻における訪問者数を取得したので、このようなデータが表示されるはずです。
ga:date ga:hour ga:visitors 1 20110101 00 2 2 20110101 01 3 3 20110101 02 7 4 20110101 03 3 5 20110101 04 6 6 20110101 05 4
これを使ってグラフを表示してみましょう。まずはシンプルなplotです。横軸は適当(時刻が入る)で、縦軸に訪問者数を書きます。
plot(ga.data$data[,3],type="l")
見やすいグラフにしてみましょう。3つのパラメーター(時刻、日付、訪問者数)を使い、ヒートマップを書きます。
hour = ga.data$data[,2] #時刻 day = ga.data$data[,1] #日付 visitors = ga.data$data[,3] #訪問者数 levelplot( tapply(visitors,list(hour,day),sum) , col.regions=colorRampPalette(c("white","red")), xlab="Hour" , ylab="Date" ,main="Visitors" )
次にこのデータをまとめて、曜日毎に集計してみましょう。
# 曜日を定義 wdays <- c("1_Sun.","2_Mon.","3_Tue.","4_Wed.","5_Thu.","6_Fri.","7_Sat.") #表示順を揃えるためindexをつける # 時刻フォーマットをRで扱える(as.Dateで読み込める形式)に変換する関数 # 参考 http://aoki2.si.gunma-u.ac.jp/R/joseki/redefine.as.Date.html changeDateFormat <- function(str, format="%04s-%02s-%02s"){ y = substr(str,1,4) m = substr(str,5,6) d = substr(str,7,8) sprintf(format, y, m, d) } #グラフ levelplot( tapply(visitors,list(hour,wdays[as.numeric(strftime(changeDateFormat(day), "%w"))+1]),sum) , col.regions=colorRampPalette(c("white","red")), xlab="Hour" , ylab="Weekday" ,main="Visitors" )
ここまではこちらの記事を多いに参考にしました。
何ができるのか、色々やってみましょう。googleから来た人のみをfilterを使って集計してみます。
query$Init(start.date = "2011-01-01", end.date = "2011-01-31", dimensions = c("ga:date","ga:hour"), metrics = "ga:visitors", filters="ga:source=@google", #ga:sourceにgoogleを含む、という意味 sort = "ga:date", table.id = "ga:xxxxxxxxxx") ga.data <- ga$GetReportData(query) head(ga.data$data)
googleから来た人のうち特定の検索キーワードを含むものを列挙してみましょう。filterにセミコロンで区切りながら条件を書けばand検索となります。
query$Init(start.date = "2011-01-01", end.date = "2011-01-31", dimensions = c("ga:date","ga:keyword"), metrics = "ga:visitors", filters="ga:source=@google;ga:keyword=@ios", #ga:sourceにgoogleを含み、かつga:keywordにisoを含む sort = "ga:date", max.results=100, table.id = "ga:xxxxxxxxxx") ga.data <- ga$GetReportData(query) head(ga.data$data)
全訪問者のうち、特定のキーワードで来た人の割合を集計してみましょう。(ちょっと強引過ぎる実装ですが、他に思いつきませんでした。なお割合を求めているのに数字が100を超えたのは、数週間分のデータを合計したからです。)
#まず、普通に訪問者を取得する query$Init(start.date = "2011-01-01", end.date = "2011-01-31", dimensions = c("ga:date","ga:hour"), metrics = "ga:visitors", sort = "ga:date", table.id = "ga:xxxxxxxxxx") ga.data <- ga$GetReportData(query) #必要パラメーターを記録 hour = ga.data$data[,2] #時刻 day = ga.data$data[,1] #日付 visitors = ga.data$data[,3] #訪問者数 #次に、特定キーワードで検索して来た人を取得する。filter機能を使います。 query$Init(start.date = "2011-01-01", end.date = "2011-01-31", dimensions = c("ga:date","ga:hour"), metrics = "ga:visitors", filters="ga:keyword=@ios", max.results=10000, table.id = "ga:xxxxxxxxxx") ga.data <- ga$GetReportData(query) #必要パラメーターを記録 keywordVisitors = ga.data$data[,3] #訪問者数 #訪問者における該当キーワード訪問者の比率を計算 keywordVisitorsPercent = keywordVisitors/visitors*100 #曜日単位で集計してグラフ表示 wdays <- c("1_Sun.","2_Mon.","3_Tue.","4_Wed.","5_Thu.","6_Fri.","7_Sat.") changeDateFormat <- function(str, format="%04s-%02s-%02s") { y = substr(str,1,4) m = substr(str,5,6) d = substr(str,7,8) sprintf(format, y, m, d) } levelplot( tapply(keywordVisitorsPercent,list(hour,wdays[as.numeric(strftime(changeDateFormat(day), "%w"))+1]),sum) , col.regions=colorRampPalette(c("white","red")), xlab="Hour" , ylab="Weekday" ,main="keywordVisitors/visitors" )
曜日による違いはあまり見えません。また、木曜昼間に何かあったようです。
アクセス元がPCとモバイルとで滞在時間がどのように違うのか見てみましょう。モバイルかどうかの判定はga:isMobileにて取得できます。
query$Init(start.date = "2011-01-01", end.date = "2011-03-31", dimensions = c("ga:visitLength","ga:isMobile"), metrics = "ga:visitors", table.id = "ga:xxxxxxxxxx") ga.data <- ga$GetReportData(query) head(ga.data$data) boxplot( as.numeric(ga.data$data[ ga.data$data[,2]=="Yes" , ][,1]) , as.numeric(ga.data$data[ ga.data$data[,2]=="No" , ][,1]) , xlab="Mobile , PC",ylab="visitLength",main="visitLength (Mobile vs PC)" )
全体の様子も見てみましょう。
#densityを計算 density_isMobile_No = density(as.numeric(ga.data$data[ ga.data$data[,2]=="No" , ][,1])) density_isMobile_Yes = density(as.numeric(ga.data$data[ ga.data$data[,2]=="Yes" , ][,1])) #最大値を見つけておく xlim = c(0,max(density_isMobile_No$x,density_isMobile_Yes$x)) ylim = c(0,max(density_isMobile_No$yo,density_isMobile_Yes$y)) #グラフ描画 plot( density_isMobile_No, xlim=xlim, ylim=ylim, xlab="ga:visitLength",ylab="density",main="",col=2 ) par(new=T) plot( density_isMobile_Yes, xlim=xlim, ylim=ylim, xlab="ga:visitLength",ylab="density",main="",col=3 ) legend( xlim[2]/4*3,ylim[2]/4*3 , c("PC","Mobile") , col=c(2,3) , lty=c(1,1) )
想像通りPCの方が滞在時間が長い事がよくわかります。
■まとめ
・RからAPIを比較的簡単に使うことができる
・APIを使うことで、google analyticsから様々なデータを引っ張ることができる
・google analytics apiのfilterが強力そう
・Rのlevelplotによるグラフ描画が凄い
■コメント
・今回書いた事は、githubのgistにもまとめました。R_Google_Analyrics_Sample.R — Gist
・データフレーム的な扱いをするにはどうするのかわからない(ga.data$data$ga:visitorsみたいにしたい)
・ggplot2が使えると楽しそう
・取得できる最大件数は1万件。なのでフィルターで上手く処理しておかないといけない
・Google AnalyticsのAPIにはJavascriptやphp向けのライブラリもありますし、こういったものを使ったアプリ(例えばQuicklyticsとか)も存在します。このように何かサービス化するのも面白そう。
■資料
・かなり参考にさせて頂きました。こちらで書かれていたライブラリがなぜか使えなかったので、google側が用意したRライブラリを使って今回の記事を書きました。
RでGoogle Analtyics: 時間帯別グラフ | Google Analytics アクセス解析
・公式のサンプルコード
GettingStarted - r-google-analytics - Getting Started with the RGoogleAnalytics package - Google Analytics For The R Statistical Programming Language - Google Project Hosting
・APIのパラメーターについて、Data Feed URIを作ることができる。非常にわかりやすい。
Google Analytics Tools - Query Explorer
・どんなパラメーターを取得できるのか
Dimensions & Metrics Reference - Google Analytics — Google Developers
・Google Analytics Core Reporting API全体についてのドキュメント
What Is The Core Reporting API - Overview - Google Analytics — Google Developers