2024.3.27 移動平均【numpy, pandas】
Numpyを用いる方法
畳み込みを行うためのconvolveメソッドを用いて移動平均を計算する。
code:ma01.py
import numpy as np
import matplotlib.pyplot as plt
t = np.linspace(0, 10)
data = np.sin(t) + np.random.rand(len(t))
n = 5 # 移動平均の幅
ma = np.convolve(data, np.ones(n) / n, mode='valid')
plt.plot(data, label='data')
plt.plot(ma, label='moving average')
plt.legend()https://scrapbox.io/files/660382b7050bd200241a0e90.png
plt.grid()
plt.show()
結果
https://scrapbox.io/files/660382b7050bd200241a0e90.png
Pandasを用いる方法
SeriesとDataFrameに格納された時系列データはrollingメソッドを利用することで移動平均を求めることができる。
code:ma02.py
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
t = np.linspace(0, 10, 100)
data1 = np.sin(t) + np.random.rand(len(t))*0.3
data2 = np.sin(2*t+1) + np.random.rand(len(t))*0.2
data3 = np.sin(3*t+2) + np.random.rand(len(t))*0.1
df1 = pd.DataFrame(data)
df1.plot()
df2 = df1.rolling(5).mean()
df2.plot()
plt.grid()
plt.show()
rollingメソッドを適用すると、Rolling型のインスタンスが返される。これにmeanやsumなどの統計処理行うメソッドを呼び出すと、結果が格納されたDataFrameが返される。
処理前
https://scrapbox.io/files/6603c391a6639500233b4d2f.png
結果
https://scrapbox.io/files/6603c39871994e0025b233bc.png