使用滚动平均数据绘制图形并不能正确平滑

时间:2017-06-15 16:52:59

标签: python pandas datetime plot

当尝试在pandas中绘制滚动平均值以使用以下代码平滑我的数据时,我得到一个奇怪的出现图

data['mean_Kincaid'] = pd.rolling_mean(data.Kincaid,30, min_periods=1)
data['Year']= data['Date'].dt.year
data.plot(x='Date', y='mean_Kincaid')

产生以下图表:enter image description here

我希望图表“更平滑”(我的目标是使用rolling_mean函数开始)。

非常感谢任何帮助:)

更新:包含建议代码enter image description here

的图片

更新2:使用以下代码,我能够生成以下图像 - 关于如何将x轴固定到年份的任何想法?

data['mean_Kincaid'] = data.Kincaid.rolling(75, min_periods=1).mean()
data.plot(x='Date', y='mean_Kincaid')

enter image description here

当我使用以下代码运行它时,我收到错误“AttributeError:只能使用带有datetimelike值的.dt访问器”谢谢!

更新3:

data['mean_Kincaid'] = data.Kincaid.rolling(10000, 
min_periods=1).mean()
data.Date = pd.to_datetime(data.Date)
data.plot(x='Date', y='mean_Kincaid', legend=False, title="Kincaid 
scores over time")

enter image description here

1 个答案:

答案 0 :(得分:1)

这不足以平滑。

n = 8001
df = pd.DataFrame(dict(
        Kincaid=np.sin(np.linspace(-4, 4, n)) + np.random.rand(n) * 2,
        Date=pd.date_range('2010-03-31', periods=n)
    ))

df['mean_Kincaid'] = df.Kincaid.rolling(30, min_periods=1).mean()

df.plot(x='Date', y=['Kincaid', 'mean_Kincaid'])

enter image description here

这是更好的

df['mean_Kincaid'] = df.Kincaid.rolling(360, min_periods=1).mean()

df.plot(x='Date', y=['Kincaid', 'mean_Kincaid'])

enter image description here

请注意较大的窗口参数。