深入详解 二次移动平均法python

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

什么是 二次移动平均法
二次移动平均法也称为指数加权移动平均法是一种用于平滑时间序列数据的算法。

文章目录

二次移动平均法逻辑

二次移动平均法是一种重要的数学工具用于处理时间序列数据它的主要目的是通过平滑序列中的噪音数据来更好地捕捉趋势。

具体实现

  • 计算第一个二次移动平均数这通常是简单移动平均数SMA。
  • 使用以下公式计算每个时间步的二次移动平均数

E M A t = α × y t + ( 1 − α ) × E M A t − 1 EMA_t = \alpha \times y_t + (1-\alpha)\times EMA_{t-1} EMAt=α×yt+(1α)×EMAt1

其中 E M A t EMA_t EMAt 表示时间步 t 的二次移动平均数 y t y_t yt 表示时间步 t 的数据点 α \alpha α 表示权重系数它一般设置为 2 n + 1 \frac{2}{n + 1} n+12其中 n n 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() 函数计算前缀和然后通过切片的方式计算窗口内的平均值。

二次移动平均法的应用场景

  • 数据平滑可以通过二次移动平均法对时间序列数据进行平滑处理去除其中的噪音和瞬时干扰。
  • 趋势分析可以通过对数据进行二次移动平均法处理得到数据的趋势信息用于趋势分析和预测。
  • 市场分析在股市分析中二次移动平均法常被用于分析股票价格的趋势判断买卖信号。
  • 去除季节性二次移动平均法可以用于去除季节性对数据的影响。

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕可以点点小手赞一下
🌻 发现错误直接评论区中指正吧
📆 橡皮擦的第 859 篇原创博客

👇 全网 6000+人正在学习的 爬虫专栏 👇👇👇👇

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: python