Как мне обработать этот файл Excel в блокноте jupyter для прогнозирования LSTM? - PullRequest
0 голосов
/ 09 мая 2020

У меня есть записная книжка jupyter, которую я начал с обработки единственной строки данных таймсерий и их временного интервала. Этот файл выглядел так (но, конечно, с большим количеством строк данных), и код отлично работал, создавая мой прогноз:

1 timeseries file format

Теперь я добавил для l oop (a-3) для циклического перехода по столбцам в новом файле Excel, который имеет 3 смежных временных ряда, например:

3 timeseries file format

As вы можете видеть, что я дал имя каждому столбцу, и в коде я получаю это имя столбца для использования в качестве имени файла, потому что в конце для l oop он берет прогноз данных и сохраняет его в файл.

Но сейчас я получаю эту ошибку при запуске кода:

File "<ipython-input-1-0b43e1ece383>", line 51
    pred_list.append(model.predict(batch)[0])
    ^
SyntaxError: invalid syntax

Код:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from statsmodels.tools.eval_measures import rmse
from sklearn.preprocessing import MinMaxScaler
from keras.preprocessing.sequence import TimeseriesGenerator
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Dropout
import warnings
warnings.filterwarnings("ignore")

for a in range(3):
    df=pd.read_excel('testdata.xlsx')
    df.date=pd.to_datetime(df.Date)
    df=df.set_index('Date')

    result=df.iloc[:,[a]]
    filename=result.columns[0]

    #take from the start to -12 months is train, from -12 to end is test
    train, test = df[:-12], df[-12:]
    scaler = MinMaxScaler()
    scaler.fit(train)
    train=scaler.transform(train)
    test=scaler.transform(test)
    n_input=12
    n_features=1

    generator=TimeseriesGenerator(train,train,length=n_input,batch_size=6)

    model=Sequential()
    model.add(LSTM(200,activation='relu', input_shape=(n_input,n_features)))
    model.add(Dropout(0.15))
    model.add(Dense(1))
    model.compile(optimizer='adam', loss='mse')

    model.fit_generator(generator, epochs=180)

    pred_list=[]

    batch=train[-n_input:].reshape((1,n_input,n_features))

    for i in range(n_input):
        pred_list.append(model.predict(batch)[0])
        batch=np.append(batch[:,1:,:],[[pred_list[i]]],axis=1)  
    df_predict=pd.DataFrame(scaler.inverse_transform(pred_list),index=df[-n_input:].index, columns=['Prediccion'])

    df_test=pd.concat([df,df_predict],axis=1)

    plt.figure(figsize=(20,5))
    plt.plot(df_test.index, df_test['sales'])
    plt.plot(df_test.index, df_test['Prediccion'],color='r')

    train = df

    scaler.fit(train)
    train=scaler.transform(train)
    n_input=12
    n_features=1

    generator=TimeseriesGenerator(train,train,length=n_input,batch_size=6)

    model.fit_generator(generator, epochs=180)

    pred_list=[]

    batch=train[-n_input:].reshape((1,n_input,n_features))

    for i in range(n_input):
        pred_list.append(model.predict(batch)[0])
        batch=np.append(batch[:,1:,:],[[pred_list[i]]],axis=1)

    from pandas.tseries.offsets import DateOffset
    add_dates=[df.index[-1] + DateOffset(months=x) for x in range(0,13)]
    future_dates=pd.DataFrame(index=add_dates[1:],columns=df.columns)

    df_predict=pd.DataFrame(scaler.inverse_transform(pred_list),
                            index=future_dates[-n_input:].index, columns=['Prediccion'])

    df_proj=pd.concat([df,df_predict],axis=1)

    plt.figure(figsize=(10,4))
    plt.plot(df_proj.index, df_proj['sales'])
    plt.plot(df_proj.index, df_proj['Prediccion'],color='r')
    plt.legend(loc='best',fontsize='large')
    plt.xticks(fontsize=12)
    plt.yticks(fontsize=12)
    plt.show()

    df_proj.tail(14)

    #df_proj.tail(14).to_csv(str(filename) + '.csv',index=False)

Пожалуйста, помогите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...