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)
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)