File size: 4,752 Bytes
b41c855 db98459 b41c855 7a7942a 6f6d525 b41c855 51f0961 6f6d525 b41c855 6f6d525 b41c855 6f6d525 919bf04 6f6d525 db98459 aeae2d5 db98459 aeae2d5 db98459 aeae2d5 db98459 aeae2d5 db98459 aeae2d5 919bf04 aeae2d5 919bf04 aeae2d5 db98459 aeae2d5 51f0961 aeae2d5 6f6d525 aeae2d5 db98459 919bf04 b41c855 aeae2d5 51f0961 aeae2d5 db98459 51f0961 919bf04 aeae2d5 51f0961 6f6d525 b41c855 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
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()
|