web-dev-qa-db-ja.com

トレンド、季節、および残余の時系列要素の分解

私はいくつかの時系列を持つDataFrameを持っています:

         divida    movav12       var  varmovav12
Date                                            
2004-01       0        NaN       NaN         NaN
2004-02       0        NaN       NaN         NaN
2004-03       0        NaN       NaN         NaN
2004-04      34        NaN       inf         NaN
2004-05      30        NaN -0.117647         NaN
2004-06      44        NaN  0.466667         NaN
2004-07      35        NaN -0.204545         NaN
2004-08      31        NaN -0.114286         NaN
2004-09      30        NaN -0.032258         NaN
2004-10      24        NaN -0.200000         NaN
2004-11      41        NaN  0.708333         NaN
2004-12      29  24.833333 -0.292683         NaN
2005-01      31  27.416667  0.068966    0.104027
2005-02      28  29.750000 -0.096774    0.085106
2005-03      27  32.000000 -0.035714    0.075630
2005-04      30  31.666667  0.111111   -0.010417
2005-05      31  31.750000  0.033333    0.002632
2005-06      39  31.333333  0.258065   -0.013123
2005-07      36  31.416667 -0.076923    0.002660

最初の時系列dividaを分解して、その傾向を季節および残留成分から分離できるようにします。

私は答えを見つけました here 、次のコードを使用しようとしています:

import statsmodels.api as sm

s=sm.tsa.seasonal_decompose(divida.divida)

しかし、私はこのエラーを取得し続けます:

Traceback (most recent call last):
File "/Users/Pred_UnBR_Mod2.py", line 78, in <module> s=sm.tsa.seasonal_decompose(divida.divida)
File "/Library/Python/2.7/site-packages/statsmodels/tsa/seasonal.py", line 58, in seasonal_decompose _pandas_wrapper, pfreq = _maybe_get_pandas_wrapper_freq(x)
File "/Library/Python/2.7/site-packages/statsmodels/tsa/filters/_utils.py", line 46, in _maybe_get_pandas_wrapper_freq
freq = index.inferred_freq
AttributeError: 'Index' object has no attribute 'inferred_freq'

誰かがそれに光を当てることができますか?

15
abutremutante

indexDateTimeIndexに変換すると正常に機能します。

df.reset_index(inplace=True)
df['Date'] = pd.to_datetime(df['Date'])
df = df.set_index('Date')
s=sm.tsa.seasonal_decompose(df.divida)

<statsmodels.tsa.seasonal.DecomposeResult object at 0x110ec3710>

以下を介してコンポーネントにアクセスします。

s.resid
s.seasonal
s.trend
25
Stefan

Statsmodelは、周波数を指定した場合にのみシリーズを分解します。通常、すべての時系列インデックスには頻度が含まれます。例:日ごと、営業日、週ごと。エラーが表示されます。このエラーは、次の2つの方法で削除できます。

  1. Stefanがしたことは、インデックス列をpandas DateTime関数に与えました。内部関数_infer_freq_を使用して、頻度を見つけ、頻度のあるインデックスを返します。
  2. それ以外の場合は、df.index.asfreq(freq='m')としてインデックス列に頻度を設定できます。ここで、mは月を表します。ドメインの知識がある場合、またはdで頻度を設定できます。

それを簡単に:

次の3つの手順を実行します。1-完了していない場合、yyyy-mm-ddまたはdd-mm-yyyyの列を作成します(Excelを使用)。 2-=pandasを使用して、次のように日付形式に変換します。

df ['Date'] = pd.to_datetime(df ['Date'])

3を使用して分解します。

statsmodels.tsa.seasonalからseasonal_decompose分解= seasonal_decompose(ts_log)をインポート

そして最後に: - - - enter image description here

0
Reeves