Spaces:
Sleeping
Sleeping
import pandas as pd | |
import numpy as np | |
import requests | |
import gradio as gr | |
import joblib | |
from sklearn.ensemble import RandomForestRegressor | |
from huggingface_hub import hf_hub_download | |
from gradio_calendar import Calendar | |
from datetime import datetime | |
from datasets import load_dataset | |
REPO_ID = "Koaris/rf_france_07042024" | |
FILENAME = "random_forest_france_07_04_2024.pkl" | |
API_KEY = "AIzaSyBtymzLFj2GfDr-zkGjdDa3FH_senLwNkw" | |
def get_lat_lon(address,api_key=API_KEY): | |
response = requests.get(f'https://maps.googleapis.com/maps/api/geocode/json?address={address}&key={api_key}') | |
resp_json_payload = response.json() | |
coordinates = resp_json_payload['results'][0]['geometry']['location'] | |
return (coordinates['lat'], coordinates['lng']) | |
def compute_reliability(std_pred: float): | |
scores = pd.read_csv('scores_13072024.csv').iloc[:,1].tolist() | |
print(scores) | |
ct = 5 | |
for std_set in scores: | |
if std_pred < std_set: | |
reliability = ct | |
else: | |
ct-=1 | |
reliability = ct | |
return reliability | |
def predict_price(date: datetime ,room_count: int, address:str, surface: float , property_type: str ): | |
date = int(datetime.timestamp(date)) | |
latitude, longitude = get_lat_lon(address) | |
isHouse = (property_type == 'Maison') | |
rf_input = pd.DataFrame([{"date_mutation": date, "nombre_pieces_principales": room_count, "longitude" : longitude,"latitude":latitude, "surface_batie_totale": surface, "type_local_Maison": isHouse}]) | |
rf_pred = np.exp(rf.predict(rf_input)[0]) | |
predictions_all = np.array([tree.predict(rf_input) for tree in rf.estimators_]) | |
std_predict = np.std((predictions_all)) | |
reliability_index = compute_reliability(std_predict) | |
q1 = np.exp(np.quantile(predictions_all, 0.25)) | |
q2 = np.exp(np.quantile(predictions_all, 0.5)) | |
q3 = np.exp(np.quantile(predictions_all, 0.75)) | |
if (rf_pred <= q1) | (rf_pred >= q3): | |
return float(q1), float(q2), float(q3), reliability_index | |
else: | |
return float(q1), float(rf_pred), float(q3), reliability_index | |
if __name__ == '__main__': | |
rf = joblib.load(hf_hub_download(repo_id=REPO_ID, filename= FILENAME)) | |
with gr.Blocks() as demo: | |
date = Calendar(type='datetime', label='Date', info="Cliquez sur le calendrier pour choisir une date",value="2024-04-06") | |
room_count = gr.Slider(minimum=1,maximum=15, step=1, label='Nombre de Pieces') | |
address = gr.Text(value='8 Rue de la Boetie', placeholder="Saisissez l'addresse du bien", label = 'Addresse') | |
surface = gr.Number(label='Surface', info='Saisissez la surface du bien',value=30) | |
property_type = gr.Dropdown(choices=['Maison','Appartement'], label='Type de bien', info='Choisissez le type de bien') | |
estimation_button = gr.Button("Estimez le bien") | |
output1 = gr.Number(label='Estimation basse du prix au m2') | |
output2 = gr.Number(label='Estimation du prix au m2') | |
output3 = gr.Number(label='Estimation haute du prix au m2') | |
output4 = gr.Number(label='Indice de fiabilite') | |
estimation_button.click(fn=predict_price, inputs=[date, room_count, address, surface, property_type], outputs=[output1,output2,output3,output4],api_name='Estimation') | |
demo.launch(share=True) |