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

Rの解析に役に立つ記事
スポンサーリンク

時系列データをカレンダー形式にプロットするパッケージの紹介です。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&#12434;&#20837;&#21147;", max = 3000,
                                    date_range = c("2021-10-01", "2021-12-31"),
                                    metrics = c("users", "sessions", "pageviews"),
                                    dimensions = c("dateHour", "date", "month",
                                                   "dayOfWeekName", "hour",
                                                   "deviceCategory")))


#&#12487;&#12540;&#12479;&#12398;&#30906;&#35469;
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
########

#&#12503;&#12525;&#12483;&#12488;&#12487;&#12540;&#12479;&#12398;&#20107;&#21069;&#28310;&#20633;:frame_calendar&#12467;&#12510;&#12531;&#12489;
PlotData <- TestData %>%
  frame_calendar(x = hour, y = users, date = date, calendar = "monthly")

#ggplot2&#12391;&#12487;&#12540;&#12479;&#12434;&#12503;&#12525;&#12483;&#12488;:&#12450;&#12463;&#12475;&#12473;&#12398;&#26178;&#38291;&#25512;&#31227;
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())

#&#12503;&#12525;&#12483;&#12488;&#12408;&#12521;&#12505;&#12523;&#12434;&#20184;&#19982;:prettify&#12467;&#12510;&#12531;&#12489;
prettify(PlotLine, size = 3,
         label.padding = unit(0.25, "lines"))

###&#20182;&#12398;&#21442;&#32771;&#20363;#####
###&#12450;&#12463;&#12475;&#12473;&#12398;&#26178;&#38291;&#25512;&#31227;&#12434;facet###
#&#12487;&#12540;&#12479;&#28310;&#20633;
FacetData <- filter(PlotData, deviceCategory != "tablet") %>%
  frame_calendar(x = hour, y = users,
                 date = date, calendar = "monthly")

#&#12503;&#12525;&#12483;&#12488;
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())

#&#12503;&#12525;&#12483;&#12488;&#12408;&#12521;&#12505;&#12523;&#12434;&#20184;&#19982;
prettify(FacetLine, size = 3)

###&#26085;&#12398;&#32207;&#12450;&#12463;&#12475;&#12473;&#25968;&#12391;&#12498;&#12540;&#12488;&#12510;&#12483;&#12503;###
#&#12487;&#12540;&#12479;&#28310;&#20633;
HeatPlotData <- TestData %>%
  group_by(date, month) %>%
  summarise(SumUsers = sum(users)) %>%
  ungroup() %>%
  frame_calendar(x = 1, y = 1,
                 date = date, calendar = "monthly")

#x&#36600;&#12398;&#12521;&#12505;&#12523;&#20301;&#32622;&#12434;&#35519;&#25972;
HeatPlotData$.x <- HeatPlotData$.x + 0.025
HeatPlotData$.y <- HeatPlotData$.y + 0.08

#ggplot2&#12391;&#12487;&#12540;&#12479;&#12434;&#12503;&#12525;&#12483;&#12488;
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&#36600;&#12408;&#12521;&#12505;&#12523;&#12434;&#20184;&#19982;
prettify(HeatPlot, label = "text")

出力例

・アクセスの時間推移

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

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


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

タイトルとURLをコピーしました