如何用 python 计算移动平均线
移动平均线是一种可用于平滑时间序列数据以减少数据中的“噪声”并更容易识别模式和趋势的技术。
移动平均线背后的想法是取之前多个时期的平均值来得出给定时期的“移动平均线”。
本教程介绍如何在 Python 中计算移动平均线。
示例:Python 中的移动平均线
假设我们有下表显示某公司在 10 个时期内的总销售额:
x = [50, 55, 36, 49, 84, 75, 101, 86, 80, 104]
方法1:使用cumsum()函数。
计算移动平均值的一种方法是使用 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])
以下是如何解释结果:
- 第三期的移动平均线为 47。计算方法为前三个期的平均值:(50+55+36)/3 = 47 。
- 第四周期的移动平均线为46.67。计算方法为前三个时期的平均值: (55+36+49)/3 = 46.67 。
等等。
方法2:使用pandas。
计算移动平均值的另一种方法是编写一个基于 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])
用于计算移动平均线的周期越多,移动平均线就越“平滑”。