Spaces:
Sleeping
Sleeping
File size: 2,219 Bytes
23c88d4 0d01ec2 b277084 7185b69 ee6af49 696277a 1238274 240671f 0d01ec2 240671f 0d01ec2 be7f66e 240671f a5272ad 240671f 696277a 0d01ec2 4db4956 0d01ec2 4db4956 0d01ec2 a5272ad 4db4956 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
import gradio as gr
import yfinance as yf
from prophet import Prophet
import plotly.express as px
from datetime import datetime
import plotly.graph_objects as go
def download_data(ticker, start_date='2010-01-01'):
""" ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์ ์ ํ ํฌ๋งทํ
ํ๋ ํจ์ """
data = yf.download(ticker, start=start_date)
if data.empty:
raise ValueError(f"No data returned for {ticker}")
data.reset_index(inplace=True)
if 'Adj Close' in data.columns:
data = data[['Date', 'Adj Close']]
data.rename(columns={'Date': 'ds', 'Adj Close': 'y'}, inplace=True)
else:
raise ValueError("Expected 'Adj Close' in columns")
return data
def predict_future_prices(ticker, periods=1825): # 5๋
๊ฐ์ ๋ฐ์ดํฐ ์์ธก
data = yf.download(ticker, start="2010-01-01")['Adj Close'].reset_index()
data.rename(columns={'Date': 'ds', 'Adj Close': 'y'}, inplace=True)
model = Prophet(daily_seasonality=False, weekly_seasonality=False, yearly_seasonality=True)
model.fit(data)
future = model.make_future_dataframe(periods=periods, freq='D')
forecast = model.predict(future)
# Timestamp๋ฅผ ๋ฌธ์์ด๋ก ๋ณํ
forecast['ds'] = forecast['ds'].dt.strftime('%Y-%m-%d')
fig = go.Figure(data=[go.Scatter(x=forecast['ds'], y=forecast['yhat'], mode='lines', name='Forecast')])
fig.update_layout(title=f'5-Year Future Price Forecast for {ticker}', xaxis_title='Date', yaxis_title='Predicted Price')
return fig, forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].to_dict(orient='records')
# ์ด์ ์ด ํจ์๋ฅผ Gradio ์ธํฐํ์ด์ค์ ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉ์๊ฐ ์๊ฐํ๋ฅผ ๋ณผ ์ ์๊ฒ ํฉ๋๋ค.
# Gradio ์ธํฐํ์ด์ค ์ค์
with gr.Blocks() as app:
with gr.Row():
ticker_input = gr.Textbox(value="AAPL", label="Enter Stock Ticker")
forecast_button = gr.Button("Generate 5-Year Forecast")
forecast_chart = gr.Plot(label="Future Price Forecast")
forecast_data = gr.Dataframe(label="Forecast Data Table")
forecast_button.click(
fn=predict_future_prices,
inputs=ticker_input,
outputs=[forecast_chart, forecast_data]
)
app.launch()
|