Spaces:
Sleeping
Sleeping
File size: 3,206 Bytes
ed8e2d0 aa679c4 b2fc3fe ed8e2d0 e1f6083 ed8e2d0 1f00de5 bd9526f ed8e2d0 |
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 |
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import yfinance as yf
from keras.models import Sequential
from sklearn.preprocessing import MinMaxScaler
from keras.layers import Dense,Dropout,Activation
from keras.layers import LSTM
from datetime import date
import gradio as gr
def create_dataset(dataset,time_step=15):
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)
def stockprice(stockname,number_of_samples):
df_yahoo = yf.download(stockname,start='2023-01-01',end=date.today(),interval = "1h",progress=False,auto_adjust=True)
df=df_yahoo
df.index.rename('Date', inplace=True)
df=df.sort_values(by=['Date'],ignore_index=True)
min_max_scaler=MinMaxScaler(feature_range=(0,1))
dataset=min_max_scaler.fit_transform(df['Close'].values.reshape(-1,1))
train_size=int(len(df)*0.8)
test_size=len(df)-train_size
Train=dataset[0:train_size,:]
Test=dataset[train_size:len(dataset),:]
x_train,y_train=create_dataset(Train,time_step=15)
x_test,y_test=create_dataset(Test,time_step=15)
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=15
model=Sequential()
model.add(LSTM(20,input_shape=(1,time_step)))
model.add(Dense(1))
model.compile(loss="mean_squared_error",optimizer='adam')
model.fit(x_train,y_train,epochs=100,verbose=0)
y_pred=model.predict(x_test)
y_pred_RNN=min_max_scaler.inverse_transform(y_pred)
y_test=np.expand_dims(y_test,axis=1)
y_test=min_max_scaler.inverse_transform(y_test)
df1=df.drop(["Volume","Open","High","Low"],axis=1)
a= int(number_of_samples)*15
new_data = df1[-(a+1):-1]
last60prices=np.array(new_data)
last60prices=last60prices.reshape(-1, 1)
X=min_max_scaler.transform(last60prices)
TimeSteps=int(15)
NumFeatures=int(1)
number_of_samples=int(number_of_samples)
X=X.reshape(number_of_samples, NumFeatures, TimeSteps)
predicted_Price = model.predict(X)
predicted_Price = min_max_scaler.inverse_transform(predicted_Price)
pred_df=pd.DataFrame(list(map(lambda x: x[0], predicted_Price)),columns=["PREDICTIONS"])
pred_df.reset_index(inplace=True)
pred_df = pred_df.rename(columns = {'index':'HOURS'})
plt.figure(figsize=(15, 6))
range_history = len(new_data)
range_future = list(range(range_history, range_history +len(predicted_Price)))
plt.plot(np.arange(range_history), np.array(new_data),label='History')
plt.plot(range_future, np.array(predicted_Price),label='Forecasted for RNN')
plt.legend(loc='upper right')
plt.xlabel('Time step (hour)')
plt.ylabel('Stock Price')
return pred_df,plt.gcf()
interface = gr.Interface(fn = stockprice,
inputs = [gr.Textbox(lines=1, placeholder="Enter STOCK-TICKER", label="STOCKNAME"),
gr.Slider(minimum=0, maximum=150, step=1, label="Number of Sample to Predict")],
outputs = ["dataframe","plot"],
description="LSTM STOCK PREDICTION")
interface.launch() |