gpt4 book ai didi

Python Pandas 移动平均滞后

转载 作者:行者123 更新时间:2023-12-05 07:40:42 27 4
gpt4 key购买 nike

考虑以下 Python 程序:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

data = [["2017-05-25 22:00:00", 5],
["2017-05-25 22:05:00", 7],
["2017-05-25 22:10:00", 9],
["2017-05-25 22:15:00", 10],
["2017-05-25 22:20:00", 15],
["2017-05-25 22:25:00", 20],
["2017-05-25 22:30:00", 25],
["2017-05-25 22:35:00", 32]]

df = pd.DataFrame(data)
df.columns = ["date", "value"]
df["date2"] = pd.to_datetime(df["date"],format="%Y-%m-%d %H:%M:%S")

ts = pd.Series(df["value"].values, index=df["date2"])
mean_smoothed = ts.rolling(window=5).mean()
exp_smoothed = ts.ewm(alpha=0.5).mean()

h1 = ts.head(8)
h2 = mean_smoothed.head(8)
h3 = exp_smoothed.head(8)
k = pd.concat([h1, h2, h3], join='outer', axis=1)
k.columns = ["Actual", "Moving Average", "Exp Smoothing"]
print(k)

这打印

                     Actual  Moving Average  Exp Smoothing
date2
2017-05-25 22:00:00 5 NaN 5.000000
2017-05-25 22:05:00 7 NaN 6.333333
2017-05-25 22:10:00 9 NaN 7.857143
2017-05-25 22:15:00 10 NaN 9.000000
2017-05-25 22:20:00 15 9.2 12.096774
2017-05-25 22:25:00 20 12.2 16.111111
2017-05-25 22:30:00 25 15.8 20.590551
2017-05-25 22:35:00 32 20.4 26.317647

画图

plt.figure(figsize=(16,5))
plt.plot(ts, label="Original")
plt.plot(mean_smoothed, label="Moving Average")
plt.plot(exp_smoothed, label="Exponentially Weighted Average")
plt.legend()
plt.show()

graph

移动平均线 (MA) 和指数平滑 (ES) 都引入了滞后:在上面的示例 MA 中,需要 5 个值来预测第 6 个值将是什么。但是,如果您查看表格,MA 列中只有 4 个 NaN 值,而第 5 个值已经是非 NaN 值(=第一个预测)。

问题:如何在图表中绘制这些值以正确保留滞后?看看ES,其实更明显一点:ES应该在t=2开始,但是starts but starts immediately。

最佳答案

您似乎误解了移动平均线。对于 MA(5),需要 5 个数据点来计算。收到第 5 个点后,可以使用点 1-5 计算第 5 个点的平均值。因此,您应该只有 4 个 NaN。

如果你想转移你的数据,你可以尝试:

df.shift(n) # n 是一个整数

要么将 Actual 偏移 -1,要么将所有内容都偏移 1。

Here是它的文档。

关于Python Pandas 移动平均滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45893329/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com