本題に入る前に + 記事の概要
「予測: 原理と実践 (第3版)」の第2章にてtsibble
オブジェクトが出てきました。今後重要なオブジェクトなので備忘録を兼ねて掲載してみます。(Qiita初掲載なので大目に見ていただけたら幸いです。)
概要
・Rにおけるオブジェクトの考え方
・tsibble
の意味とその機能
・tibble
との違いtibble
からtsibble
への変換方法
そもそもRにおけるオブジェクトとは?
Rにおけるオブジェクトとは、変数やデータのかたまりを格納する箱に名前を付けたものを指します。
高校数学で、a = 5を代入して、などやったかもしれませんがそれに近いものです。
##オブジェクトaに1+2+3の計算結果を代入し、表示する
a <- 1+2+3
a
##実行結果
6
tsibble
オブジェクトとは?
A.本書では『tidyなデータフレーム (tibbleオブジェクト)に時間軸を導入して拡張したもの』とあります。
時系列データをRで保存するための箱みたいなものだと個人的には理解しています。
もう少し厳密に考えるには、時系列分析について理解する必要があるため、簡単に掲載しておきます。
時系列分析: 時間の経過順に並んだデータ(時系列データ)に基づいてそのデータの変動要因を様々な要素について統計的な手法を用いて分解し、将来の値を予測するもの。
時系列データの具体例として株価の推移や、ある製品の売り上げ推移、マンション地価の推移などがあります。
tibble
とは...?
tibble
を理解するためにまずデータフレームを理解しましょう。
データフレームとは、「①1つの列が1つの変数を表す」、「②1つの行が1つの観測を表す」、「③1つのテーブルが1つのデータセットだけを含む」という3つの定義があります。
データを読み込むときにcsvファイルを用いると思いますが、あれも立派なデータフレームです。
tsibble
の具体例を考えてみよう
下の表は、2018年から2022年にかけて、「かわいい共和国(架空の国)」の「かわいい薬(架空の薬)」の販売個数sales
の推移をまとめたものです。これをtsibble
に変換してみましょう。
Year | Sales |
---|---|
2018 | 138 |
2019 | 127 |
2020 | 85 |
2021 | 93 |
2022 | 104 |
#必要なパッケージのインストール
install.packages("tsibble")
install.packages("dplyr")
#必要なパッケージの読み込み
library(tsibble)
library(dplyr) ##後で使います
#tsibbleに変換
y <- tsibble(
Year = 2018:2022,
Sales = c(138, 127, 85, 93, 104),
index = Year
)
y
#実行結果
# A tsibble: 5 x 2 [1Y]
Year Sales
<int> <dbl>
1 2018 138
2 2019 127
3 2020 85
4 2021 93
5 2022 104
実行結果のようにになりましたね。#A tsibble: 5 x 2 [1Y]
をとあるように、tsibble
への変換そのものはこれでおしまいです。index = Year
とすることで、Year
をインデックス変数に変換して、観測時点Year
と'Sales'を結び付けられるようになります。
tibble
をtsibble
に変換
先ほど同様にかわいい共和国(架空の国)」の「かわいい薬(架空の薬)」の販売個数sales
の時系列データです。先ほどと違うのは、2019年1月から5月までのの月次データである点です。まずは一度tibble
をつくるところまで書いてみましょう。
#tibbleの設定
z <- tibble(
month = c('2019 Jan','2019 Feb','2019 Mar', '2019 Apr','2019 May'),
sales = c(23,26,31,17,38)
)
#zの表示
z
#実行結果
# A tibble: 5 x 2
month sales
<chr> <dbl>
1 2019 Jan 23
2 2019 Feb 26
3 2019 Mar 31
4 2019 Apr 17
5 2019 May 38
これでtibble
の作成は完了です。このデータをtsibble
に変換してみましょう。ただし、dplyr
をインストールし、読み込まないと実行されないので気を付けましょう。
z %>% #パイプ演算子で結合
mutate(Month = yearmonth(month)) %>%
as_tsibble(index = Month)
#実行結果
# A tsibble: 5 x 3 [1M]
month sales Month
<chr> <dbl> <mth>
1 2019 Jan 23 2019 1
2 2019 Feb 26 2019 2
3 2019 Mar 31 2019 3
4 2019 Apr 17 2019 4
5 2019 May 38 2019 5
# A tsibble: 5 x 3 [1M]
とあるように、tibbleをtsibbleに変換することができましたね。
手順は以下のように行っています。
1.yearmonth()
という時間クラス関数を使ってMonth
列を文字から月次時間オブジェクトに変換
2.as_tsibble()
の引数index
にMonth
列を指定して、データフレームをtsibble
に変換
なお、# A tsibble: 5 x 3 [1M]
の[1M]
は月次データであることを表しています。観測頻度に合わせて関数を変更しましょう。次の表は観測頻度ごとに用いる時間クラス関数です。また、mutate()
関数は新たに変数を作るための関数です。
観測頻度 | 用いる時間クラス関数 |
---|---|
年次 | start:end |
四半期 | yearquarter() |
月次 | yearmonth() |
週次 | yearweek() |
日次 |
as_date() , ymd()
|
さらに高頻度 |
as_datetime() , ymd_hms()
|
変換にあたり、パイプ演算子%>%
を用いましたが、これについては別途解説を投稿していきたいと思います。
今回の投稿では、作り方までを掲載しましたが、使い方については次回以降の投稿に掲載しようと考えています。
最後までお読みいただきありがとうございました。
修正
6/6 オブジェクトの定義を修正