Spaces:
Sleeping
Sleeping
import gradio as gr | |
import joblib | |
import pandas as pd | |
import numpy as np | |
# Charger le modèle en spécifiant le chemin absolu | |
model_path = "./linear_regression_model.joblib" | |
try: | |
lr = joblib.load(model_path) | |
except FileNotFoundError: | |
raise FileNotFoundError(f"Le fichier modèle '{model_path}' est introuvable. Vérifiez le chemin.") | |
# Fonction de prédiction unique | |
def predict_price(kms_driven, present_price, fuel_type, seller_type, transmission, age): | |
# Encodage des variables catégoriques | |
fuel_type_mapping = {"Petrol": 0, "Diesel": 1, "CNG": 2} | |
seller_type_mapping = {"Dealer": 0, "Individual": 1} | |
transmission_mapping = {"Manual": 0, "Automatic": 1} | |
try: | |
# Conversion des types et gestion des encodages | |
fuel_type = fuel_type_mapping.get(fuel_type, -1) | |
seller_type = seller_type_mapping.get(seller_type, -1) | |
transmission = transmission_mapping.get(transmission, -1) | |
if fuel_type == -1 or seller_type == -1 or transmission == -1: | |
return "Erreur : Valeurs non reconnues pour les types de carburant, vendeur ou transmission." | |
# Création de l'entrée pour le modèle | |
features = np.array([kms_driven, present_price, fuel_type, seller_type, transmission, age]).reshape(1, -1) | |
# Prédiction | |
prediction = lr.predict(features)[0] | |
return max(round(prediction, 2), 0) # S'assurer que le prix prédit n'est pas négatif | |
except Exception as e: | |
return f"Erreur lors de la prédiction : {str(e)}" | |
# Fonction de prédiction multiple à partir d'un fichier CSV | |
def predict_from_csv(file): | |
# Encodage des variables catégoriques | |
fuel_type_mapping = {"Petrol": 0, "Diesel": 1, "CNG": 2} | |
seller_type_mapping = {"Dealer": 0, "Individual": 1} | |
transmission_mapping = {"Manual": 0, "Automatic": 1} | |
try: | |
# Charger le fichier CSV | |
data = pd.read_csv(file) | |
# Vérifier si les colonnes nécessaires sont présentes | |
required_columns = ["Kms_Driven", "Present_Price", "Fuel_Type", "Seller_Type", "Transmission", "Age"] | |
missing_columns = [col for col in required_columns if col not in data.columns] | |
if missing_columns: | |
return f"Erreur : Colonnes manquantes dans le fichier CSV : {', '.join(missing_columns)}" | |
# Remplacer les valeurs catégoriques par leur encodage | |
data["Fuel_Type"] = data["Fuel_Type"].map(fuel_type_mapping) | |
data["Seller_Type"] = data["Seller_Type"].map(seller_type_mapping) | |
data["Transmission"] = data["Transmission"].map(transmission_mapping) | |
# Vérifier si des valeurs non reconnues sont présentes | |
if data[["Fuel_Type", "Seller_Type", "Transmission"]].isnull().any().any(): | |
return "Erreur : Valeurs non reconnues pour Fuel_Type, Seller_Type ou Transmission dans le fichier." | |
# Extraire les caractéristiques et effectuer les prédictions | |
features = data[required_columns].values | |
predictions = lr.predict(features) | |
# Ajouter les prédictions au DataFrame | |
data["Predicted_Price"] = [max(pred, 0) for pred in predictions] # S'assurer que les prix prédits ne sont pas négatifs | |
return data | |
except Exception as e: | |
return f"Erreur lors de la prédiction : {str(e)}" | |
# Interface Gradio pour la prédiction unique | |
simple_input_labels = [ | |
gr.Number(label="Kms_Driven"), | |
gr.Number(label="Present_Price"), | |
gr.Dropdown(choices=["Petrol", "Diesel", "CNG"], label="Fuel_Type"), | |
gr.Dropdown(choices=["Dealer", "Individual"], label="Seller_Type"), | |
gr.Dropdown(choices=["Manual", "Automatic"], label="Transmission"), | |
gr.Number(label="Age"), | |
] | |
simple_output = gr.Number(label="Predicted Price") | |
# Interface Gradio pour la prédiction multiple via un fichier CSV | |
csv_input = gr.File(label="Déposez votre fichier CSV") | |
csv_output = gr.Dataframe(label="Prédictions avec fichier CSV") | |
# Interface combinée | |
interface = gr.TabbedInterface( | |
[ | |
gr.Interface( | |
fn=predict_price, | |
inputs=simple_input_labels, | |
outputs=simple_output, | |
title="Car Price Prediction (Unique)", | |
description="Prédisez le prix d'une voiture en entrant une seule série de caractéristiques.", | |
), | |
gr.Interface( | |
fn=predict_from_csv, | |
inputs=csv_input, | |
outputs=csv_output, | |
title="Car Price Prediction (Multiple)", | |
description="Téléversez un fichier CSV contenant les données des voitures pour obtenir les prédictions de prix.", | |
), | |
], | |
tab_names=["Prédiction Unique", "Prédiction Multiple"] | |
) | |
# Lancer l'application | |
if __name__ == "__main__": | |
interface.launch() | |