ARTURART's picture
Update app.py
4a7ecb4 verified
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()