Python 中 NumPy 数组的滑动平均值
滑动平均值通常用于通过计算特定时间间隔的数据平均值来研究时间序列数据。它用于消除一些短期波动并研究数据趋势。在研究股价趋势时,简单滑动平均线被大量使用。
加权滑动平均线比旧数据更着重于最新数据。
下图将更好地了解滑动平均线。
在本教程中,我们将讨论如何在 Python 中为 numpy 数组实现滑动平均。
使用 numpy.convolve
方法来计算 NumPy 数组的滑动平均值
convolve()
函数用于信号处理,可以返回两个数组的线性卷积。每个步骤要做的是取一个数组与当前窗口之间的内积并取它们的总和。
以下代码在用户定义的函数中实现了此函数。
import numpy as np
def moving_average(x, w):
return np.convolve(x, np.ones(w), "valid") / w
data = np.array([10, 5, 8, 9, 15, 22, 26, 11, 15, 16, 18, 7])
print(moving_average(data, 4))
输出:
[ 8. 9.25 13.5 18. 18.5 18.5 17. 15. 14. ]
使用 scipy.convolve
方法来计算 NumPy 数组的滑动平均值
我们也可以以同样的方式使用 scipy.convolve()
函数。假设它快一点。使用 numpy 模块计算滑动平均值的另一种方法是使用 cumsum()
函数。它计算数组的累加和。这是一种非常简单的非加权方法,用于计算滑动平均线。
以下代码使用此函数返回滑动平均线。
def moving_average(a, n):
ret = np.cumsum(a, dtype=float)
ret[n:] = ret[n:] - ret[:-n]
return ret[n - 1 :] / n
data = np.array([10, 5, 8, 9, 15, 22, 26, 11, 15, 16, 18, 7])
print(moving_average(data, 4))
输出:
[ 8. 9.25 13.5 18. 18.5 18.5 17. 15. 14. ]
使用 bottleneck
模块计算滑动平均值
bottleneck
模块是快速的 numpy 方法的编译。该模块具有 move_mean()
函数,该函数可以返回某些数据的滑动平均值。
例如,
import bottleneck as bn
import numpy as np
def rollavg_bottlneck(a, n):
return bn.move_mean(a, window=n, min_count=None)
data = np.array([10, 5, 8, 9, 15, 22, 26, 11, 15, 16, 18, 7])
print(rollavg_bottlneck(data, 4))
输出:
[ nan nan nan 8. 9.25 13.5 18. 18.5 18.5 17. 15. 14. ]
由于时间窗口间隔为 4,因此在开始处存在三个 nan 值,因为无法为它们计算滑动平均值。
使用 pandas
模块计算滑动平均值
时间序列数据主要与 pandas
DataFrame 相关联。因此,该库非常适合对此类数据执行不同的计算。
我们可以使用 rolling()
和 mean()
函数来计算时间序列数据的滑动平均值,如下所示。
import pandas as pd
import numpy as np
data = np.array([10, 5, 8, 9, 15, 22, 26, 11, 15, 16, 18, 7])
d = pd.Series(data)
print(d.rolling(4).mean())
输出:
0 NaN
1 NaN
2 NaN
3 8.00
4 9.25
5 13.50
6 18.00
7 18.50
8 18.50
9 17.00
10 15.00
11 14.00
dtype: float64
我们首先将 numpy 数组转换为时间序列对象,然后使用 rolling()
函数在滚动窗口上执行计算,并使用 mean()
函数计算滑动平均值。
这也是因为时间窗口间隔为 4,所以在开始时存在三个 nan 值,因为无法为它们计算滑动平均值。
相关文章
Pandas DataFrame DataFrame.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:Python
-
DataFrame.shift() 函数是将 DataFrame 的索引按指定的周期数进行移位。
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:Python
-
本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串