データ分析
2024/05/28
古川 直輝

時系列データにおける移動平均を使うメリットとは

logo_Python

移動平均は株価や天気などの時間で細かく変化する時系列データの全体の傾向をつかみたいときに使用します。

はじめに

今回は移動平均についてまとめました。移動平均は主に時系列データを扱う時に使用します。

移動平均とは

株価や気温などの時系列データは時間で細かく変化するため、全体の傾向を掴みにくい場合があります。そのようなときには「移動平均」を用いることで、変化をより滑らかにしてデータを俯瞰できます。

どのように使用するか

今回はpandas-datareaderを使用します。


Web上の様々なソースにアクセスできるPythonライブラリの1つです。既存のPython環境にPandasが入っていれば使えるわけではないのでインストールが必要です。



pip install pandas_datareader


必要なライブラリをインポートします。



import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import pandas_datareader.data as web
import datetime as dt


今回はFRED(St.Louis Fed)を使用します。


これは、ビットコインの米ドルに対する価格のデータです。



start = dt.date(2017,1,1)
end = dt.date(2023,1,1)
code = "CBBTCUSD"

df = web.DataReader(code,"fred",start,end)


データの長さと欠損値の数を確認します。



print(f"data length:{len(df)}")
print(f"\n{df.isnull().sum()}"


data_length:2192


 


CBBTCUSD     1


 


今回のデータでは欠損値が1つしかないので欠損値がある行を削除します。



df = df.dropna(axis = 0)


dfを可視化します。



plt.figure(figsize = (10,5))
sns.lineplot(
x = "DATE",
y = "CBBTCUSD",
data = df
)



データの量が多く、年度によって値が細かく変わっているので、全体の流れがつかみにくいです。


ここで便利なのが「移動平均」です。多くの場合の移動平均はデータ長の10%の値に設定する場合が多いです。windowにデータ長の10%の値を指定します。引数min_periodsに整数値を指定すると、その値の個数のデータが含まれていれば結果が算出されます。


 



df["10%MA"] = df["CBBTCUSD"].rolling(window = 219,min_periods = 0).mean()


移動平均も含めたグラフを出力します。



plt.figure(figsize = (10,5))
for col in df.columns:
graph = sns.lineplot(
x = "DATE",
y = col,
data = df,
label = col
)
plt.legend(loc = "upper left")



移動平均があることによって、全体の傾向がつかみやすく、より分かりやすいグラフになったかと思います。

まとめ

今回は移動平均についてまとめました。


移動平均によって、変化が激しい時系列データでも全体の傾向をつかむことができるので、そのようなデータに遭遇した際には使ってみると良いかもしれません。

New call-to-action