web-dev-qa-db-ja.com

Python Seasonal_decomposeFreqパラメーターの決定

質問はかなり取り組まれているようですが、日時インデックスを使用してデータフレームを入力として指定しているのに、なぜ季節分解が機能しないのか理解できません。これが私のデータセットの例です:

    Customer order actual date  Sales Volumes
0   01/01/1900                           300
1   10/03/2008                          3000
2   15/11/2013                            10
3   23/12/2013                           200
4   04/03/2014                             5
5   17/03/2014                            30
6   22/04/2014                             1
7   26/06/2014                           290
8   30/06/2014                            40

コードスニペットを以下に示します。

from statsmodels.tsa.seasonal import seasonal_decompose
df_agg['Customer order actual date'] = pd.to_datetime(df_agg['Customer order actual date'])
df_agg = df_agg.set_index('Customer order actual date')
df_agg.reset_index().sort_values('Customer order actual date', ascending=True)
decomposition = seasonal_decompose(np.asarray(df_agg['Sales Volumes'] ), model = 'multiplicative')

しかし、体系的に次のエラーが発生します。

:freqを指定するか、xをpandasオブジェクトで、freqがNoneに設定されていない時系列インデックスを持つ必要があります

日時インデックス付きのデータフレームを使用しているのに、なぜ周波数入力を行う必要があるのか​​説明していただけますか?私はseasonal_decomposeの出力として季節性を探していますが、入力パラメーターとして頻度を与えることは意味がありますか?

4
Galileo

Seasonal_decompose関数は、inferred_freqを介して頻度を取得します。ここにリンクがあります- https://pandas-docs.github.io/pandas-docs-travis/generated/pandas.DatetimeIndex.html

一方、Inferred_freqはinfer_freqによって生成され、Infer_freqはインデックスではなくシリーズの値を使用します。 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.infer_freq.html

これが、時系列インデックスを使用してもfreqを値に設定する必要がある理由である可能性があります。

また、seasonal_decompose()の頻度を知りたい場合は、データのプロパティです。したがって、月ごとにデータを収集した場合、月ごとの頻度があります。

頻度を計算するためにseasonal_decompose()で使用されるメソッドは、_maybe_get_pandas_wrapper_freq()です。

私はseasonal_decompose()についていくつかの調査を行いました。ここに、関数のソースコードを理解するのに役立つ可能性のあるリンクがあります-

季節分解のソースコード- https://github.com/statsmodels/statsmodels/blob/master/statsmodels/tsa/seasonal.py

チェックアウト-_maybe_get_pandas_wrapper_freq https://searchcode.com/codesearch/view/86129760/

お役に立てれば!それに加えて何か面白いものを見つけたら教えてください。

1
Analyst17

コードスニペットの2つのポイント。

  1. コードの4行目で、インデックスをリセットしていますが、値に割り当てていません。その場で実行する場合は、_inplace=True_を追加する必要があります。
  2. 季節分解は時系列で機能するため、データには日時インデックスが必要です。 (csvの読み込み中に行うか、pd.to_datetime()関数を使用できます。
1
yosemite_k