准备工作
首先,请确保你的环境中已安装NumPy库。如果尚未安装,你可以使用以下pip命令进行安装:
pip install numpy
安装好NumPy库后,我们接下来会学习如何使用它计算移动平均值。
使用NumPy计算移动平均值
移动平均值(Moving Average,简称MA)是一种统计技术,它通过对数据集的不同窗口(子集)内的数据取平均值,生成一系列新的数据点。这种方法经常用于时间序列分析,以平滑数据集,从而更清晰地观察长期趋势,因为短期波动(噪音)可能会使趋势难以识别。
移动平均值(MA)在经济和金融领域的应用十分广泛,它可以帮助我们理解当前趋势、进行预测以及作为信号指标。此外,移动平均技术也被视为一种滞后性指标,因为它是基于历史数据来提供当前状态的信息的。
简单移动平均值(SMA)
我们首先使用NumPy计算简单移动平均值(Simple Moving Average,SMA)。之所以被称为“简单”,是因为它只对数据集中指定窗口内的数据进行平均计算,得到一个数据点。
例如,假设我们有10个数据点,我们想以窗口大小为5来计算SMA,可以使用以下代码实现:
import numpy as np
data = np.array([10, 15, 10, 30, 20, 45, 70, 50, 40, 60])
window_size = 5
weights = np.ones(window_size) / window_size
sma = np.convolve(data, weights, mode='valid')
输出结果如下:
[17. 24. 35. 43. 45. 53.]
如上所示,我们成功地获得了窗口大小为5的数据移动平均值。
累积移动平均值(CMA)
另一种移动平均技术是累积移动平均值(Cumulative Moving Average,CMA)。CMA会针对数据集中每个位置,计算从第一个数据点到当前位置所有数据的平均值(包括当前位置本身)。
以下是使用NumPy计算CMA的代码:
data = np.array([10, 15, 10, 30, 20, 45, 70, 50, 40, 60])
cma = np.cumsum(data) / np.arange(1, len(data) + 1)
cma
输出结果:
array([10. , 12.5 , 11.66666667, 16.25 , 17. ,
21.66666667, 28.57142857, 31.2 , 32.22222222, 35. ])
指数移动平均值(EMA)
此外,还有一种名为指数移动平均值(Exponential Moving Average,EMA)的技术。这种方法在计算时加入了权重,更强调最近的数据点。与SMA相比,EMA对近期数据的变动更为敏感,能够更有效地反映数据的最新趋势。这种权重的影响程度由参数alpha来表示。
接下来我们尝试使用NumPy来实现EMA:
data = np.array([10, 15, 10, 30, 20, 45, 70, 50, 40, 60])
def exponential_moving_average(data, alpha):
ema = np.zeros_like(data)
ema[0] = data[0]
for i in range(1, len(data)):
ema[i] = alpha * data[i] + (1 - alpha) * ema[i - 1]
return ema
ema = exponential_moving_average(data, 0.5)
输出结果:
array([10, 12, 11, 20, 20, 32, 51, 50, 45, 52])
小结
以上就是使用NumPy库来计算各种移动平均值(SMA、CMA、EMA)的基本实现方法。掌握这些技巧,可以让你的时间序列分析变得更加轻松和高效。