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

廿TT

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

RGoogleAnalytics + gvisSankey でユーザーフローのインタラクティブなグラフ

ユーザーのフロー

f:id:abrahamcow:20140909091652p:plain
Google アナリティクスの『ユーザーのフロー』レポートでは、ページ遷移をインタラクティブに見ることができます。
こういう図をサンキーチャート(サンキーダイアグラム)と呼びます。

サンキーダイアグラムはページ遷移の可視化に適した表現だと思いますが、一方でなんかうねうねしてるし横長になりすぎていたりすると読み取りにくくなります。

そこで、今回は思い切ってデータを縮約し、入口と出口だけのサンキーチャートを作成してみます。

Google Chart Tools のサンキーチャート

googleVis は Google Chart Tools のグラフを R から作成できるパッケージです。

これを使ってサンキーチャートを作成してみます。

Examples from the googleVis package

library(RGoogleAnalytics)
query <- QueryBuilder()
access_token <- query$authorize()

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

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


query$Init(start.date = "2014-09-01",
           end.date = "2014-09-01",
           dimensions = "ga:landingPagePath,ga:exitPagePath",  
           metrics = "ga:visits", 
           sort = "ga:visits",
           table.id = paste("ga:",ga.profiles$id[1],sep="",collapse=","),
           access_token=access_token)

ppath <- ga$GetReportData(query)

from <- ifelse(ppath[,1] == ppath[,2],"同一ページ",ppath[,1])
to <- ifelse(ppath[,1] == ppath[,2],"同一ページ",ppath[,2])

dat1 <- data.frame(from,to,visits=ppath$visits)

ppath[,1] <- paste(ppath[,1]," ")

Sankey <- gvisSankey(dat1, from="from", to="to", weight="visits",
                     options=list(
                       sankey="{link: {color: { fill: '#d799ae' } },
                            node: { color: { fill: '#a61d4c' },
                            label: { color: '#871b47' } }}"))

plot(Sankey)

cat(Sankey$html$chart,file="Sankey.txt")

r - Embedding googleVis charts into a web site - Stack Overflow

上記のコードはまずランディングページと離脱ページのデータを取得し、ランディングページのディレクトリと離脱ページのURLが同じなら、「同一ページ」という文字列に置き換えています。

最初に閲覧したページと最後に閲覧したページが同じなら、たぶんその人は最初のページだけ見て直帰したのだろう、と考えられます。




左が入口、右が出口。
「同一ページが」ほとんどを占めています。
直帰している場合がほとんどで、このブログ内をあれこれ回遊するのは例外的なケースと言えます。

その例外も、入口が各エントリ、出口が /archive/ だったり / だったりします。

/archive/category/ のページを閲覧したものの、目的のページが見つらず離脱してしまったのかな? /archive/category/メンタルヘルス ってどういうページだっけ? ナビゲーションが悪い?

……などとこのように考えるとき、このグラフは画像形式になっていないので、コピペで
http://abrahamcow.hatenablog.com/archive/category/メンタルヘルス
を確かめることができます。

理想的なユーザーの遷移を考える

このブログがお気に入りで、繰り返し閲覧するユーザーなら、トップページからはじまって、なんやかんやで各エントリに辿り着き、各エントリから関連エントリをさらに閲覧、みたいな遷移が考えられます。

f:id:abrahamcow:20140909160849p:plain

そのような理想的なユーザーの遷移と現実のギャップを調べたい、確率論的にモデル化してどこを改善するか考えたい
……というような、より高度な分析をされたい向きには、『確率モデルによるWebデータ解析法』が参考になるでしょう。

確率モデルによるWebデータ解析法 - データマイニング技法からe-コマースまで

確率モデルによるWebデータ解析法 - データマイニング技法からe-コマースまで

  • 作者: Pierre Baldi/Paolo Frasconi/Padhraic Smyth,水田正弘/南弘征/小宮由里子
  • 出版社/メーカー: 森北出版
  • 発売日: 2007/05/18
  • メディア: 単行本(ソフトカバー)
  • 購入: 3人 クリック: 179回
  • この商品を含むブログ (16件) を見る

課題点

今回はぜんぜん思ったとおりにいかなかったー。

まずデータが引っ張ってこれない。ユーザーフローのデータってエクスポートできないの?

そして Google Chart Tools のグラフ、データがちょっと大きくなると、表示が細くなっちゃって見づらい。

スタイルシートとかいじればいいのかな? よくわからないよー。

縦軸に目盛りを振りたかったんだけど、そのやり方もわからなかった。

またサンキーダイアグラムはサイクルのあるデータ、
f:id:abrahamcow:20140909162123p:plain
こういうやつがあるダメみたいで、苦肉の策としてランディングページのほうのディレクトリの末尾にスペースを付け足して、別ものとして認識させてます。

ppath[,1] <- paste(ppath[,1]," ")


ダメな例。

test <- data.frame(
V1=c("a","b"),
v2=c("b","a"),
V3=c(1,1)
)

Sankey <- gvisSankey(test, from="V1", to="V2", weight="V3")
plot(Sankey)

怒られる。
f:id:abrahamcow:20140909091752p:plain

付録:Graphviz

digraph cycle{
a -> b;
b -> a;
}
digraph g1{
トップページ -> 各エントリ;
トップページ -> カテゴリ:
カテゴリ -> 各エントリ:
各エントリ -> 各エントリ;
}

データのビジュアル化を最少の労力で: はじめに
Rgraphvizのインストール(Windows) - はやしのブログ Rev.3