Rで解析:時系列データをカレンダー形式にプロット「sugrrants」パッケージ


投稿日: Rの解析に役に立つ記事

時系列データをカレンダー形式にプロットするパッケージの紹介です。ggplot2パッケージのコマンドが適応できるので便利だと思います。

参考までにGoogleAnalyticsから「からだにいいもの」の2016年毎日の訪問ユーザー数、デバイスカテゴリーを取得し、ユーザー数の傾向についてプロットしてみました。日の変動は勤務時間や授業などと同じ9:00-19:00に多くのアクセスがあり、土日は平日と比べ訪問者が大きく減少するという傾向でした。大部分はデスクトップからのアクセスです。

17.11.22追記
作成者のEaro Wang氏のパッケージに関する論文です。オーストラリアへ敬意を込めて紹介です。
http://pub.earo.me/calendar-vis.pdf

パッケージバージョンは0.1.1。windows 10のR version 3.4.2で動作を確認しています。


パッケージのインストール

下記コマンドを実行してください。

#パッケージのインストール
install.packages("sugrrants")



コマンドの紹介

詳細はコマンド、パッケージのヘルプを確認してください。

###データ例の作成#####
#RGAパッケージでGoogleAnalyticsデータを取得
#https://www.karada-good.net/analyticsr/r-141
#パッケージのインストール
#install.packages("RGA")
#パッケージの読み込み
library("RGA")
#プロファイルIDの確認
list_profiles()
#プロファイルIDの設定
ProFileID <- "ga:list_profiles()で表示されたID" #2016-01-01:12-31の毎日のユーザー数,デバイスカテゴリを取得 TestData <- get_ga(profileId = ProFileID, start.date = "2016-01-01", end.date = "2016-12-31", metrics = "ga:users, ga:sessions, ga:pageviews", dimensions = "ga:dateHour, ga:date, ga:month, ga:dayOfWeekName, ga:hour, ga:deviceCategory", include.empty.rows = "TRUE") %>% setNames(make.unique(names(.))) #ga:dateで取得したデータをdate classに変換 TestData[2] <- as.Date(unclass(TestData[, 2])$date, tz = "Japan") #データの確認 TestData # A tibble: 18,023 x 7 dateHour date month dayOfWeekName hour <dttm> <date> <chr> <chr> <chr> 1 2016-01-01 00:00:00 2016-01-01 01 Friday 00 2 2016-01-01 00:00:00 2016-01-01 01 Friday 00 3 2016-01-01 01:00:00 2016-01-01 01 Friday 01 4 2016-01-01 01:00:00 2016-01-01 01 Friday 01 5 2016-01-01 02:00:00 2016-01-01 01 Friday 02 6 2016-01-01 02:00:00 2016-01-01 01 Friday 02 7 2016-01-01 03:00:00 2016-01-01 01 Friday 03 8 2016-01-01 04:00:00 2016-01-01 01 Friday 04 9 2016-01-01 05:00:00 2016-01-01 01 Friday 05 10 2016-01-01 06:00:00 2016-01-01 01 Friday 06 # ... with 18,013 more rows, and 2 more variables: #deviceCategory <chr>,users <int> ######## #プロットデータの事前準備:frame_calendarコマンド PlotData <- TestData %>% frame_calendar(x = hour, y = users, date = date, calendar = "monthly") #ggplot2でデータをプロット:アクセスの時間推移 PlotLine <- ggplot(data = PlotData) + geom_line(data = filter(PlotData, deviceCategory == "desktop"), aes(x = .hour, y = .users, group = date, col = deviceCategory)) + geom_line(data = filter(PlotData, deviceCategory == "mobile"), aes(x = .hour, y = .users, group = date, col = deviceCategory)) + scale_color_brewer(palette = "Dark2") + theme(legend.position = "bottom", panel.grid = element_blank(), panel.background = element_rect(fill = "#0a0a0a"), plot.background = element_rect(fill = "#0a0a0a")) #プロットへラベルを付与:prettifyコマンド prettify(PlotLine, label = "label", size = 3) [/code]




###他の参考例#####
###アクセスの時間推移をfacet###
#データ準備
FacetData <- filter(PlotData, deviceCategory != "tablet") %>% frame_calendar(x = hour, y = users, date = date, calendar = "monthly") #プロット FacetLine <- ggplot(data = FacetData, aes(x = .hour, y = .users, group = date, col = deviceCategory)) + geom_line() + scale_color_brewer(palette = "Dark2") + facet_grid(deviceCategory ~.) + theme(legend.position = "bottom", panel.grid = element_blank(), panel.background = element_rect(fill = "#0a0a0a"), plot.background = element_rect(fill = "#0a0a0a")) #プロットへラベルを付与 prettify(FacetLine, label = NULL) ###日の総アクセス数でヒートマップ### #データ準備 HeatPlotData <- TestData %>% group_by(date, month) %>% summarise(SumUsers = sum(users)) %>% ungroup() %>% frame_calendar(x = 1, y = 1, date = date, calendar = "monthly") #ggplot2でデータをプロット HeatPlot <- ggplot(data = HeatPlotData, aes(x = .x, y = .y)) + geom_tile(aes(fill = SumUsers)) + scale_fill_viridis() + theme(legend.position = "bottom", panel.grid = element_blank(), panel.background = element_rect(fill = "#0a0a0a"), plot.background = element_rect(fill = "#0a0a0a")) #プロットへラベルを付与 prettify(HeatPlot, label = NULL) [/code]


出力例

・アクセスの時間推移

・アクセスの時間推移をfacet




・日の総アクセス数でヒートマップ


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

スポンサードリンク

関連コンテンツ


スポンサードリンク