python - 声明一个函数来对数据进行指数平滑处理
问题描述
我正在尝试在 Python 中对 Jupyter 笔记本上的一些去趋势数据进行指数平滑处理。我尝试导入
from statsmodels.tsa.api import ExponentialSmoothing
但出现以下错误
ImportError: cannot import name 'SimpleExpSmoothing'
我不知道如何从 Jupyter 笔记本解决这个问题,所以我试图声明一个执行指数平滑的函数。
假设函数的名称是expsmoth(list,a)
,并且接受一个列表list
和一个数字a
,并给出另一个称为列表的列表explist
,其元素由以下递归关系给出:
explist[0] == list[0]
explist[i] == a*list[i] + (1-a)*explist[i-1]
我还在学习python。如何声明一个以列表和数字作为参数并返回其元素由上述递归关系给出的列表的函数?
解决方案
解决您的问题的一个简单方法是
def explist(data, a):
smooth_data = data.copy() # make a copy to avoid changing the original list
for i in range(1, len(data)):
smooth_data[i] = a*data[i] + (1-a)*smooth_data[i-1]
return smooth_data
该函数应该适用于原生 python 列表或 numpy 数组。
import matplotlib.pyplot as plt
import numpy as np
data = np.random.random(100) # some random data
smooth_data = explist(data, 0.2)
plt.plot(data, label='orginal')
plt.plot(smooth_data, label='smoothed')
plt.legend()
plt.show()
推荐阅读
- vue.js - VueX - 在与动作不同的模块中调度动作
- javascript - 如何响应龙卷风中的 GET 请求?
- node.js - 如何在不知道分布的情况下将彼此靠近的项目分组?
- c - CRC计算减少
- android - 获取特定范围的 Firebase 数据库子项
- django - 子查询中的左外连接
- bixby - 如何为胶囊添加导航支持
- javascript - 如何在 json (javascript) 中使用变量作为对象
- java - 无法从链中的任何提供商加载 AWS 凭证 - kinesis-kafka-connector
- regex - "\S+?@\S+" 和 "\S+@\S+" 在正则表达式中给出相同的输出