2016-01-20 103 views
1

我已經開始學習statsmodels包,並且無法使用arima實現基本預測。Statsmodels arima模型返回錯誤

錯誤是

ValueError: Given a pandas object and the index does not contain dates

我想這是一個版本:

df = make_df(filename_data) 

y = [] 
x = [] 

# here I am preparing day by day sequence as that I have inconsistent data and I set 0 to NAN values 

start_date = df[date_col].min() 
end_date = df[date_col].max() 



while start_date <= end_date: 

    x.append(start_date) 

    try: 
     y.append(
      df[df[date_col] == start_date][rev_col].values[0]) 
    except: 
     y.append(0) 

    start_date += datetime.timedelta(days=1) 

y = np.array(y) 
x = np.array(x) 

y = pd.TimeSeries(y, index=x) 
print(y) 
arma_mod = sm.tsa.ARMA(y, order=(2,2)) 
arma_res = arma_mod.fit(trend='nc', disp=-1) 

在此之前,我試圖

df = make_df(filename_data) 

y = np.array(df[rev_col]) 
x = np.array(df[date_col]) 

y = pd.TimeSeries(y, index=x) 

爲什麼會發生?

日期 - 收入數據看起來不錯:

2014-08-04  59477 
2014-08-05  29989 
2014-08-06  29989 
2014-08-07  116116 

回答

4

你可以簡單地用as_matrix將您的數據框()。

示例工作代碼:

from statsmodels.tsa.arima_model import ARIMA 
import numpy as np 

def plot_residuals(data, ord=(2, 0, 1)): 
    model = ARIMA(endog=data, order=(ord[0], 0, ord[1])).fit() 
    plt.plot(model.resid) 
    plt.show() 

data = np.log(data.values) - np.log(data.values.shift()).to_frame().dropna().as_matrix() 
plot_residuals(data, (2, 0, 1)) 

由於statsmodels有許多未解決的問題,它會幫助你只是暫時的。