File size: 2,987 Bytes
fa2f87f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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("C:/Users/Joyson/Downloads/Kaggle datasets/jena_climate_2009_2016.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 a day")
interface.launch()