【问题标题】:Graphing with rolling mean data not smoothing properly使用滚动平均数据绘制的图形未正确平滑
【发布时间】:2017-11-18 06:25:30
【问题描述】:

当尝试使用以下代码在 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')

生成以下图表:

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

任何帮助将不胜感激:)

更新:带有建议代码的图片

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

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

当我使用以下代码运行它时,我收到错误“AttributeError: Can only use .dt accessor with datetimelike values”谢谢!

更新 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")

【问题讨论】:

    标签: python pandas datetime plot


    【解决方案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'])
    

    这样更好

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

    注意较大的窗口参数。

    【讨论】:

    • 谢谢,但是当我运行代码时,我得到了这个看起来很丑的东西(我在问题的底部添加了它作为更新)——有没有办法让我看起来更平滑更像你的?我试过玩窗户无济于事!
    • 也许有一个 resample()
    • @GrahamStreich 我不知道你的数据是什么样的。您的频率可能非常高,滚动超过 30 个周期是不够的。我会更新我的帖子。
    • 谢谢,关于如何修复轴标签的任何想法?请查看我的问题的更新——我认为我们即将解决它!
    • 您的Date 列不再是datetime。这样做df.Date = pd.to_datetime(df.Date)
    猜你喜欢
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 2020-05-15
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    相关资源
    最近更新 更多