Layel21/srape
0
1import streamlit as st
2from datetime import date
3import yfinance as yf
4from prophet import Prophet
5from prophet.plot import plot_plotly
6from plotly import graph_objs as go
7
8START = "2015-01-01"
9TODAY = date.today().strftime("%Y-%m-%d")
10st.title("Stock Price Prediction App")
11
12stocks = ("AAPL", "GOOG", "MSFT", "AMZN")
13selected_stock = st.selectbox("Select stock for prediction", stocks)
14n_years = st.slider("Years of prediction", 1, 4)
15period = n_years * 365
16
17@st.cache_data
18def load_data(ticker):
19 data = yf.download(ticker, START, TODAY)
20 data.reset_index(inplace=True)
21 return data
22
23data_load_state = st.text("Loading data...")
24data = load_data(selected_stock)
25data_load_state.text("Loading data...done!")
26st.subheader("Raw data")
27data.columns = data.columns.droplevel(1)
28st.write(data.tail())
29
30#PLOT Raw Data
31def plot_raw_data():
32 fig = go.Figure()
33 fig.add_trace(go.Scatter(x=data["Date"], y=data["Open"],
34 name="Stock Open"))
35 fig.add_trace(go.Scatter(x=data["Date"], y=data["Close"],
36 name="Stock Close"))
37 fig.layout.update(title_text="Time Series Data",
38 xaxis_rangeslider_visible=True)
39 st.plotly_chart(fig)
40plot_raw_data()
41
42#PREDICTION AVEC PROPHET
43df_train = data[["Date", "Close"]]
44df_train = df_train.rename(columns={"Date": "ds", "Close": "y"})
45m = Prophet()
46m.fit(df_train)
47future = m.make_future_dataframe(periods=period)
48forecast = m.predict(future)
49#Show and plot forecast
50st.subheader("Forecast data")
51st.write(forecast.tail())
52st.write(f"Forecast plot for {n_years} years")
53fig1 = plot_plotly(m, forecast)
54st.plotly_chart(fig1)
55
56st.write("Forecast components")
57fig2 = m.plot_components(forecast)
58st.write(fig2)
59
60
61 