本文へスキップ
からだにいいもの

Rのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。

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

時系列データをカレンダー形式にプロットするパッケージの紹介です。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

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

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

スポンサーリンク
Prices and shipping availability may change. Please refer to the product page at time of purchase.
Content displayed on this site is provided by Amazon and may be updated or removed.
Amazon Associate, karada-good earns income through qualifying sales.