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を入力", 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

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


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

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