MariaEduarda3's picture
Update app.py
1a242fa verified
# A importação do sklearn/LogisticRegression é necessária caso o modelo não carregue# PEQUENA ALTERAÇÃO PARA FORÇAR O BUILD
import gradio as gr
import pandas as pd
import joblib
import numpy as np
from sklearn.linear_model import LogisticRegression
# A importação do sklearn/LogisticRegression é necessária caso o modelo não carregue
# --- 1. CARREGAR O MODELO ---
# O NOME DO ARQUIVO DEVE SER EXATAMENTE o que você subiu (modelo_chuva_lr.joblib)
MODEL_FILE = "modelo_chuva_lr.joblib"
try:
model = joblib.load(MODEL_FILE)
print(f"Modelo de previsão carregado: {MODEL_FILE}")
except Exception as e:
print(f"ERRO ao carregar o modelo {MODEL_FILE}. Usando um placeholder. Erro: {e}")
# Criação de um modelo placeholder caso o arquivo não seja encontrado
model = LogisticRegression()
X_fake = pd.DataFrame(np.random.rand(10, 5), columns=['TempMax', 'Umidade', 'Pressao', 'VelVento', 'Mes'])
y_fake = np.random.randint(0, 2, 10)
model.fit(X_fake, y_fake)
# --- 2. FUNÇÃO DE PREVISÃO ---
def prever_clima(temp_max, umidade_dia, pressao_dia, vel_vento, mes):
"""
Recebe as entradas do Gradio e retorna a previsão de chuva e probabilidade.
"""
# IMPORTANTE: A ordem das colunas e os nomes devem ser iguais aos do treinamento.
input_data = pd.DataFrame({
'TempMax': [temp_max],
'Umidade': [umidade_dia],
'Pressao': [pressao_dia],
'VelVento': [vel_vento],
'Mes': [mes]
})
try:
# Previsão de probabilidade da classe 1 (Chuva)
prob_chuva = model.predict_proba(input_data)[:, 1][0] * 100
# Classificação final
if prob_chuva > 50:
resultado = "Sim, há **alta probabilidade** de chuva!"
elif prob_chuva > 20:
resultado = "Probabilidade moderada de chuva."
else:
resultado = "Não, a probabilidade de chuva é **baixa**."
return resultado, f"{prob_chuva:.2f}%"
except Exception as e:
return f"Erro na previsão (Verifique os logs): {e}", "0.0%"
# --- 3. DEFINIÇÃO DA INTERFACE GRADIO ---
with gr.Blocks() as demo:
gr.Markdown("# 🌧️ Previsão de Chuvas (Modelo Simples)")
gr.Markdown("Este é um modelo de demonstração treinado em dados simulados de temperatura, umidade, pressão, vento e mês do ano.")
with gr.Row():
temp_max_input = gr.Slider(label="Temperatura Máxima Esperada (°C)", minimum=10, maximum=50, value=25, step=1)
umidade_input = gr.Slider(label="Umidade Relativa do Ar (%)", minimum=0, maximum=100, value=65, step=1)
with gr.Row():
pressao_input = gr.Slider(label="Pressão Atmosférica (hPa)", minimum=950, maximum=1050, value=1010, step=0.1)
vel_vento_input = gr.Slider(label="Velocidade Média do Vento (km/h)", minimum=0, maximum=100, value=15, step=1)
mes_input = gr.Slider(label="Mês do Ano (1=Jan, 12=Dez)", minimum=1, maximum=12, value=11, step=1)
predict_btn = gr.Button("🔮 Prever Chuva", variant="primary")
with gr.Row():
resultado_output = gr.Textbox(label="Veridicto", value="Aguardando dados...", interactive=False)
prob_output = gr.Textbox(label="Probabilidade de Chuva", value="0.0%", interactive=False)
predict_btn.click(
fn=prever_clima,
inputs=[temp_max_input, umidade_input, pressao_input, vel_vento_input, mes_input],
outputs=[resultado_output, prob_output]
)
demo.queue().launch()