bunarivenna's picture
Update app.py
42e3312 verified
import gradio as gr
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 yfinance as yf
from statsmodels.tsa.seasonal import seasonal_decompose
on_load="""
async()=>{
console.log("HELLO");
}
"""
def get_ans():
plt.close()
inp = "NVDA"
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)
the_max = max(np.asarray(df['Open']))
df3['Values'] = [i * the_max for i in df3['Values']]
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:])), (max(np.asarray(df['Open']))) * (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)
def get_seo():
plt.close()
time_step = 100
inp = "NVDA"
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))
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)
X_train, y_train = create_dataset(df1, time_step)
decompose_result_mult = seasonal_decompose(X_train, model="additive", period=time_step)
trend = decompose_result_mult.trend
seasonal = decompose_result_mult.seasonal
residual = decompose_result_mult.resid
z = [i[0] for i in trend]
z = pd.DataFrame(z, columns=['Values'])
z['index'] = range(1, len(z) + 1)
y = [i[0] for i in seasonal]
y = pd.DataFrame(y, columns=['Values'])
y['index'] = range(1, len(z) + 1)
a = [i[0] for i in residual]
a = pd.DataFrame(a, columns=['Values'])
a['index'] = range(1, len(a) + 1)
return gr.update(visible=True, value=z, x='index', y='Values', height=500, width=800), gr.update(visible=True, value=y[:100], x='index', y='Values', height=500, width=800), gr.update(visible=True, value=a, x='index', y='Values', height=500, width=800)
def get_info():
inp = "NVDA"
tickers = yf.Ticker(inp)
info = tickers.info
balance = tickers.balance_sheet
long_info= info['longBusinessSummary']
curr_rat = info['currentRatio']
quick_rat = info['quickRatio']
short_rat = info['shortRatio']
debt_eq = info['debtToEquity']
volume = info['volume']
market_cap = info['marketCap']
curr_price = info['currentPrice']
rev_per = info['revenuePerShare']
return long_info, curr_rat, quick_rat, short_rat, debt_eq, volume, market_cap, curr_price, rev_per
with gr.Blocks() as demo:
with gr.Row().style(equal_height=True):
with gr.Column():
gr.Markdown("<center><h1>Stock Analysis NVDA<h1></center>")
with gr.Row():
with gr.Column():
Name_of_the_company = "NVDA"
gr.Markdown("<center><h2>Analysis<h2></center>")
gr.Markdown("<center><h3>Inportant Information</h3></center>")
info1 = gr.Textbox()
gr.Markdown("<h4>Insightful Ratios</h4>")
with gr.Row():
ratio1 = gr.Textbox(label='Current Ratio')
ratio2 = gr.Textbox(label='Quick Ratio')
ratio3 = gr.Textbox(label='Short Ratio')
ratio4 = gr.Textbox(label='Debt to Equity Ratio')
gr.Markdown("<center><h3>General Information</h3></center>")
with gr.Row():
curr_price = gr.Textbox(label='Current Price of Stock')
rev_per = gr.Textbox(label='Revenue per Share')
vol = gr.Textbox(label='Volume')
mar_cap = gr.Textbox(label='Market Cap')
gr.Markdown("<h3>Regression Trends of Price<h3>")
with gr.Tab("Overall Trend"):
trend_g = gr.LinePlot(visible=False, label='Trend of stock over its lifetime', height=1000, width=1000)
with gr.Tab("Seasonal Trends"):
Seaso = gr.LinePlot(visible=False,label="This is for one season", height=1000, width=1000)
with gr.Tab("Residual Variation"):
resid = gr.LinePlot(visible=False, label="Residual Variation over time", height=1000, width=1000)
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)
demo.load(get_ans, 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], _js=on_load)
demo.load(get_info, outputs=[info1, ratio1, ratio2, ratio3, ratio4, vol, mar_cap, curr_price, rev_per], _js=on_load)
demo.load(get_seo, outputs=[trend_g, Seaso, resid], _js=on_load)
demo.launch(inline=False)