Spaces:
Sleeping
Sleeping
import yfinance as yf | |
import pandas as pd | |
import matplotlib.pyplot as plt | |
from prophet import Prophet | |
import gradio as gr | |
from datetime import datetime | |
def previsao_precos(ticker, start_date, end_date, future_date): | |
# Converter as datas de string para datetime | |
try: | |
start_date = pd.to_datetime(start_date) | |
end_date = pd.to_datetime(end_date) | |
future_date = pd.to_datetime(future_date) | |
except ValueError: | |
return "Erro: Verifique o formato das datas. Use YYYY-MM-DD.", None | |
# Obter dados históricos | |
data = yf.download(ticker, start=start_date, end=end_date) | |
data.reset_index(inplace=True) | |
data = data[['Date', 'Close']] | |
data.columns = ['ds', 'y'] | |
if data.empty: | |
return "Não foram encontrados dados para o intervalo de datas especificado.", None | |
# Ajustar o modelo Prophet | |
model = Prophet() | |
model.fit(data) | |
# Fazer previsões | |
future = model.make_future_dataframe(periods=(future_date - data['ds'].max()).days, freq='B') | |
forecast = model.predict(future) | |
# Criar gráfico | |
plt.figure(figsize=(12, 6)) | |
plt.plot(data['ds'], data['y'], label='Preço de Fechamento Real', color='blue') | |
plt.plot(forecast['ds'], forecast['yhat'], label='Previsão de Preço de Fechamento', color='orange', linestyle='--') | |
plt.fill_between(forecast['ds'], forecast['yhat_lower'], forecast['yhat_upper'], color='orange', alpha=0.2) | |
plt.title(f'Previsão de Preço de Fechamento de {ticker} até {future_date}') | |
plt.xlabel('Data') | |
plt.ylabel('Preço de Fechamento') | |
plt.xticks(rotation=45) | |
plt.legend() | |
plt.grid() | |
plt.savefig('grafico.png') | |
plt.close() | |
return forecast.tail(10).to_string(), 'grafico.png' | |
# Definir a interface Gradio | |
iface = gr.Interface( | |
fn=previsao_precos, | |
inputs=[ | |
gr.Textbox(label="Ticker da Ação", value="GOOG"), | |
gr.Textbox(label="Data de Início (YYYY-MM-DD)", value="2019-10-19"), | |
gr.Textbox(label="Data de Fim (YYYY-MM-DD)", value="2024-10-19"), | |
gr.Textbox(label="Data Futura para Previsão (YYYY-MM-DD)", value="2029-10-19") | |
], | |
outputs=[ | |
gr.Textbox(label="Tabela de Previsões"), | |
gr.Image(label="Gráfico de Previsão") | |
], | |
title="Previsão de Preço de Ações com Prophet", | |
description="Insira o ticker da ação e as datas para prever o preço de fechamento." | |
) | |
# Iniciar a interface | |
iface.launch() | |