Rで解析:時系列データのプロットに便利「timelineR」パッケージ

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

時系列データの数値データ、カテゴリデータを同時にプロット可能なパッケージの紹介です。コマンドも大変簡単ですぐに利用することができると思います。実行コマンドを順番に進めていくと出力例以外のプロットを得ることができます。ぜひ試してみてください。

パッケージバージョンは1.0.0。実行コマンドはwindows 11のR version 4.1.3で確認しています。

スポンサーリンク

パッケージのインストール

下記、コマンドを実行してください。

#パッケージのインストール
install.packages("timelineR")

実行コマンド

詳細はコメント、パッケージのヘルプを確認してください。

#パッケージの読み込み
library("timelineR")

###データ例の作成#####
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}
#日付データの作成に便利:lubridateパッケージがなければインストール
if(!require("lubridate", quietly = TRUE)){
  install.packages("lubridate");require("lubridate")
}
set.seed(1234)
#lubridate::ymd;locale="C", tz="Asia/Tokyo"を設定するのがポイント
TestData <- tibble(Date = seq(lubridate::ymd("2021-01-01", locale = "C",
                                             tz = "Asia/Tokyo"),
                              lubridate::ymd("2022-03-24", locale = "C",
                                             tz = "Asia/Tokyo"),
                              by = "1 day")) %>%
  mutate(Data_1 = sample(c(1:30), length(Date), replace = TRUE),
         Data_2 = sample(c(1:30), length(Date), replace = TRUE),
         Char_Data = sample(c("A", "B", "NO"), length(Date), replace = TRUE),
         #Date&#12434;&#22522;&#28310;&#12395;&#26332;&#26085;&#12434;&#20837;&#25163;:wday&#12467;&#12510;&#12531;&#12489;
         #&#22580;&#21512;&#12395;&#12424;&#12387;&#12390;&#12399;&#36861;&#21152;&#12377;&#12427;:locale = "Japanese_Japan.932"
         Day_Type = lubridate::wday(Date, label = TRUE,
                                    abbr = FALSE)) %>%
  #&#22303;&#26332;&#26085;,&#26085;&#26332;&#26085;&#12434;WEEKEND,&#12381;&#12398;&#20182;&#12434;WEEKDAY&#12395;&#22793;&#25563;
  mutate(Day_Type = if_else((Day_Type == "&#22303;&#26332;&#26085;"| Day_Type == "&#26085;&#26332;&#26085;"),
                            "WEEKEND", "WEEKDAY"))
########

#&#26178;&#31995;&#21015;&#12487;&#12540;&#12479;&#12434;&#12503;&#12525;&#12483;&#12488;:plot_timeline&#12467;&#12510;&#12531;&#12489;
##&#12381;&#12398;&#12414;&#12414;&#12503;&#12525;&#12483;&#12488;
plot_timeline(timeline_df = TestData)

##&#21015;&#12434;&#25351;&#23450;&#12375;&#12390;&#12503;&#12525;&#12483;&#12488;:data_cols&#12458;&#12503;&#12471;&#12519;&#12531;
#&#38918;&#30058;&#12398;&#20837;&#12428;&#26367;&#12360;&#12418;&#21487;&#33021;
plot_timeline(timeline_df = TestData,
              data_cols = c("Data_1", "Day_Type", "Char_Data"))

##&#12503;&#12525;&#12483;&#12488;&#38283;&#22987;&#26085;,&#32066;&#20102;&#26085;&#12434;&#25351;&#23450;:start_time/end_time&#12458;&#12503;&#12471;&#12519;&#12531;
#POSIXct class&#12391;&#25351;&#23450;&#12375;&#12414;&#12377;
plot_timeline(timeline_df = TestData,
              data_cols = c("Data_1", "Day_Type", "Char_Data"),
              start_time = as.POSIXct("2021-12-01"),
              end_time = as.POSIXct("2022-01-20"))

##&#21508;&#12464;&#12521;&#12501;&#12479;&#12452;&#12488;&#12523;&#12434;&#22793;&#26356;:titles&#12458;&#12503;&#12471;&#12519;&#12531;
plot_timeline(timeline_df = TestData,
              data_cols = c("Data_1", "Day_Type", "Char_Data"),
              start_time = as.POSIXct("2021-12-01"),
              end_time = as.POSIXct("2022-01-20"),
              titles = c("Data_1" = "X_1", "Day_Type"= "X_2",
                         "Char_Data"= "X_3"))

##y&#36600;&#12521;&#12505;&#12523;&#12434;&#22793;&#26356;:ylabels&#12458;&#12503;&#12471;&#12519;&#12531;
plot_timeline(timeline_df = TestData,
              data_cols = c("Data_1", "Day_Type", "Char_Data"),
              start_time = as.POSIXct("2021-12-01"),
              end_time = as.POSIXct("2022-01-20"),
              titles = c("Data_1" = "X_1", "Day_Type"= "X_2",
                         "Char_Data"= "X_3"),
              ylabels = c("Data_1" = "Change_1", "Day_Type" = "Change_2",
                          "Char_Data" = "Change_3"))

