廿TT

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

(R + Google アナリティクス)パラレルチャート、レーダーチャート

レーダーチャート

おそらく、レーダーチャート(風配図、スパイダープロットなどともいう)は何度かご覧になったことがあるでしょう。

f:id:abrahamcow:20150211123654p:plain

最大値を 1、最小値を 0 に標準化し、ある「切り口」で線を塗り分けることで、複数の指標を並べて集団の特徴を表せます。

ここではチャネル(訪問経路)を「切り口」にしていますが、年代や性別でも同様の図示が行えます。

ただし多くの人の目は、極座標表現(円周上の半径と角度で表す表現)に慣れていませんから、特殊な事情がない限り、後述のパラレルチャートを用いることをおすすめします。

まず、レーダーチャートの書き方を以下に記します。

#データ取得
ga <- RGoogleAnalytics()
ga.profiles <- ga$GetProfileData(access_token)

sta <- "2015-01-01" #データ取得開始期間
en <- "2015-01-31" #直近のデータ

query$Init(start.date = sta,
           end.date = en,
           dimensions = "ga:channelGrouping",  
           metrics = "ga:sessions,ga:percentNewSessions,ga:bounceRate,ga:avgSessionDuration,ga:pageviewsPerSession", 
           table.id = paste("ga:",ga.profiles$id[1],sep="",collapse=","),
           #           filter = "",
           access_token=access_token)

dat1 <- ga$GetReportData(query) 
#データ取得完了
#plotrix パッケージを使う
#
library(plotrix)
radial.plot(dat1[,-1], rp.type="p")
#
dat1_max <- apply(dat1[,-1], 2, max) #最大値
dat1_min <- apply(dat1[,-1], 2, min) #最小値
dat1_rad <- scale(dat1[,-1], dat1_min, dat1_max - dat1_min) #標準化
#
old = par(mar = c(0, 0, 0, 0)) #余白を消してる
dat1_rad
cols=c("#00a0e9", "#e4007f", "#009944", "#f39800", "#0068b7")

radial.plot(dat1_rad, rp.type="p",labels=colnames(dat1[,-1]),
             show.grid.labels=2,line.col=cols, lwd=2)
#show.grid.labels=2: 左横にラベルを振る
legend(locator(1),dat1[,1],lty=1,col=cols,lwd=2)
#凡例の位置をクリックで指定
par(old) #余白を元に戻す

パラレルチャート(平行プロット)

レーダーチャートを通常よく使われる x 軸、y 軸の表現にしたものがパラレルチャート(平行プロット)です。

f:id:abrahamcow:20150211182315p:plain

パラレルチャートの書き方を以下に記します。

library(ggplot2)
library(tidyr)
library(dplyr)

tmp <- cbind(channel=dat1[,1],as.data.frame(dat1_rad))

dat2 <- tmp  %>% gather(variable, value, -channel)

p <- ggplot(dat2, aes(factor(variable), value,
                      group=channel,colour=channel))

theme_set(theme_bw(20))

p + geom_line(size=1.2) + 
  scale_x_discrete(breaks = c(levels(dat2$variable),""))+
  scale_color_manual(values=cols) +
  labs(x="",y="")

データについて

今回使用したデータは GA20150211 に置いておきます。

練習用にご活用ください。

注意点

そもそも複数の指標を同時に並べる必要があるかという点は考えてみる価値があります。

Web 解析の分野では、指標どうしで割り算をしてあたらしい指標を作り出すことがよく行われますが、指標の数を増やしすぎると何を見たいか不明瞭になるため、ある程度絞り込むことも必要でしょう。

Google アナリティクスデータKPI設計のための可視化。散布図行列で定点観測するエンゲージメント指標を絞り込む。 - 廿TT などを参照してください。