轴必须设置“freq”才能转换为周期 | 季节性_分解

Al_*_*___ 5 python matplotlib data-analysis decomposition data-science

我有一个临时 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
Run Code Online (Sandbox Code Playgroud)

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

result = seasonal_decompose(temp, model='additive',period=4)  
result.plot()
plt.show()
Run Code Online (Sandbox Code Playgroud)

小智 5

只需将您的 periodIndex 转换为 DatetimeIndex 即可解决问题:

    df.index = df.index.to_timestamp()
Run Code Online (Sandbox Code Playgroud)


Gol*_*ion 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()
Run Code Online (Sandbox Code Playgroud)