AnoshDamania's picture
Create app.py
8c8fd10
raw
history blame
6.74 kB
import pandas as pd
import numpy as np
import math
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import LSTM
import gradio as gr
import yfinance as yf
def get_ans(inp):
tickers = yf.Tickers(inp)
x = tickers.tickers[inp].history(period="15y")
df = x
df.reset_index(inplace=True)
df1 = df.reset_index()['Close']
df['Date'] = pd.to_datetime(df['Date'])
scaler = MinMaxScaler(feature_range=(0, 1))
df1 = scaler.fit_transform(np.array(df1).reshape(-1, 1))
training_size = int(len(df1) * 0.65)
test_size = len(df1) - training_size
train_data, test_data = df1[0:training_size, :], df1[training_size:len(df1), :1]
def create_dataset(dataset, time_step=1):
dataX, dataY = [], []
for i in range(len(dataset) - time_step - 1):
a = dataset[i:(i + time_step), 0]
dataX.append(a)
dataY.append(dataset[i + time_step, 0])
return np.array(dataX), np.array(dataY)
time_step = 100
X_train, y_train = create_dataset(train_data, time_step)
X_test, ytest = create_dataset(test_data, time_step)
X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(100, 1)))
model.add(LSTM(50, return_sequences=True))
model.add(LSTM(50))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(X_train,y_train,validation_data=(X_test,ytest),epochs=2,batch_size=64,verbose=1)
train_predict=model.predict(X_train)
test_predict=model.predict(X_test)
train_predict=scaler.inverse_transform(train_predict)
test_predict=scaler.inverse_transform(test_predict)
look_back=100
trainPredictPlot = np.empty_like(df1)
trainPredictPlot[:, :] = np.nan
trainPredictPlot[look_back:len(train_predict)+look_back, :] = train_predict
# shift test predictions for plotting
testPredictPlot = np.empty_like(df1)
testPredictPlot[:, :] = np.nan
testPredictPlot[len(train_predict)+(look_back*2)+1:len(df1)-1, :] = test_predict
# plot baseline and predictions
plt.plot(scaler.inverse_transform(df1))
plt.plot(trainPredictPlot)
plt.plot(testPredictPlot)
x_input=test_data[341:].reshape(1,-1)
resize_var = x_input.size
temp_input=list(x_input)
temp_input=temp_input[0].tolist()
lst_output=[]
n_steps=100
i=0
while(i<30):
if(len(temp_input)>100):
#print(temp_input)
x_input=np.array(temp_input[1:])
# print("{} day input {}".format(i,x_input))
x_input=x_input.reshape(1,-1)
x_input = x_input.reshape((1, x_input.size, 1))
#print(x_input)
yhat = model.predict(x_input, verbose=0)
# print("{} day output {}".format(i,yhat))
temp_input.extend(yhat[0].tolist())
temp_input=temp_input[1:]
#print(temp_input)
lst_output.extend(yhat.tolist())
i=i+1
else:
x_input = x_input.reshape((1, n_steps,1))
yhat = model.predict(x_input, verbose=0)
# print(yhat[0])
temp_input.extend(yhat[0].tolist())
# print(len(temp_input))
lst_output.extend(yhat.tolist())
i=i+1
day_new=np.arange(1,101)
day_pred=np.arange(101,131)
df3=df1. tolist()
df3.extend (lst_output)
len_lis = len(lst_output)
df3=pd.DataFrame(df3, columns=['Values'])
df3['index']=range(1, len(df3) + 1)
lst_output = pd.DataFrame(lst_output, columns=["Values"])
lst_output['index']=range(1, len(lst_output) + 1)
return plt, gr.update(visible=True,value=df, x="Date",y="Open", height=500, width=800),gr.update(visible=True,value=df[-300:], x="Date",y="Open", height=500, width=800),gr.update(visible=True,value=df[-30:], x="Date",y="Open", height=500, width=800), max(np.asarray(df['Open'])), min(np.asarray(df['Open'])), max(np.asarray(df['Open'])[-300:]), min(np.asarray(df['Open'][-300:])), max(np.asarray(df['Open'])[-30:]), min(np.asarray(df['Open'][-30:])), lst_output["Values"][0], gr.update(visible=True,value=lst_output, x="index",y="Values", height=500, width=800), gr.update(visible=True,value=df3, x="index",y="Values", height=500, width=800), gr.update(visible=True,value=df3[-300:], x="index",y="Values", height=500, width=800)
with gr.Blocks() as demo:
with gr.Row().style(equal_height=True):
with gr.Column():
gr.Markdown("<center><h1>BI Project<h1></center>")
gr.Markdown("<center><h3>Give the Ticker of the company you want to analyse. We will provide complete insights on the given company.</h3></center>")
with gr.Row():
with gr.Column():
Name_of_the_company = gr.Textbox(placeholder="eg, GOOG / MSFT / AAPL", label="TICKER of the company")
btn = gr.Button("ANALYSE")
gr.Markdown("<center><h2>Analysis<h2></center>")
gr.Markdown("<h3>Regression Trends of Price<h3>")
mp = gr.Plot()
gr.Markdown("<h3>Price over time<h3>")
with gr.Tab("All Time"):
mp1 = gr.LinePlot(visible=False, label="All time", height=1000, width=1000)
with gr.Row():
Max_all = gr.Textbox(placeholder="The Maximum price the stock has ever reached", label='Maximum of all time')
Min_all = gr.Textbox(placeholder="The Minimum price the stock has ever reached", label="Minimum of all time")
with gr.Tab("Past year"):
mp2 = gr.LinePlot(visible=False, label="Last year")
with gr.Row():
Max_year = gr.Textbox(placeholder="The Maximum price for the last year", label='Maximum')
Min_year = gr.Textbox(placeholder="The Minimum price for the last year", label="Minimum")
with gr.Tab("Past few Days"):
mp3 = gr.LinePlot(visible=False, label="Past few Days")
with gr.Row():
Max_rec = gr.Textbox(placeholder="The Maximum price for the last few days", label='Recent Maximum')
Min_rec = gr.Textbox(placeholder="The Minimum price for the last few days", label="Recent Minimum")
gr.Markdown("<center><h2>Predictive Analysis</h2></center>")
Next_day = gr.Textbox(placeholder="Predicted price for tomorrow", label="Predicted price for Tomorrow")
Next_plot = gr.LinePlot(visible=False)
Next_plot_all = gr.LinePlot(visible=False)
Next_plot_year = gr.LinePlot(visible=False)
btn.click(get_ans, inputs=Name_of_the_company, outputs= [mp,mp1,mp2,mp3, Max_all, Min_all,Max_year, Min_year, Max_rec, Min_rec, Next_day, Next_plot, Next_plot_all, Next_plot_year])
demo.launch(inline = False)