##&#12487;&#12540;&#12479;&#12398;&#27604;&#29575;&#12434;&#22793;&#26356;:scale_vals&#12458;&#12503;&#12471;&#12519;&#12531;
#c(&#21015;&#21517; = &#27604;&#29575;)&#12391;&#25351;&#23450;,&#20363;&#12391;&#12399;"Data_1"&#12434;1/10&#12395;&#22793;&#26356;
plot_timeline(timeline_df = TestData,
              data_cols = c("Data_1", "Day_Type", "Char_Data"),
              start_time = as.POSIXct("2021-12-01"),
              end_time = as.POSIXct("2022-01-20"),
              titles = c("Data_1" = "X_1", "Day_Type"= "X_2",
                         "Char_Data"= "X_3"),
              ylabels = c("Data_1" = "Change_1", "Day_Type" = "Change_2",
                          "Char_Data" = "Change_3"),
              scale_vals = c("Data_1" = 0.1))

#&#12459;&#12486;&#12468;&#12522;&#12487;&#12540;&#12479;&#12398;&#33394;&#12434;&#22793;&#26356;:color_mapping&#12458;&#12503;&#12471;&#12519;&#12531;
#list(&#21015;&#21517; = c(&#20869;&#23481;))&#12391;&#25351;&#23450;
plot_timeline(timeline_df = TestData,
              data_cols = c("Data_1", "Day_Type", "Char_Data"),
              start_time = as.POSIXct("2021-12-01"),
              end_time = as.POSIXct("2022-01-20"),
              titles = c("Data_1" = "X_1", "Day_Type"= "X_2",
                         "Char_Data"= "X_3"),
              ylabels = c("Data_1" = "Change_1", "Day_Type" = "Change_2",
                          "Char_Data" = "Change_3"),
              scale_vals = c("Data_1" = 0.1),
              color_mapping = list("Char_Data" = c("A" = "#4b61ba",
                                                   "B" = "#ad8a80",
                                                   "NO" = "black")))

#&#25968;&#23383;&#12487;&#12540;&#12479;&#12398;&#12503;&#12525;&#12483;&#12488;&#26041;&#24335;&#12434;&#25351;&#23450;:numeric_plot_type&#12458;&#12503;&#12471;&#12519;&#12531;
#"line","step","point"&#12398;&#25351;&#23450;&#12364;&#21487;&#33021;
plot_timeline(timeline_df = TestData,
              data_cols = c("Data_1", "Day_Type", "Char_Data"),
              start_time = as.POSIXct("2021-12-01"),
              end_time = as.POSIXct("2022-01-20"),
              titles = c("Data_1" = "X_1", "Day_Type"= "X_2",
                         "Char_Data"= "X_3"),
              ylabels = c("Data_1" = "Change_1", "Day_Type" = "Change_2",
                          "Char_Data" = "Change_3"),
              scale_vals = c("Data_1" = 0.1),
              color_mapping = list("Char_Data" = c("A" = "#4b61ba",
                                                   "B" = "#ad8a80",
                                                   "NO" = "black")),
              numeric_plot_type = "step")

#&#12503;&#12525;&#12483;&#12488;&#12398;&#37325;&#12397;&#26360;&#12365;:overlap_plots_names&#12458;&#12503;&#12471;&#12519;&#12531;
#list("&#26032;&#35215;&#12503;&#12525;&#12483;&#12488;&#21517;" = c("&#12459;&#12486;&#12468;&#12522;&#12487;&#12540;&#12479;", "&#25968;&#20516;&#12487;&#12540;&#12479;"))&#12391;&#25351;&#23450;&#12377;&#12427;
plot_timeline(timeline_df = TestData,
              data_cols = c("Data_1", "Day_Type", "Char_Data"),
              start_time = as.POSIXct("2021-12-01"),
              end_time = as.POSIXct("2022-01-20"),
              titles = c("Data_1" = "X_1", "Day_Type"= "X_2",
                         "Char_Data"= "X_3"),
              ylabels = c("Data_1" = "Change_1", "Day_Type" = "Change_2",
                          "Char_Data" = "Change_3"),
              scale_vals = c("Data_1" = 0.1),
              color_mapping = list("Char_Data" = c("A" = "#4b61ba",
                                                   "B" = "#ad8a80",
                                                   "NO" = "black")),
              numeric_plot_type = "step",
              overlap_plots_names = list("Data_1_Day_Type" = c("Day_Type",
                                                               "Data_1")))

#&#12503;&#12525;&#12483;&#12488;&#12434;&#20316;&#26989;&#12501;&#12457;&#12523;&#12480;&#12395;PNG&#12391;&#20445;&#23384;:save_path&#12458;&#12503;&#12471;&#12519;&#12531;
#RStudio&#12434;&#21033;&#29992;&#12375;&#20445;&#23384;&#12377;&#12427;&#12364;&#20415;&#21033;&#12391;&#12377;
plot_timeline(timeline_df = TestData,
              data_cols = c("Data_1", "Day_Type", "Char_Data"),
              start_time = as.POSIXct("2021-12-01"),
              end_time = as.POSIXct("2022-01-20"),
              titles = c("Data_1" = "X_1", "Day_Type"= "X_2",
                         "Char_Data"= "X_3"),
              ylabels = c("Data_1" = "Change_1", "Day_Type" = "Change_2",
                          "Char_Data" = "Change_3"),
              scale_vals = c("Data_1" = 0.1),
              color_mapping = list("Char_Data" = c("A" = "#4b61ba",
                                                   "B" = "#ad8a80",
                                                   "NO" = "black")),
              numeric_plot_type = "step",
              overlap_plots_names = list("Data_1_Day_Type" = c("Day_Type",
                                                               "Data_1")),
              save_path = "Test.png")

出力例

・そのままプロット

・カテゴリデータの色を変更:color_mappingオプション

・プロットの重ね書き:overlap_plots_namesオプション


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

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