PythonのPandasの移動平均を算出する方法

Python,イメージ

AI実装検定のご案内

Pandasで移動平均(Moving Average)を算出する方法について、基礎から応用まで詳しく解説します。

セクションごとにコード例を用意しますので、そのまま実行できます。

目次

移動平均とは?

移動平均(Moving Average)は、一定期間のデータを平均化することで、データの変動を滑らかにし、トレンドを把握しやすくする手法です。

株価や時系列データの分析によく使われます。

基本的な移動平均の計算

Pandasでは rolling()mean() を組み合わせて簡単に移動平均を求められます。

import pandas as pd

# サンプルデータ作成
data = {'value': [10, 20, 30, 40, 50, 60, 70]}
df = pd.DataFrame(data)

# 窓幅3の単純移動平均
df['SMA_3'] = df['value'].rolling(window=3).mean()

print(df)

window=3 は「直近3つのデータの平均」を意味します。

出力例では最初の2行は NaN になります(3つ揃わないと平均が計算できないため)。

中心化された移動平均(center=True)

通常は「直近のデータ」を基準に平均しますが、center=True を指定すると、前後のデータを含めた中心化移動平均が計算できます。

df['SMA_3_center'] = df['value'].rolling(window=3, center=True).mean()
print(df)

時系列データを滑らかにする際に便利です。

指数移動平均(Exponential Moving Average, EMA)

過去のデータより直近のデータを重視したい場合は、ewm() を使います。

# 平滑化係数: span=3
df['EMA_3'] = df['value'].ewm(span=3, adjust=False).mean()
print(df)

span が小さいほど直近の値に敏感に反応します。

株価分析でよく使われます。

欠損値の扱い(min_periods)

rolling() ではデフォルトで「window数が揃わないとNaN」になりますが、min_periods を指定すれば計算できるようになります。

# 窓幅3、最小1データから計算
df['SMA_3_min1'] = df['value'].rolling(window=3, min_periods=1).mean()
print(df)

最初から平均値が計算されるようになり、分析の途切れが減ります。

応用:複数の移動平均を計算して比較

株価や売上データの傾向を把握する際に、短期・中期・長期の移動平均を一度に計算します。

# サンプルデータ(日ごとの売上などを想定)
import numpy as np
df = pd.DataFrame({'value': np.random.randint(50, 150, 30)})

# 短期・中期・長期の移動平均
df['SMA_3'] = df['value'].rolling(window=3).mean()
df['SMA_7'] = df['value'].rolling(window=7).mean()
df['SMA_14'] = df['value'].rolling(window=14).mean()

print(df)

可視化すればトレンドがより見やすくなります。

可視化例(matplotlib)

移動平均はグラフと組み合わせると効果的です。

import matplotlib.pyplot as plt

plt.figure(figsize=(10,6))
plt.plot(df['value'], label='Original Data')
plt.plot(df['SMA_3'], label='SMA 3')
plt.plot(df['SMA_7'], label='SMA 7')
plt.plot(df['SMA_14'], label='SMA 14')
plt.legend()
plt.show()

折れ線グラフで表示すると、短期の移動平均は細かく追随し、長期の移動平均は大きなトレンドを示すことがわかります。

まとめ

  • 基本: rolling().mean() で単純移動平均(SMA)が計算可能
  • 中心化: center=True で前後対称の移動平均
  • 指数移動平均: ewm() で直近のデータを重視
  • 欠損値対策: min_periods で柔軟に計算
  • 応用: 複数の移動平均を組み合わせてトレンドを分析

以上、PythonのPandasの移動平均を算出する方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次