Python で移動平均を計算する方法


移動平均は、時系列データを平滑化してデータ内の「ノイズ」を低減し、パターンや傾向をより簡単に識別するために使用できる手法です。

移動平均の背後にある考え方は、以前の多数の期間の平均を取得して、特定の期間の「移動平均」を算出することです。

このチュートリアルでは、Python で移動平均を計算する方法を説明します。

例: Python での移動平均

特定の会社の 10 期間にわたる総売上高を示す次の表があるとします。

 x = [50, 55, 36, 49, 84, 75, 101, 86, 80, 104]

方法 1:cumsum() 関数を使用します。

移動平均を計算する 1 つの方法は、cumsum() 関数を使用することです。

 import numpy as np

#define moving average function
def moving_avg(x, n):
    cumsum = np.cumsum(np.insert(x, 0, 0)) 
    return (cumsum[n:] - cumsum[:-n]) / float(n)

#calculate moving average using previous 3 time periods
n = 3
moving_avg(x, n):

array([47, 46.67, 56.33, 69.33, 86.67, 87.33, 89, 90])

結果を解釈する方法は次のとおりです。

  • 3 番目の期間の移動平均は 47 です。これは、最初の 3 つの期間の平均として計算されます: (50+55+36)/3 = 47
  • 第 4 期の移動平均は 46.67 です。これは、前の 3 つの期間の平均として計算されます: (55+36+49)/3 = 46.67

等々。

方法 2: パンダを使用します。

移動平均を計算する別の方法は、pandas ベースの関数を作成することです。

 import pandas as pd

#define array to use and number of previous periods to use in calculation
x = [50, 55, 36, 49, 84, 75, 101, 86, 80, 104]
n=3

#calculate moving average
pd.Series(x).rolling(window=n).mean().iloc[n-1:].values

array([47, 46.67, 56.33, 69.33, 86.67, 87.33, 89, 90])

この方法は前の方法とまったく同じ結果を生成しますが、より大きな配列ではより高速に実行される傾向があります。

移動平均の計算に使用する前の期間を任意の数だけ指定することもできることに注意してください。たとえば、n=5 を使用することもできます。

 #use 5 previous periods to calculate moving average
n=5

#calculate moving average
pd.Series(x).rolling(window=n).mean().iloc[n-1:].values

array([54.8, 59.8, 69., 79., 85.2, 89.2])

移動平均の計算に使用する期間が多いほど、移動平均線はより「滑らか」になります。

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です