一文带你深入了解Python中的二次移动平均法
作者:梦想橡皮擦 时间:2021-08-30 00:28:12
二次移动平均法逻辑
二次移动平均法是一种重要的数学工具,用于处理时间序列数据,它的主要目的是通过平滑序列中的噪音数据来更好地捕捉趋势。
具体实现:
计算第一个二次移动平均数,这通常是简单移动平均数(SMA)。
使用以下公式计算每个时间步的二次移动平均数:
EMAt=α×yt+(1−α)×EMAt−1
其中EMAt表示时间步t的二次移动平均数,yt表示时间步t的数据点,α表示权重系数,它一般设置为2/(n+1),其中n表示窗口长度。
Python代码实现
下面是一个用 python 实现的二次移动平均法的代码示例:
def ema(data, window):
alpha = 2 / (window + 1)
ema = [data[0]]
for i in range(1, len(data)):
ema.append(alpha * data[i] + (1 - alpha) * ema[-1])
return ema
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
window = 5
ema_data = ema(data, window)
print(ema_data)
运行代码,得到如下输出。
第二种实现二次移动平均法的方式
另一种写法是直接使用 NumPy 的函数 numpy.convolve() 实现二次移动平均法。具体如下:
import numpy as np
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
window = 5
def double_moving_average(data, window=2):
return np.convolve(data, np.ones(window) / window, 'valid')
ema_data = double_moving_average(data, window)
print(ema_data)
这里的 data 变量表示输入的数据, window 变量表示窗口大小,这个代码实现了二次移动平均法的功能,可以得到移动平均值数组。
第三种卷积实现二次移动平均法
第三种方法是使用卷积,在 Python 中可以使用 Numpy 实现:
import numpy as np
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
window = 5
def moving_average_2(data, window=3):
cumsum_vec = np.cumsum(np.insert(data, 0, 0))
ma = (cumsum_vec[window:] - cumsum_vec[:-window]) / window
return np.concatenate((np.zeros(window - 1), ma))
ema_data = moving_average_2(data, window)
print(ema_data)
这种方法将二次移动平均法转化为卷积的形式,使用 cumsum() 函数计算前缀和,然后通过切片的方式计算窗口内的平均值。
二次移动平均法的应用场景
数据平滑:可以通过二次移动平均法对时间序列数据进行平滑处理,去除其中的噪音和瞬时干扰。
趋势分析:可以通过对数据进行二次移动平均法处理,得到数据的趋势信息,用于趋势分析和预测。
市场分析:在股市分析中,二次移动平均法常被用于分析股票价格的趋势,判断买卖信号。
去除季节性:二次移动平均法可以用于去除季节性对数据的影响。
来源:https://blog.csdn.net/hihell/article/details/128834635
标签:Python,二次移动平均法
0
投稿
猜你喜欢
Appium自动化测试中获取Toast信息操作
2022-05-12 07:10:48
用ASP建立一个简单的聊天室
2007-09-21 12:43:00
C#使用Oracle.ManagedDataAccess.dll组件连接Oracle数据库
2024-01-27 23:55:45
整理几个js日历源代码
2008-01-03 13:13:00
几个常见的MySQL的可优化点归纳总结
2024-01-13 11:32:14
MySQL 8忘记密码的最佳处理方式浅析
2024-01-28 17:44:32
BeautifulSoup获取指定class样式的div的实现
2023-05-10 20:39:14
MySQL表设计优化与索引 (十)
2010-10-25 19:51:00
给Python的Django框架下搭建的BLOG添加RSS功能的教程
2021-09-03 00:27:15
python实现画循环圆
2023-01-17 02:18:28
FCKeditor编辑器基本配置优化修改使用方法
2008-12-31 13:32:00
基于Python和openCV实现图像的全景拼接详细步骤
2023-05-30 17:35:07
jQuery 1.3.3 新功能[译]
2009-06-04 12:23:00
浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)
2024-04-23 09:09:59
在线HTML编辑器原理(eweb原理)
2009-01-08 12:25:00
python将字符串转换成数组的方法
2021-03-04 20:09:54
Python 如何给图像分类(图像识别模型构建)
2022-07-24 20:34:08
解析MySQL8.0新特性——事务性数据字典与原子DDL
2024-01-28 18:36:35
python 读取Linux服务器上的文件方法
2023-03-31 23:54:19
getElementsByAttribute
2009-10-27 12:13:00