pandasで時系列データの自己相関係数算出

時系列データとそれをn時間分シフトさせたデータ間の相関係数を自己相関係数と呼びます。
データに周期性があるかどうかを確認するときなどに調査します。

単に配列をスライドさせてnumpyか何かで相関係数を出してもいいのですが、
pandasに専用の関数が定義されているのでそれを使っても止めることもできます。

pandas.Series.autocorr

試しにやってみましょう。


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

# 7点ごとに周期性のあるデータを準備
series = pd.Series([5, 4, 5, 6, 5, 3, 1]*10)
# 乱数追加
series += np.random.randn(70) * 0.5

# lag=0から29までの自己相関係数
auto_series = [series.autocorr(lag=i) for i in range(30)]

# 可視化
fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(2, 1, 1, title="周期性のあるデータ")
ax.plot(series.index, series)
ax = fig.add_subplot(2, 1, 2, title="自己相関係数")
ax.bar(range(30), auto_series)
plt.show()

出力されるグラフがこちら。

7点間隔の周期が綺麗に現れているのがわかります。