Spaces:
Build error
Build error
| 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() | |