geom_lasagna.R · GitHubを書きました。
ラザニアプロットというのは要は時系列データについてのヒートマップ(色付きテーブル)です(ラザニアプロット(fields パッケージの image.plot にちょっと一工夫) - 廿TT)。
さて、Web 解析の分野ではよく「エンゲージメント指標」として、「ページ/セッション」や「直帰率」、「新規セッション率」などを使います。
「エンゲージメント指標」のほとんどは割り算値です。
比率や割合の欠点に「値の変化について解釈が一意でない」という点があります。
例えば、ページ/セッション( = ページビュー数 / セッション数)が増加した場合、サイトを閲覧しまくるヘビーユーザー層が増えたのか、軽くながめるライトユーザー層が減ったのか判断できません。
そこでもうちょっと分布の情報を保ったまま、数字を要約して時間的に比較する方法として、ヒートマップを使うことが考えられます。
Googleアナリティクスのデータを使って R の ggplot2 でヒートマップを書いてみます。
library(ggplot2)library(googleAnalyticsR)library(dplyr) ga_auth() account_list <- ga_account_list() ga_id <- account_list[3,'viewId'] gadata <- google_analytics_4(ga_id, date_range = c("2017-05-29","2017-06-04"), metrics = c("sessions"), dim_filters = filter_clause_ga4(list(dim_filter("pageDepth","NUMERIC_GREATER_THAN","0"))), dimensions = c("date","userType","pageDepth"), max =20000) gadata=gadata %>% mutate(pageDepth=as.numeric(pageDepth)) ggplot(gadata,aes(x=date,y=pageDepth,fill=sessions))+ geom_tile()
> head(gadata) date userType pageDepth sessions 12017-05-29 New Visitor 139422017-05-29 New Visitor 12132017-05-29 New Visitor 22842017-05-29 New Visitor 3852017-05-29 New Visitor 4262017-05-29 New Visitor 52
縦軸がページ深度、横軸が日付、色の濃さがセッション数です。
これでもいいといえばいいのかもしれませんが、上のほうがまばらになっているし、変化がわかりにくい。もう少し情報をまとめたいところです。
そこである値以上の値を合算して、ヒートマップにすることを考えます。
そのために geom_lasagna を書きました。
source("https://gist.githubusercontent.com/abikoushi/80ca3be0bb191be1bd03acf069e513b9/raw/654303cdc5c9a37a4c94a42e7bf75bdf2ee24529/geom_lasagna.R") ggplot(gadata,aes(x=date,y=pageDepth,fill=sessions))+ geom_lasagna(or_more =3)
3~ は 3以上という意味です。引数 or_more でいくつ以上の値を合算するか選びます。
geom_lasagna_text で各セルにセッション数を乗せることができます。
ggplot(gadata,aes(x=date,y=pageDepth,fill=sessions))+ geom_lasagna(or_more =4)+ geom_lasagna_text(aes(label=sessions),or_more =4,color="white")
ggplot2 なので facet とかもできます。
ggplot(gadata,aes(x=date,y=pageDepth,fill=sessions))+ geom_lasagna(or_more =4)+ geom_lasagna_text(aes(label=sessions),or_more =4)+ scale_fill_continuous(low ="white",high ="cornflowerblue")+ facet_wrap(~userType, nrow=2)
geom_lasagna_label を使うとこんなふうになります。
ggplot(gadata,aes(x=date,y=pageDepth,fill=sessions))+ geom_lasagna(or_more =3)+ geom_lasagna_label(aes(label=sessions),or_more =3)
以上です。
アマゾンアフィリエイトのコーナー
Rグラフィックスクックブック ―ggplot2によるグラフ作成のレシピ集
- 作者: Winston Chang,石井弓美子,河内崇,瀬戸山雅人,古畠敦
- 出版社/メーカー:オライリージャパン
- 発売日: 2013/11/30
- メディア:大型本
- この商品を含むブログ (3件) を見る