

arimaでモデルを作り、未来予測を描画したいのですが、うまくいきません。

以下のコードを実行した場合、

[code]

    arima_model_P = arima_model.predict('2023-01-01','2023-01-29')
    plt.figure(figsize=(8, 4))
    
    plt.plot(df_400g_w, label="original")
    plt.plot(arima_model_P, c="b", label="model-pred", alpha=0.7)
    plt.legend(loc='best')
    
[/code]

下記のエラーが出ます。

[code]

    ---------------------------------------------------------------------------
    TypeError                                 Traceback (most recent call last)
    Cell In[21], line 1
    ----> 1 arima_model_P = arima_model.predict('2023-01-01','2023-01-29')
          2 plt.figure(figsize=(8, 4))
          4 plt.plot(df_400g_w, label="original")
    
    File ~\anaconda3\lib\site-packages\pmdarima\arima\arima.py:777, in ARIMA.predict(self, n_periods, X, return_conf_int, alpha, **kwargs)
        775 check_is_fitted(self, 'arima_res_')
        776 if not isinstance(n_periods, int):
    --> 777     raise TypeError("n_periods must be an int")
        779 # Temporary shim until we remove `exogenous` support completely
        780 X, _ = pm_compat.get_X(X, **kwargs)
    
    TypeError: n_periods must be an int
    
[/code]

また

[code]

    arima_model_P = arima_model.predict('2023-01-01','2023-01-29')
    
[/code]

の部分のpredict()をint型に変え、

[code]

    arima_model_P = arima_model.predict(8)
    plt.figure(figsize=(8, 4))
    
    plt.plot(df_400g_w, label="original")
    plt.plot(arima_model_P, c="b", label="model-pred", alpha=0.7)
    plt.legend(loc='best')
    
[/code]

上記のように実行すると、

[![画像の説明をここに入力](https://i.stack.imgur.com/0XKRV.jpg)](https://i.stack.imgur.com/0XKRV.jpg)

このような結果になります。

どうすれば、自然に結合することができまでしょうか？


CC BY-SA 4.0
2023-01-16T13:59:47.750
93386
2023-01-20T05:27:03.767
48948
question
python
arima model の予測を描画したい


描画されたグラフからの推定になりますが，`arima_model_P = arima_model.predict(8)`
がインデックスを（元データから延長できず）数値「0, 1, ..., 7」で付加し，それを matplotlib が「1970-01-01,
...」と解釈して描画している思われます。  
この推定が正しければ，下記のように `arima_model_P` のインデックスを日付型で再設定してから描画すれば所望の結果が得られます。

[code]

    arima_model_P = arima_model.predict(8)
    
    from datetime import date, timedelta
    arima_model_P.index = [date(2023, 1, 1) + timedelta(days=4) * i
                           for i in range(8)]
    
    plt.figure(figsize=(8, 4))
    plt.plot(df_400g_w, label="original")
    plt.plot(arima_model_P, c="b", label="model-pred", alpha=0.7)
    plt.legend(loc='best')
    
[/code]

ただし，ARIMA処理を始める前に元データのインデックスを日付型に変換して良いなら，その方が簡明です。その記述例も示します。

[code]

    df_400g_w.index = pd.to_datetime(df_400g_w.index)
    
[/code]

なお，変換がうまくいかない場合は
[pandas.to_datetime](https://pandas.pydata.org/docs/reference/api/pandas.to_datetime.html)
を参照して `format='...'` 等のオプションを検討ください。


CC BY-SA 4.0
2023-01-20T05:03:40.060
93467
2023-01-20T05:27:03.767
2023-01-20T05:27:03.767
54588
54588
93386
answer