【问题标题】:Axis must have `freq` set to convert to Periods | Seasonal_Decompose轴必须设置“频率”才能转换为周期 |季节性_分解
【发布时间】:2021-05-02 12:03:00
【问题描述】:

我有一个临时 DF,其中包含以下数据

Quarter
2016Q3    146660510.0
2016Q4    123641451.0
2017Q1    125905843.0
2017Q2    129656327.0
2017Q3    126586708.0
2017Q4    116804168.0
2018Q1    118167263.0
2018Q2    121633740.0
2018Q3    125314447.0
2018Q4    120994896.0
2019Q1    126124709.0
2019Q2    134753318.0

我将其作为季度数据传递给seasonal_decompose,如下所示,但我收到一条错误消息,提示“轴必须将freq 设置为转换为周期”。频率已在 DF 中设置。我认为这个问题与您必须向 matplotlib 指定 x 轴是句点的事实有关,但我不知道该怎么做,也找不到任何其他示例,其中使用了带有四分之一的 DecomposeResult 对象

result = seasonal_decompose(temp, model='additive',period=4)  
result.plot()
plt.show()

【问题讨论】:

    标签: python matplotlib data-science data-analysis decomposition


    【解决方案1】:
     date=['2016Q3'
     ,'2016Q4'
     ,'2017Q1'
     ,'2017Q1'
     ,'2017Q3'
     ,'2017Q4'
     ,'2018Q1'
     ,'2018Q3'
     ,'2018Q3'
     ,'2018Q4'
     ,'2019Q1'
     ,'2019Q2']
    
     data=[146660510.0
     ,123641451.0
     ,125905843.0
     ,129656327.0
     ,126586708.0
     ,116804168.0
     ,118167263.0
     ,121633740.0
     ,125314447.0
     ,120994896.0
     ,126124709.0
     ,134753318.0]
    
     df=pd.DataFrame({'date':date,'data':data})
     df['date']=pd.to_datetime(df['date'])
     df=df.set_index('date')
     ax=df.plot(figsize=(14,2))
     plt.show()
    
     decomposition=sm.tsa.seasonal_decompose(x=df['data'],model='additive',      extrapolate_trend='freq', period=3)
    
     decomposition_trend=decomposition.trend
     ax= decomposition_trend.plot(figsize=(14,2))
     ax.set_xlabel('Date')
     ax.set_ylabel('Trend of time series')
     ax.set_title('Trend values of the time series')
     plt.show()
    
     decomposition_residual=decomposition.resid
     ax= decomposition_residual.plot(figsize=(14,2))
     ax.set_xlabel('Date')
     ax.set_ylabel('Residual of time series')
     ax.set_title('Residual values of the time series')
     plt.show()
    

    【讨论】:

      【解决方案2】:

      只需将 PeriodIndex 转换为 DatetimeIndex,即可解决问题:

          df.index = df.index.to_timestamp()
      

      【讨论】:

      • 这是一种解决方法,但不是真正的答案。根据seasonal_compose的文档,这应该像OP的代码一样工作,不是吗?
      猜你喜欢
      • 2019-03-29
      • 2021-01-14
      • 2019-02-18
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 2022-06-09
      相关资源
      最近更新 更多