用数据绘制移动平均线[重复]

Posted

技术标签:

【中文标题】用数据绘制移动平均线[重复]【英文标题】:Plot moving average with data [duplicate] 【发布时间】:2020-11-26 00:01:35 【问题描述】:

我正在尝试计算和绘制移动平均线以及计算它的数据:

def movingAvg(df):
window_size = 7
i = 0

moving_averages = []

while i < len(df) - window_size + 1:
    current_window = df[i : i + window_size]
    window_average = current_window.mean()
    moving_averages.append(window_average)
    i += 1

return moving_averages

    
dates = df_valid['dateTime']
startDay = dates.iloc[0]
lastDay = dates.iloc[-1]

fig, ax = plt.subplots(figsize=(20, 10))
ax.autoscale()
#plt.xlim(startDay, lastDay)

df_valid.sedentaryActivityMins.reset_index(drop=True, inplace=True)
df_moving = pd.DataFrame(movingAvg(df_valid['sedentaryActivityMins']))

df_nan = [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]
df_nan = pd.DataFrame(df_nan)

df_moving = pd.concat([df_nan, df_moving])
plt.plot(df_valid.sedentaryActivityMins)
plt.plot(df_moving)

#plt.show()

但由于移动平均线使用 7 个窗口,因此移动平均线列表少了 7 个项目,因此图不能正确地相互跟随。

我尝试将 7 个“NaN”放入移动平均列表中,但在绘制时这些都被忽略了。

剧情如下:

但我希望橙色线提前 7 步开始。 所以它看起来像这样:

df_valid.sedentaryActivityMins.head(40)
0     608
1     494
2     579
3     586
4     404
5     750
6     573
7     466
8     389
9     604
10    351
11    553
12    768
13    572
14    616
15    522
16    675
17    607
18    229
19    529
20    746
21    646
22    625
23    590
24    572
25    462
26    708
27    662
28    649
29    626
30    485
31    509
32    561
33    664
34    517
35    587
36    602
37    601
38    495
39    352
Name: sedentaryActivityMins, dtype: int64

关于如何做的任何想法? 提前致谢!

【问题讨论】:

NaN 无法在绘图中显示。您可以将前七个值设为零或将其分配给系列本身以便绘制它们 嗨!如果我将它们分配为 0,情节看起来真的很时髦。如何将其分配给系列? 我建议使用动态窗口。直到第 7 点,窗口大小应该从 1 逐渐增加到 7,然后保持不变。 您希望这些值是什么? 您可以在您的问题中添加一些数据吗?请阅读minimal reproducible example。 【参考方案1】:

当您执行 concat 时,索引不会改变。 NaN 也将采用与您的系列的前 7 个观察值相同的索引。因此,要么在 concat 之后重置索引,要么将 ignore_index 设置为 True,如下所示:

df_moving = pd.concat([df_nan, df_moving],ignore_index=True)
plt.plot(x)
plt.plot(df_moving)

这给出了预期的输出:

【讨论】:

随机,但有趣的是你同时使用“indexes”和“indices”作为Index的复数。 哈哈。很好的收获xD 甜蜜!这工作:-) 谢谢!

以上是关于用数据绘制移动平均线[重复]的主要内容,如果未能解决你的问题,请参考以下文章

重复测量图:叠加平均轨迹和误差线 (ggplot2)

移动平均线计算不正确

在一张图中绘制多条线[重复]

Matplotlib 绘制 2D 形状而不是 1D 线 [重复]

Python和股市数据分析

SQL - 计算可变长度的可变移动平均值