jashjj's picture
Create app.py
f77aad9 verified
Raw
History Blame Contribute Delete
2.55 kB
import streamlit as st
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from keras.models import load_model
import matplotlib.pyplot as plt
from datetime import datetime
import yfinance as yf
st.title("Stock Price Predictor App")
stock = st.text_input("Enter the Stock ID","GOOG")
end = datetime.now()
start = datetime(end.year-20,end.month,end.day)
google_data = yf.download(stock,start,end)
model = load_model("google_stock_prediction.keras")
st.subheader("Stock Data")
st.write(google_data)
splitting_len = int(len(google_data)*0.7)
x_test = pd.DataFrame(google_data.Close[splitting_len:])
def plot_graph(figsize,values,full_data,extra_data=0, extra_dataset =None):
fig = plt.figure(figsize = figsize)
plt.plot(values,"Orange")
plt.plot(full_data.Close,'b')
if extra_data:
plt.plot(extra_dataset)
return fig
st.subheader("Original Close price and MA for 250 days")
google_data['MA-250'] = google_data.Close.rolling(250).mean()
st.pyplot(plot_graph((15,6),google_data['MA-250'],google_data,0))
st.subheader("Original Close price and MA for 200 days")
google_data['MA-200'] = google_data.Close.rolling(200).mean()
st.pyplot(plot_graph((15,6),google_data['MA-200'],google_data,0))
st.subheader("Original Close price and MA for 100 days")
google_data['MA-100'] = google_data.Close.rolling(100).mean()
st.pyplot(plot_graph((15,6),google_data['MA-100'],google_data,0))
st.subheader("Original Close price and MA for 250 days and 100 Days")
st.pyplot(plot_graph((15,6),google_data['MA-250'],google_data,1,google_data["MA-100"]))
scaler= MinMaxScaler(feature_range = (0,1))
scaled_data = scaler.fit_transform(x_test[['Close']])
x_data= []
y_data = []
for i in range(100,len(scaled_data)):
x_data.append(scaled_data[i-100:i])
y_data.append(scaled_data[i])
x_data ,y_data = np.array(x_data),np.array(y_data)
predictions = model.predict(x_data)
inv_pre = scaler.inverse_transform(predictions)
inv_y_test = scaler.inverse_transform(y_data)
plotting_data = pd.DataFrame(
{
'original_test_data':inv_y_test.reshape(-1),
'Predictions':inv_pre.reshape(-1)
},
index = google_data.index[splitting_len+100:]
)
st.subheader("Original values vs predicted values")
st.write(plotting_data)
st.subheader("Original close price vs predicted close price")
fig = plt.figure(figsize = (15,6))
plt.plot(pd.concat([google_data.Close[:splitting_len+100],plotting_data],axis = 0))
plt.legend(["Data not used",'original test data','predicted test data'])
st.pyplot(fig)