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

廿TT

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

RGoogleAnalytics で変化の要因を読みとく(折れ線グラフ、帯グラフ、積み上げ棒グラフ)

折れ線グラフ

「変化の要因を読みとく」とか、つい大げさなタイトルをつけてしまったが、単に折れ線グラフと帯グラフ、積み上げ棒グラフの話。

経時的な変化を見るには折れ線グラフがいい。

f:id:abrahamcow:20140720235830p:plain

折れ線グラフの書き方は以前にも書いた。
RGoogleAnalytics でとりあえず折れ線グラフ - 廿TT

また、RGoogleAnalytics のセットアップ、アカウントのオーサライズは下の記事を参照。
RGoogleAnalytics をいじっている - 廿TT


上図の書き方:

#データの取得
library("RGoogleAnalytics")
query <- QueryBuilder()
access_token <- query$authorize()

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

ga <- RGoogleAnalytics()
ga.profiles <- ga$GetProfileData(access_token)
query$Init(start.date = "2013-06-01",
           end.date = "2014-06-30",
           dimensions = "ga:yearMonth",  
           metrics = "ga:visits",
           table.id = paste("ga:",ga.profiles$id[1],sep="",collapse=","),
           access_token=access_token)
ss <- ga$GetReportData(query)

#時系列オブジェクトに変更
len <- length(ss$yearMonth)
t1 <- seq.Date(as.Date("2013-06-01"), by="1 month", length.out=len)
ss$month <- t1
#
library(ggplot2)
library(scales)
#
theme_set(theme_bw(20)) #背景は白に固定。文字は大きめに。
#
p <- ggplot(ss,aes(x=month,y=visits)) +
  scale_x_date(labels = date_format("20%y/%m"))
p +  geom_line(size=1, colour="cornflowerblue")
#ぼくは cornflowerblue っていう色が好きでよく使う

上の折れ線グラフから、2014年1月に visits(セッション数、訪問の延べ人数に相当)が急増したことがわかる。

このとき、どういう経路でユーザーがサイトに訪れたのかを知るために、チャネルごとに visits を示す。

f:id:abrahamcow:20140721000045p:plain

ひとつのグラフ内に系列がいっぱいあると凡例と見比べるが大変になるので、こういうときは縦軸の目盛りを揃えて個別に折れ線を書くのがいいとぼくは思う。

……とおもったけどやっぱこっちのほうがいい。下記事参照。


RGoogleAnalytics で変化の要因を読みとく(変化量と寄与率のグラフ+散布図) - 廿TT

1月にはソーシャル、リファラー(他サイト経由)、オーガニック(自然検索)、ダイレクト(直接訪問・ノーリファラー)いずれも増加していることがわかる。

また、2月以降のゆるやかなセッション増加傾向には、オーガニック・サーチの寄与が大きいことがわかる。記事が増えればその分検索経由の訪問も増えるので、この傾向に不思議はない。

(ちなみにぼくはアクセス解析を毎日ちまちまチェックするのが好きなので、1月の増加は、 A/Bテストのガイドライン:仮説検定はいらない(Request for Comments|ご意見求む) - 廿TT が拡散されたことと、卒論・修論シーズンの影響で 修士論文用のTeXテンプレート - 廿TT の自然検索経由訪問が伸びたことが原因であることを知っている。)


上図の書き方:

#データの取得
query$Init(start.date = "2013-06-01",
           end.date = "2014-06-30",
           dimensions = "ga:yearMonth,ga:channelGrouping",  
           metrics = "ga:visits",
           table.id = paste("ga:",ga.profiles$id[1],sep="",collapse=","),
           access_token=access_token)
channel<- ga$GetReportData(query)

#時系列オブジェクトに変更
t1 <- paste(
  substr(channel$yearMonth,1,4),
  substr(channel$yearMonth,5,6),
  "01",
  sep="/")
t1 <- as.Date(t1)
channel$month <- t1

#描画
p1 <- ggplot(data=channel, aes(x=month,y=visits,colour=channelGrouping))
p1 + geom_line() + 
  facet_wrap(~channelGrouping, nrow=6)+  #channelGrouping で層別。パネルを6行に分割。
  theme(legend.position="none")+
  scale_x_date(labels = date_format("20%y/%m"))

帯グラフ

またデバイスごとに図示してやると、1月以降、mobile(スマホ)+タブレットの割合が増えてきていることが分かる。

こういう構成比を見せたいときは、帯グラフを使うのがよい。

f:id:abrahamcow:20140721001627p:plain

