Aliou12's picture
new application
919bf04
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()