一文带你深入了解Python中的二次移动平均法
作者:梦想橡皮擦 发布时间:2021-08-30 00:28:12
标签:Python,二次移动平均法
二次移动平均法逻辑
二次移动平均法是一种重要的数学工具,用于处理时间序列数据,它的主要目的是通过平滑序列中的噪音数据来更好地捕捉趋势。
具体实现:
计算第一个二次移动平均数,这通常是简单移动平均数(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


猜你喜欢
- 下面步骤展示的是如何经过VirtualBox管理器,使得pycharm和ubuntu中的项目环境连接对应起来!如果你有属于自己的服务器,核心
- 本文实例讲述了PHP实现更改hosts文件的方法。分享给大家供大家参考,具体如下:有这样一个需求,我有多个网址希望在不同的时候对应不同的 i
- 1.什么是gRPCgRPC是rpc框架中的一种,是rpc中的大哥是一个高性能,开源和通用的RPC框架,基于Protobuf序列化协议开发,且
- 目录安装PyPDF2模块创建文件,准备PDF文档万事俱备,准备开拆文档的拆分思路python拆分计算公式:具体怎么拆?完整拆分程序:列表拆分
- python的数据类型有:数字(int)、浮点(float)、字符串(str),列表(list)、元组(tuple)、字典(dict)、集合
- 负责Web编写的前端人员,都清楚可以通过W3验证服务功能,来在线验证自己编写的XHTML代码是否正确,在验证期间,最容易出现的错误往往都是在
- 1. 前言Docker在开发中使用的越来越多了,最近搞了一个Spring Boot应用,为了方便部署将Mysql也放在Docker中运行。那
- 一、SQLite简介SQLite是一个包含在C库中的轻量级数据库。它并不需要独立的维护进程,并且允许使用非标准变体(nonstandard
- 实例 1基本的XPath语法类似于在一个文件系统中定位文件,如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径。/AAA选择根
- 一般情况下只有需要长期运行的项目才会去关注内存的增长情况,即使是很小部分的内存泄露经过长期的运行仍然会产生很大的隐患。python本身也是支
- 下面的查询选择所有 date_col 值在最后 30 天内的记录。 mysql> SELECT something FROM tbl_
- 这篇文章主要介绍了python基于property()函数定义属性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- 字典的常用方法方便举例,先创建2个字典list_test={"bob":19,"aoa":18,&q
- 确实,如果在原网站如果存在表单提交或cookies的验证,对于ASP来说,不使用基于SOCKET的组件就难以完成,其实,XMLHTTP的另外
- 前言本文参照了大佬Andrew Ng的所讲解的Tensorflow 2视频所写,本文将其中只适用于Linux的功能以及只适用于Google
- Lightbox里面的一个函数,能把页面实际的高宽与浏览器可视面积的高宽保存在一个数组中..非常好用.什么是Lightbox?下载light
- 本文实例讲述了Python输出PowerPoint(ppt)文件中全部文字信息的方法。分享给大家供大家参考。具体分析如下:下面的代码依赖于w
- post, put请求的参数有两种形式一种是把参数拼接在url中 对应postman第二种是把参数放在body中 对应postman在Pyt
- 本文实例总结了php随机取mysql记录方法。分享给大家供大家参考。具体分析如下:在php中要随机取mysql记录我们可以直接使用mysql
- 问题你想对在Unix系统上面运行的程序设置内存或CPU的使用限制。解决方案resource 模块能同时执行这两个任务。例如,要限制CPU时间