ちなみに、構成比を比較するとき、世間一般では円グラフがよく使われるが、円グラフは原則としてあまり用いないほうがよい。
人間の目は円グラフを比較するのが苦手なのだ。
ああああ: 円グラフやめろ
円グラフ - Wikipedia

円グラフは、男と女とか、合格と不合格とか、生物と無生物とか、Aと非Aとか、ぐりとぐらとか、そういうふうに項目が2種類に限られるときや、なにか特殊な事情がある場合(例:上司がどうしても棒より円のほうが好きだと言い張る)に限って、例外的に用いる。
円グラフの条件つき復権 - macroscope
円グラフの条件つき復権、つづき - macroscope


上図の書き方:

query$Init(start.date = "2013-06-01",
           end.date = "2014-06-30",
           dimensions = "ga:yearMonth,ga:deviceCategory",  
           metrics = "ga:visits",
           table.id = paste("ga:",ga.profiles$id[1],sep="",collapse=","),
           access_token=access_token)
device<- ga$GetReportData(query)


p1 <- ggplot(data=device, aes(x=yearMonth,y=visits,fill=deviceCategory))
p1 + geom_bar(stat="identity",position="fill") + 
  scale_y_continuous(labels = percent) + #y軸を%表示に
  scale_fill_brewer() #色変更

積み上げ棒グラフ

また、ユーザーを新規、リピーターに分けてみることも、Web 解析の分野ではよく行われる。
こういうときは、新規、リピーターが絶対数として増えてるか減ってるか(ユーザーが定着しているか)、構成比が変化しているかに興味があるので、積み上げ棒グラフを使うのがよいと思う。

f:id:abrahamcow:20140721003239p:plain

これをみると、急増時には Returning Visitor(リピーター)も増える傾向があることが分かる。
また、2月以降構成比に大きな変化はないまま、全体としては徐々に拡大傾向にあることがわかる。

時系列の推移を見せたいときは基本的には折れ線グラフを使うのがいい。が、細かい推移を見せたいか、量の大小関係を比較したいかで、折れ線グラフと棒グラフを使い分けて構わない。

その際、棒グラフの縦軸は 0 からはじめるべきである。途中を省略した棒グラフでは比が保たれなくなり、大小関係の比較ができない。

折れ線グラフは推移の傾向を見るものなので、0 からはじめる必要はない。


上図の書き方:

query$Init(start.date = "2013-06-01",
           end.date = "2014-06-30",
           dimensions = "ga:yearMonth,ga:userType",  
           metrics = "ga:visits",
           table.id = paste("ga:",ga.profiles$id[1],sep="",collapse=","),
           access_token=access_token)
userType<- ga$GetReportData(query)

p1 <- ggplot(data=userType, aes(x=yearMonth,y=visits,fill=userType))
p1 + geom_bar(stat="identity") +
  scale_fill_manual(values = c("#f39800","#0068b7"))
#色をオレンジと青にした。

余談

ぼくは今年1月末くらいまで、某 Google アナリティクス認定パートナーの会社(Google Analytics Partner Services and Technologies ←このなかのどっかだ)に務めていたんだけど、そのときそこではこういうグラフを基本的には手作業エクセルで作っていた。

そのため、派遣社員が毎日深夜まで泣きながらエクセルのシートを埋め続けてメンタルやっちゃうとか、そういう光景を見てきた。

せっかくコンピューターやインターネットがある時代なので、こういう作業はどんどんスクリプト化して、みんなもっと楽になって欲しい。

もっというと、Google アナリティクス認定パートナーの会社でも別に技術的にすごい高度なことをやっているわけではないので、Web 解析コンサルタントとかに高い金払うよりは、自分の会社の Web 担当者にもうちょっと余裕のあるお金と時間をあげて、もうちょっと勉強させてあげたほうがいいと思う。

「うーむ。我が社も Web 解析でデータ・ドリブンマーケティングを!」とか言ってる張本人が販売費及び一般管理費どんぶり勘定で、現場の担当者締め上げるしか能がなくて、結局外注に出して高いお金払ってるんじゃ世話ないじゃん?

まあ経営者はこんな弱小ブログ読んでないだろうから言ってもしょうがないんだけど……。

そう思ってこの記事を書いてる。

アマゾン・アフィリエイトのコーナー

統計グラフのウラ・オモテ―初歩から学ぶ、グラフの「読み書き」 (ブルーバックス)

統計グラフのウラ・オモテ―初歩から学ぶ、グラフの「読み書き」 (ブルーバックス)

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

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

どちらもいい本です。