ESJL's picture
Update salas.py
62fb2f9 verified
import gradio as gr
import pandas as pd
import numpy as np
import xgboost as xgb
import joblib
from sklearn.preprocessing import MinMaxScaler
def execute(FONTE, X, Y, RH, ANO_C, ATOTAL, ANO_DADO_ANO_2019, ANO_DADO_ANO_2020, ANO_DADO_ANO_2021, ANO_DADO_ANO_2022, Alvenaria_B, Alvenaria_D, Alvenaria_C, Alvenaria_E):
df = pd.DataFrame.from_dict({'FONTE': [FONTE],
'X': [X],
'Y': [Y],
'RH': [RH],
'ANO_C': [ANO_C],
'ATOTAL': np.log([ATOTAL]),
'ANO_DADO_ANO_2019': ANO_DADO_ANO_2019,
'ANO_DADO_ANO_2020': ANO_DADO_ANO_2020,
'ANO_DADO_ANO_2021': ANO_DADO_ANO_2021,
'ANO_DADO_ANO_2022': ANO_DADO_ANO_2022,
'Alvenaria_B': Alvenaria_B,
'Alvenaria_D': Alvenaria_D,
'Alvenaria_C': Alvenaria_C,
'Alvenaria_E': Alvenaria_E}
)
input_scaler = joblib.load("dados/salas/input_scaler_salas_comerciais_2023_v2.save")
df = input_scaler.transform(df)
cols = ['FONTE', 'X', 'Y', 'RH', 'ANO_C', 'ATOTAL', 'ANO_DADO_ANO_2019', 'ANO_DADO_ANO_2020', 'ANO_DADO_ANO_2021', 'ANO_DADO_ANO_2022', 'Alvenaria_B', 'Alvenaria_D', 'Alvenaria_C', 'Alvenaria_E']
aval = pd.DataFrame(df, columns = cols)
df = xgb.DMatrix(aval)
loaded_model = xgb.Booster()
loaded_model.load_model("dados/salas/SALAS_COMERCIAIS_2020_2021_2022_2023_v2.model")
pred = loaded_model.predict(df)
output_scaler = joblib.load("dados/salas/output_scaler_salas_comerciais_2023_v2.save")
pred = output_scaler.inverse_transform(np.array(pred).reshape(-1,1))
pred = np.exp(pred).tolist()
return f"""Valor do imóvel: R${round(pred[0][0], -2) * ATOTAL}"""
def load_inputs():
# Substituição de gr.inputs.Number -> gr.Number
# Substituição de default -> value
FONTE = gr.Number(value=0, label='Fonte: 0 - Transação | 1 - Oferta')
X = gr.Number(value=282122.159663, label='Longitude (SIRGAS 2000)')
# O Gradio aceita a notação 1.672718e+06 sem problemas como float
Y = gr.Number(value=1672718.0, label='Latitude (SIRGAS 2000)')
RH = gr.Number(value=150, label='Região Homogênea')
ANO_C = gr.Number(value=2022, label='Ano de Construção')
ATOTAL = gr.Number(value=80.0, label='Área Total')
# Campos de Ano
ANO_DADO_ANO_2019 = gr.Number(value=0, label='Ano 2019')
ANO_DADO_ANO_2020 = gr.Number(value=0, label='Ano 2020')
ANO_DADO_ANO_2021 = gr.Number(value=0, label='Ano 2021')
ANO_DADO_ANO_2022 = gr.Number(value=1, label='Ano 2022')
# Campos de Alvenaria
Alvenaria_B = gr.Number(value=0, label='Alvenaria (B)')
Alvenaria_C = gr.Number(value=1, label='Alvenaria (C)')
Alvenaria_D = gr.Number(value=0, label='Alvenaria (D)')
Alvenaria_E = gr.Number(value=0, label='Alvenaria (E)')
# Atenção: Mantive a ordem de retorno original (C e D estão invertidos no seu return)
return [
FONTE, X, Y, RH, ANO_C, ATOTAL,
ANO_DADO_ANO_2019, ANO_DADO_ANO_2020, ANO_DADO_ANO_2021, ANO_DADO_ANO_2022,
Alvenaria_B, Alvenaria_D, Alvenaria_C, Alvenaria_E
]
output_label = "Valor do imóvel (R$)"
title = 'Venda - Salas Comerciais'
description = '2.887 dados de Janeiro de 2019 a Dezembro de 2022'