アクセスの傾向を示す図として、棒グラフや折れ線グラフ、そして、慣れると快適な箱ひげ図があります。でも、これらの図は解析では非常に有用ですが、傾向を示すには取っ付きにくいです。そこで、見た目にアクセスの傾向が把握しやすいバイオリンプロットをggplot2で作成する方法をご紹介します。
解析の前準備
- Rのインストール 参考記事はこちら
- ライブラリ”ggplot2”のインストール。
*ggplot2をインストールされていない方はまずはinstall.packages(“ggplot2”)をRで実行してください。
コードの実行
対象とするエクセルデータの書式は下記の通りです。表示されているセッション数は適当です。左から日付、時間帯、セッション数(visits)になります。時間帯は00〜23にしています。RとGoogle Analyticsを連携させデータを取得すると楽です。その際には、dimensions = “ga:date, ga:hour”、metrics = “ga:visits”と設定することで目的のデータを取得することが出来ます。

下記がバイオリンプロットを描写するコードです。
###ライブラリーの読み込み#####
library("XLConnect")
library("tcltk")
library("ggplot2")
########
###データの読み込み#####
sheetSelect <- 1 #読み込むシート番号を入力
selectABook <- paste(as.character(tkgetOpenFile(title = "試験結果xlsxファイルを選択",filetypes = '{"xlsxファイル" {".xlsx"}}',initialfile = "*.xlsx")), sep = "", collapse =" ")
MasterAnaData <- loadWorkbook(selectABook)
AnaData <- readWorksheet(MasterAnaData, sheet = sheetSelect)
UniqueDate <- unique(AnaData[, 1]) #日にちの単一化
ViolinVisitsData <- NULL #プロット用のvisitsデータの格納用
ViolinPlotData <- NULL #プロット用のデータの格納用
###データの加工#####
for (n in seq(UniqueDate)){
SubAnaData <- subset(AnaData, AnaData[, 1] == UniqueDate[n]) #データを日付けで抽出
#データの時系列が24時間じゃない時もあるので念のためforで処理
for (i in seq(nrow(SubAnaData))){
hourVisits <- SubAnaData[i, 3] #時間別のvisitsを取得
if(identical(all.equal(hourVisits, 0), TRUE)) #visitがデータフレームの3行目にあると想定。違ったら変更してください。
{
#visitが0の時には処理しない
}else{
ViolinVisitsData <- rep(type.convert(SubAnaData[i, 2]), hourVisits) #hourがデータフレームの2行目にあると想定。違ったら変更してください。
ViolinPlotData <- rbind(ViolinPlotData, cbind(UniqueDate[n], as.numeric(ViolinVisitsData)))
}}
}
ViolinPlotData <- as.data.frame(ViolinPlotData) #データフレーム化
ViolinPlotData[, 2] <- type.convert(as.character(ViolinPlotData[, 2])) #おまじない
#プロットの準備、塗りつぶしの色はfillで設定できます。
p <- ggplot(ViolinPlotData, aes(factor(ViolinPlotData[, 1]), ViolinPlotData[, 2], fill = factor(ViolinPlotData[, 1])))
#vaiolinplotの設定
p <- p + geom_violin(scale = "count")
#図の調整,Y軸を時間にしたい場合は最後の+ coord_flip()を削除してください。
p <- p +
coord_cartesian(ylim = -0.5:24.5) +
labs( x = " ", y = " ") +
#scale_y_continuous(0:23) +
theme(axis.text.x = element_text(colour="black", size = 13),
plot.background = element_rect(fill = NA, colour = NA), #生成り色"#fbfaf5"
panel.background = element_rect(linetype = "solid", colour = "black", fill = NA), #絹鼠"#dddcd6"
panel.grid.major = element_line(color = NA),
panel.grid.minor = element_line(color = NA),
axis.title.x = element_text(size = 13),
axis.title.y = element_text(size = 13,angle = 90),
axis.text.y = element_text(colour="black", size = 11)) +
coord_flip()
print(p)
実行結果の例
はてなブックマークで紹介された当日と翌日のセッション数(visits)の一部です。数は図からは読み取れませんが、傾向は一目瞭然です。後は、必要なセッション数と解釈を加えることで検討資料としては十分かと思います。

少しでも、あなたの解析が楽になりますように!!