ThomasDo's picture
add install the packages
0733e8d
raw
history blame
2.62 kB
# pip install streamlit fbprophet yfinance plotly
!pip install yfinance
!pip install prophet
import streamlit as st
from datetime import date, datetime, timedelta
import yfinance as yf
from prophet import Prophet
from prophet.plot import plot_plotly
from plotly import graph_objs as go
import pandas as pd
# TODAY = date.today().strftime("%Y-%m-%d")
TODAY = datetime.today()
st.title('Stock Forecast')
st.markdown('This app is built to predict the stock market performance')
stocks = ('TSLA', 'FB', 'NVDA', 'BABA', 'GOOG', 'AAPL', 'MSFT', 'GME', 'AMZN', 'XIACF')
selected_stock = st.selectbox('Select dataset for prediction', stocks)
n_years = st.slider('Years of prediction:', 1, 4)
period = n_years * 365
new_resolution = st.radio(
"Do you want to get the higher resolution or short time interval, please choose one:",
('In 1 day', 'In 1 hour', 'In 5 minutes'))
if new_resolution == 'In 5 minutes':
new_interval = "5m"
START = TODAY - timedelta(days=30)
elif new_resolution == 'In 1 hour':
new_interval = "1h"
START = TODAY - timedelta(days=365)
else:
new_interval = "1d"
START = "2018-01-01"
@st.cache
def load_data(ticker):
data = yf.download(ticker, START, TODAY, interval = new_interval)
data.reset_index(inplace=True)
return data
data_load_state = st.text('Loading data...')
data = load_data(selected_stock)
data_load_state.text('... Data loaded, well done!')
@st.cache
def convert_df(df):
# IMPORTANT: Cache the conversion to prevent computation on every rerun
return df.to_csv().encode('utf-8')
csv = convert_df(data)
st.download_button(
label="Download data as CSV",
data=csv,
file_name='stock_data.csv',
mime='text/csv',
)
st.subheader('Raw data')
st.write(data.tail())
# Plot raw data
def plot_raw_data():
fig = go.Figure()
fig.add_trace(go.Scatter(x=data['Date'], y=data['Open'], name="stock_open"))
fig.add_trace(go.Scatter(x=data['Date'], y=data['Close'], name="stock_close"))
fig.layout.update(title_text='Time Series data with Rangeslider', xaxis_rangeslider_visible=True)
st.plotly_chart(fig)
plot_raw_data()
# Predict forecast with Prophet.
df_train = data[['Date','Close']]
df_train = df_train.rename(columns={"Date": "ds", "Close": "y"})
m = Prophet()
m.fit(df_train)
future = m.make_future_dataframe(periods=period)
forecast = m.predict(future)
# Show and plot forecast
st.subheader('Forecast data')
st.write(forecast.tail())
st.write(f'Forecast plot for {n_years} years')
fig1 = plot_plotly(m, forecast)
st.plotly_chart(fig1)
st.write("Forecast components")
fig2 = m.plot_components(forecast)
st.write(fig2)