一文带你深入了解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)

运行代码,得到如下输出。

一文带你深入了解Python中的二次移动平均法

第二种实现二次移动平均法的方式

另一种写法是直接使用 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
  • asp之家 网络编程 m.aspxhome.com