import pandas as pd import matplotlib.pyplot as plt import numpy as np from keras.models import Sequential from sklearn.preprocessing import MinMaxScaler from keras.layers.core import Dense,Dropout,Activation from keras.layers.recurrent import LSTM import gradio as gr df_data=pd.read_csv("jena_climate_2009_2016.csv",parse_dates=["Date Time"],index_col=0) df=pd.DataFrame(df_data.loc[:,"T (degC)"]) df_fil=df["T (degC)"].resample("D").max() df1=pd.DataFrame(df_fil) min_max_scaler=MinMaxScaler(feature_range=(0,1)) dataset=min_max_scaler.fit_transform(df1['T (degC)'].values.reshape(-1,1)) train_size=int(len(dataset)*0.7) test_size=len(dataset)-train_size train=dataset[0:train_size,:] test=dataset[train_size:len(dataset),:] def create_dataset(dataset,time_step=6): x_ind,y_dep =[],[] for i in range(len(dataset)-time_step-1): a=dataset[i:(i+time_step),0] x_ind.append(a) y_dep.append(dataset[i+time_step,0]) return np.array(x_ind),np.array(y_dep) x_train,y_train=create_dataset(train,time_step=6) x_test,y_test=create_dataset(test,time_step=6) x_train=np.reshape(x_train,(x_train.shape[0],1,x_train.shape[1])) x_test=np.reshape(x_test,(x_test.shape[0],1,x_test.shape[1])) time_step=6 model_lstm=Sequential() model_lstm.add(LSTM(20,input_shape=(1,time_step))) model_lstm.add(Dense(1)) model_lstm.compile(loss="mean_squared_error",optimizer='adam') model_lstm.fit(x_train,y_train,epochs=150) y_pred=model_lstm.predict(x_test) y_pred=min_max_scaler.inverse_transform(y_pred) df2=pd.DataFrame(df_fil) def forecast_temp(no_of_samples): a= int(no_of_samples)*6 new_data = df2[-(a+1):-1] forecast_dataset=np.array(new_data) forecast_dataset=forecast_dataset.reshape(-1, 1) X=min_max_scaler.transform(forecast_dataset) TimeSteps=int(6) NumFeatures=int(1) no_of_samples=int(no_of_samples) X=X.reshape(no_of_samples,NumFeatures,TimeSteps) predicted_temp = model_lstm.predict(X) predicted_temp = min_max_scaler.inverse_transform(predicted_temp) predict_df=pd.DataFrame(list(map(lambda x: x[0], predicted_temp)),columns=["predictions"]) predict_df.reset_index(inplace=True) predict_df = predict_df.rename(columns = {'index':'DAYS'}) plt.figure(figsize=(15, 6)) range_history = len(new_data) range_future = list(range(range_history, range_history +len(predicted_temp))) plt.plot(np.arange(range_history), np.array(new_data),label='History') plt.plot(range_future, np.array(predicted_temp),label='Forecasted for RNN') plt.legend(loc='upper right') plt.xlabel('Time step (hour)') plt.ylabel('Stock Price') return predict_df,plt.gcf() interface = gr.Interface(fn = forecast_temp, inputs = gr.inputs.Slider(minimum=0, maximum=50, step=1, default=5, label="Number of Sample to Predict"), outputs = ["dataframe","plot"],description="Max Temp Prediction of next day") interface.launch()