Ошибка при реализации ARIMA в Python на данных Quandl - PullRequest
0 голосов
/ 30 мая 2018
df = quandl.get('NSE/TATAMOTORS', start_date='2000-01-01', end_date='2018-05-10')

df=df.drop(['Last','Total Trade Quantity','Turnover (Lacs)'], axis=1)
df.head(10)

OUTPUT -

  Open    High     Low   Close
Date                                      
2003-12-26  435.80  440.50  431.65  438.60
2003-12-29  441.00  449.70  441.00  447.80
2003-12-30  450.00  451.90  430.10  442.40
2003-12-31  446.00  459.30  443.55  452.05
2004-01-01  453.25  457.90  451.50  454.45
2004-01-02  458.00  460.35  454.05  456.40
2004-01-05  458.00  465.00  450.60  454.85
2004-01-06  460.00  465.00  448.50  454.45
2004-01-07  451.40  454.70  438.10  446.45
2004-01-08  449.00  466.95  449.00  464.75

-

from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(df, order=(5,1,0))

OUTPUT -

Traceback (most recent call last):

  File "<ipython-input-90-799de8e60d6f>", line 1, in <module>
    model = ARIMA(df, order=(5,1,0))

  File "D:\A\lib\site-packages\statsmodels\tsa\arima_model.py", line 1000, in __new__
    mod.__init__(endog, order, exog, dates, freq, missing)

  File "D:\A\lib\site-packages\statsmodels\tsa\arima_model.py", line 1024, in __init__
    self.data.ynames = 'D.' + self.endog_names

TypeError: must be str, not list

Поэтому я преобразовал столбец индекса, содержащий даты, в правильный столбец с помощью-

df = df.reset_index()
df.head(10)

Out [92]:

        Date    Open    High     Low   Close
0 2003-12-26  435.80  440.50  431.65  438.60
1 2003-12-29  441.00  449.70  441.00  447.80
2 2003-12-30  450.00  451.90  430.10  442.40
3 2003-12-31  446.00  459.30  443.55  452.05
4 2004-01-01  453.25  457.90  451.50  454.45
5 2004-01-02  458.00  460.35  454.05  456.40
6 2004-01-05  458.00  465.00  450.60  454.85
7 2004-01-06  460.00  465.00  448.50  454.45
8 2004-01-07  451.40  454.70  438.10  446.45
9 2004-01-08  449.00  466.95  449.00  464.75

затем, когда я запускаю эту строку -

from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(df, order=(5,1,0))

ВЫХОД -

Traceback (most recent call last):

  File "<ipython-input-94-799de8e60d6f>", line 1, in <module>
    model = ARIMA(df, order=(5,1,0))

  File "D:\A\lib\site-packages\statsmodels\tsa\arima_model.py", line 1000, in __new__
    mod.__init__(endog, order, exog, dates, freq, missing)

  File "D:\A\lib\site-packages\statsmodels\tsa\arima_model.py", line 1015, in __init__
    super(ARIMA, self).__init__(endog, (p, q), exog, dates, freq, missing)

  File "D:\A\lib\site-packages\statsmodels\tsa\arima_model.py", line 452, in __init__
    super(ARMA, self).__init__(endog, exog, dates, freq, missing=missing)

  File "D:\A\lib\site-packages\statsmodels\tsa\base\tsa_model.py", line 43, in __init__
    super(TimeSeriesModel, self).__init__(endog, exog, missing=missing)

  File "D:\A\lib\site-packages\statsmodels\base\model.py", line 212, in __init__
    super(LikelihoodModel, self).__init__(endog, exog, **kwargs)

  File "D:\A\lib\site-packages\statsmodels\base\model.py", line 63, in __init__
    **kwargs)

  File "D:\A\lib\site-packages\statsmodels\base\model.py", line 88, in _handle_data
    data = handle_data(endog, exog, missing, hasconst, **kwargs)

  File "D:\A\lib\site-packages\statsmodels\base\data.py", line 630, in handle_data
    **kwargs)

  File "D:\A\lib\site-packages\statsmodels\base\data.py", line 76, in __init__
    self.endog, self.exog = self._convert_endog_exog(endog, exog)

  File "D:\A\lib\site-packages\statsmodels\base\data.py", line 471, in _convert_endog_exog
    raise ValueError("Pandas data cast to numpy dtype of object. "

ValueError: Pandas data cast to numpy dtype of object. Check input data with np.asarray(data).

HELP

1 Ответ

0 голосов
/ 30 мая 2018

ARIMA ожидается массивоподобным объектом, если мы вместо использования 2D-массива (датафрейм) и будем использовать 1D-массив (Series), и это будет работать.

Попробуйте:

ARIMA(df['Close'].values, order=(5,1,0))

, где df имеет дату и время в индексе, и вы выбираете один столбец:

df.info()

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 10 entries, 2003-12-26 to 2004-01-08
Data columns (total 4 columns):
Open     10 non-null float64
High     10 non-null float64
Low      10 non-null float64
Close    10 non-null float64
dtypes: float64(4)
memory usage: 400.0 bytes
...