時系列データをカレンダー形式にプロットするパッケージの紹介です。ggplot2パッケージのコマンドが適応できるので便利だと思います。
「googleAnalyticsR」パッケージでGoogleAnalyticsから「からだにいいもの」のアクセスデータを取得しデータ例として使用しています。
パッケージバージョンは0.2.8。windows 10のR version 3.4.2で動作を確認しています。
パッケージのインストール
下記コマンドを実行してください。
#パッケージのインストール install.packages("sugrrants")
実行コマンド
詳細はコマンド、パッケージのヘルプを確認してください。
#パッケージの読み込み library("sugrrants") ###データ例の作成##### #tidyverseパッケージがなければインストール if(!require("tidyverse", quietly = TRUE)){ install.packages("tidyverse");require("tidyverse") } #viridisパッケージがなければインストール if(!require("viridis", quietly = TRUE)){ install.packages("viridis");require("viridis") } #googleAnalyticsRパッケージでGoogleAnalyticsデータを取得 if(!require("googleAnalyticsR", quietly = TRUE)){ install.packages("googleAnalyticsR");require("googleAnalyticsR") } #ログイン ga_auth() #viewIdの確認 ga_account_list() #データの取得 TestData <- tibble(google_analytics(viewId = "viewIdを入力", max = 3000, date_range = c("2021-10-01", "2021-12-31"), metrics = c("users", "sessions", "pageviews"), dimensions = c("dateHour", "date", "month", "dayOfWeekName", "hour", "deviceCategory"))) #データの確認 TestData # A tibble: 2,720 x 9 dateHour date month dayOfWeekName hour deviceCategory users sessions pageviews <chr> <date> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl> 1 2021100100 2021-10-01 10 Friday 00 desktop 4 4 4 2 2021100101 2021-10-01 10 Friday 01 desktop 5 5 5 3 2021100103 2021-10-01 10 Friday 03 desktop 2 2 2 4 2021100105 2021-10-01 10 Friday 05 desktop 2 2 3 5 2021100106 2021-10-01 10 Friday 06 desktop 2 2 2 6 2021100107 2021-10-01 10 Friday 07 desktop 3 3 3 7 2021100108 2021-10-01 10 Friday 08 desktop 10 11 13 8 2021100109 2021-10-01 10 Friday 09 desktop 16 16 19 9 2021100110 2021-10-01 10 Friday 10 desktop 20 20 24 10 2021100111 2021-10-01 10 Friday 11 desktop 13 13 13 # ... with 2,710 more rows ######## #プロットデータの事前準備: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()) #プロットへラベルを付与:prettifyコマンド prettify(PlotLine, size = 3, label.padding = unit(0.25, "lines")) ###他の参考例##### ###アクセスの時間推移を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()) #プロットへラベルを付与 prettify(FacetLine, size = 3) ###日の総アクセス数でヒートマップ### #データ準備 HeatPlotData <- TestData %>% group_by(date, month) %>% summarise(SumUsers = sum(users)) %>% ungroup() %>% frame_calendar(x = 1, y = 1, date = date, calendar = "monthly") #x軸のラベル位置を調整 HeatPlotData$.x <- HeatPlotData$.x + 0.025 HeatPlotData$.y <- HeatPlotData$.y + 0.08 #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()) #X軸へラベルを付与 prettify(HeatPlot, label = "text")
出力例
・アクセスの時間推移
・アクセスの時間推移をfacet
・日の総アクセス数でヒートマップ
少しでも、あなたの解析が楽になりますように!!