【python】多変量時系列の部分時系列(sliding window)を実装する

Posted: , Category: 時系列分析 , 機械学習

時系列分析を実務で行う際に、ほとんどのパターンでは、多変量を対象とした時系列の解析をすることが多いと思います。

自分自身、多変量時系列の解析を行う場面が非常に多くあるため、多変量の時系列データセットから部分時系列を作成する方法をまとめていきます。

切り出す部分時系列の設定

まず最初に全体のデータセットの全部の時系列が$T$個で$N$変数の時系列データを考えます。

ここで、window 幅 $w$で切り出すことを考えます。

全体のデータセットのうち、部分時系列は図上の枠で囲った箇所です。

最終的には、ウィンドウ幅$w$のsliding windowで区切った、多変量時系列は、3次元テンソル (3D Tensor)になり、テンソルの形式としては、(T-w+1, w, N) のテンソルとなります。

pythonで多変量時系列の部分時系列を切り出す

先ほどまでが前座です。ここからはpythonを用いて実際に部分時系列を取り出す実装をまとめていきます。

今回はサンプルのデータセットとして気象庁のデータセットを利用します。データセットの解説は下記の記事をご覧ください。

【Python】時系列分析で使えるデータセットまとめ(単変量・多変量)
時系列分析、やっていますでしょうか?時系列分析のテーマは幅広く、時系列予測や異常検知、因果推論など興味深いテーマが多数ありますよね。 今回は、時系列分析で利用できるデータセットを紹介します。特定のアルゴリズムを試すのに、 […]

まずデータセットをダウンロードします。

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt

df = pd.read_csv("https://raw.githubusercontent.com/aweglteo/tokyo_weather_data/main/data.csv", parse_dates=True, index_col=0)

続いてデータをスライディングウィンドウで切り取っていきます。今回はwindow_sizeは20でやってみます。

window_size = 20
n_data = len(df) - window_size + 1
n_dim = df.shape[1]

data = np.zeros((n_data,  window_size, n_dim))

for i in range(n_data):
    data[i] = df[i:i+window_size]

データの形を確認してみます。狙い通りの形になることがわかりました。

data.shape
# => (1808, 20, 6)

【広告】
統計学的にあなたの悩みを解決します。
仕事やプライベートでお悩みの方は、ベテラン占い師 蓮若菜にご相談ください。

機械学習と情報技術