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()