R - 時系列分析:初めてのガイド
こんにちは、未来のデータ魔术師たち!Rを使った時系列分析の興奮する旅にあなたを連れて行くことができてとても嬉しいです。私がコンピュータサイエンスを教えてきた年数は、正直に言うと自分も驚くほど多いですが(フロッピーディスクが本当にフロッピーだった時代を覚えています)、数多くの学生が完全な初心者から自信のあるアナリストに変わっていくのを見てきました。ですから、プログラミングが初めてであっても心配しないでください。私たちは基礎から一緒に進んでいきます。
時系列分析とは?
Rのコードに進む前に、まず時系列分析とは何かについて話しましょう。例えば、あなたの地元のアイスクリーム屋で1年間毎日アイスクリームの cone の売り上げを追跡するとします。それが時系列です!それは単に時間とともに測定されたデータのシーケンスです。時系列分析は、この歴史的データに基づいてパターンやトレンドを理解し、予測を立てる手助けをしてくれます。
では、Rコードで手を汚しましょう!
Rを始める
まず最初に、RとRStudioをインストールする必要があります。Rをエンジンと考え、RStudioをそれを簡単に運転するためのカッコよいダッシュボードと考えます。インストールが完了したら、RStudioを開き、始めましょう!
# これはRのコメントです。コードには影響を与えませんが、私たち人間が理解するのを助けます!
# シンプルな時系列を作成しましょう
sales <- c(100, 120, 140, 160, 180)
dates <- as.Date(c("2023-01-01", "2023-01-02", "2023-01-03", "2023-01-04", "2023-01-05"))
# それらを時系列オブジェクトに結合しましょう
ts_data <- ts(sales, start = c(2023, 1), frequency = 365)
# 作成したものを見てみましょう
print(ts_data)
この例では、非常にシンプルな日々の売り上げデータの時系列を作成しています。c()
関数は値のベクトル(リストのようなもの)を作成するために使用され、ts()
関数は時系列オブジェクトを作成するために使用されます。どいつも、開始日と測定の頻度を指定します。
異なる時間間隔
では、異なる時間間隔について話しましょう。時系列データは日ごと、月ごと、四半期ごと、または他のどんな間隔でも構いません。Rはこれらすべてを処理するのに柔軟です。以下にいくつかの例を見てみましょう:
# 月次データ
monthly_data <- ts(1:24, start = c(2022, 1), frequency = 12)
# 四半期データ
quarterly_data <- ts(1:8, start = c(2022, 1), frequency = 4)
# 年次データ
yearly_data <- ts(1:10, start = 2013)
# それらを表示しましょう
print(monthly_data)
print(quarterly_data)
print(yearly_data)
これらの例では、異なる頻度の時系列を作成しています。月次データではfrequency = 12
(1年間の12ヶ月)、四半期データではfrequency = 4
(1年間の4四半期)、年次データでは頻度を指定する必要はありません。
時系列の可視化
「写真は千の言葉に値する」と言いますが、データ分析ではこれがさらに真実です。時系列を可視化しましょう:
# まず、もっと興味深いデータセットを作成しましょう
set.seed(123) # これは同じ「ランダム」な数字を得るために使用されます
sales <- 100 + cumsum(rnorm(100)) # ランダムな数の累積和
dates <- seq(as.Date("2023-01-01"), by = "day", length.out = 100)
ts_data <- ts(sales, start = c(2023, 1), frequency = 365)
# それをプロットしましょう
plot(ts_data, main = "Daily Sales", xlab = "Date", ylab = "Sales")
このコードは、多少のランダム性を持つより現実的な売り上げデータセットを作成し、それをプロットします。plot()
関数は、時系列を簡単に可視化する方法です。
複数の時系列
現実の世界では、複数の時系列を一緒に分析することがよくあります。複数のシリーズを作成し、可視化しましょう:
# 2つの時系列を作成します
set.seed(123)
sales_A <- 100 + cumsum(rnorm(100))
sales_B <- 120 + cumsum(rnorm(100))
# それらを複数の時系列に結合します
multi_ts <- ts(cbind(sales_A, sales_B), start = c(2023, 1), frequency = 365)
# 両方のシリーズをプロットします
plot(multi_ts, main = "Sales Comparison", xlab = "Date", ylab = "Sales", col = c("blue", "red"))
legend("topleft", legend = c("Product A", "Product B"), col = c("blue", "red"), lty = 1)
ここでは、2つのシリーズを作成し、cbind()
を使って結合しています。そして、違う色を使って区別してプロットしています。
時系列分析の一般的な方法
基本をカバーしたので、時系列分析でよく使われるいくつかの方法を見てみましょう。以下にこれらの方法の表を示します:
方法 | 説明 | R関数 |
---|---|---|
移動平均 | 短期の変動を平滑化 |
ma() からforecast パッケージ |
指数平滑 | 最近の観測に重みを置く |
ets() からforecast パッケージ |
ARIMA | 自回归積分移動平均 |
arima() またはauto.arima()
|
分解 | シリーズをトレンド、季節、残差の成分に分解 |
decompose() またはstl()
|
これらの方法のうち一つを試してみましょう - 分解:
# 時系列を分解します
decomposed <- decompose(ts_data)
# 分解をプロットします
plot(decomposed)
この分解は、私たちの時系列をトレンド、季節、ランダムの3つの成分に分けます。これはデータの潜在的なパターンを理解するのに非常に役立ちます。
結論
おめでとうございます!Rを使った時系列分析の興味深い世界の最初のステップを踏み出しました。私たちは、時系列データの作成、可視化、分析の基本をカバーしました。覚える新しいスキルは、練習が成功の鍵です。異なるデータセットや方法を試してみることを恐れずに。
私が教えてきた年間、問題に好奇心と忍耐力を持って取り組む学生は優秀な成績を収めることが多いと感じています。ですから、探求を続け、質問を続け、最も重要なのは、コーディングを続けましょう!
Credits: Image by storyset