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


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

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

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

パッケージバージョンは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)



###他の参考例#####
###アクセスの時間推移を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)

出力例

・アクセスの時間推移

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




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


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

スポンサードリンク

関連コンテンツ


スポンサードリンク