Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,35 +1,40 @@
|
|
| 1 |
import gradio as gr
|
| 2 |
import numpy as np
|
| 3 |
import pickle
|
|
|
|
| 4 |
from sklearn.preprocessing import LabelEncoder, StandardScaler
|
| 5 |
from sklearn.linear_model import Ridge
|
| 6 |
|
| 7 |
-
# Charger
|
| 8 |
with open('ridge_model.pkl', 'rb') as file:
|
| 9 |
ridge_model = pickle.load(file)
|
| 10 |
|
|
|
|
| 11 |
with open('scaler.pkl', 'rb') as file:
|
| 12 |
scaler = pickle.load(file)
|
| 13 |
|
| 14 |
-
|
| 15 |
-
|
|
|
|
|
|
|
| 16 |
|
| 17 |
-
|
| 18 |
-
label_encoder_seller = pickle.load(file)
|
| 19 |
-
|
| 20 |
-
with open('label_encoder_trans.pkl', 'rb') as file:
|
| 21 |
-
label_encoder_trans = pickle.load(file)
|
| 22 |
-
|
| 23 |
-
# Fonction pour effectuer une prédiction
|
| 24 |
def predict(Kms_Driven, Present_Price, Fuel_Type, Seller_Type, Transmission, Age):
|
| 25 |
try:
|
| 26 |
# Encoder les variables catégorielles
|
| 27 |
-
Fuel_Type_encoded = label_encoder_fuel.
|
| 28 |
-
Seller_Type_encoded = label_encoder_seller.
|
| 29 |
-
Transmission_encoded = label_encoder_trans.
|
| 30 |
|
| 31 |
# Préparer les caractéristiques d'entrée
|
| 32 |
-
input_features = np.array([
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
|
| 34 |
# Normaliser les données
|
| 35 |
input_features_scaled = scaler.transform(input_features)
|
|
@@ -42,66 +47,71 @@ def predict(Kms_Driven, Present_Price, Fuel_Type, Seller_Type, Transmission, Age
|
|
| 42 |
except Exception as e:
|
| 43 |
return f"Erreur : {str(e)}"
|
| 44 |
|
| 45 |
-
# Fonction pour
|
| 46 |
def predict_from_file(file):
|
| 47 |
try:
|
| 48 |
-
|
| 49 |
-
|
| 50 |
|
| 51 |
-
#
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 55 |
|
| 56 |
-
# Extraire les caractéristiques
|
| 57 |
-
features =
|
| 58 |
features_scaled = scaler.transform(features)
|
| 59 |
|
| 60 |
# Faire les prédictions
|
| 61 |
predictions = ridge_model.predict(features_scaled)
|
| 62 |
|
| 63 |
# Ajouter les prédictions au dataframe et retourner
|
| 64 |
-
|
| 65 |
-
return
|
| 66 |
|
| 67 |
except Exception as e:
|
| 68 |
return f"Erreur : {str(e)}"
|
| 69 |
|
| 70 |
-
#
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
gr.
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
]
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
# Définir
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
#
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
)
|
| 105 |
|
| 106 |
# Lancer l'application
|
| 107 |
-
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
import numpy as np
|
| 3 |
import pickle
|
| 4 |
+
import pandas as pd
|
| 5 |
from sklearn.preprocessing import LabelEncoder, StandardScaler
|
| 6 |
from sklearn.linear_model import Ridge
|
| 7 |
|
| 8 |
+
# Charger le modèle Ridge sauvegardé
|
| 9 |
with open('ridge_model.pkl', 'rb') as file:
|
| 10 |
ridge_model = pickle.load(file)
|
| 11 |
|
| 12 |
+
# Charger le scaler sauvegardé
|
| 13 |
with open('scaler.pkl', 'rb') as file:
|
| 14 |
scaler = pickle.load(file)
|
| 15 |
|
| 16 |
+
# Initialisation des encodeurs pour les variables catégorielles
|
| 17 |
+
label_encoder_fuel = LabelEncoder()
|
| 18 |
+
label_encoder_seller = LabelEncoder()
|
| 19 |
+
label_encoder_trans = LabelEncoder()
|
| 20 |
|
| 21 |
+
# Fonction pour effectuer une prédiction manuelle
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
def predict(Kms_Driven, Present_Price, Fuel_Type, Seller_Type, Transmission, Age):
|
| 23 |
try:
|
| 24 |
# Encoder les variables catégorielles
|
| 25 |
+
Fuel_Type_encoded = label_encoder_fuel.fit_transform([Fuel_Type])[0]
|
| 26 |
+
Seller_Type_encoded = label_encoder_seller.fit_transform([Seller_Type])[0]
|
| 27 |
+
Transmission_encoded = label_encoder_trans.fit_transform([Transmission])[0]
|
| 28 |
|
| 29 |
# Préparer les caractéristiques d'entrée
|
| 30 |
+
input_features = np.array([
|
| 31 |
+
Kms_Driven,
|
| 32 |
+
Present_Price,
|
| 33 |
+
Fuel_Type_encoded,
|
| 34 |
+
Seller_Type_encoded,
|
| 35 |
+
Transmission_encoded,
|
| 36 |
+
Age
|
| 37 |
+
]).reshape(1, -1)
|
| 38 |
|
| 39 |
# Normaliser les données
|
| 40 |
input_features_scaled = scaler.transform(input_features)
|
|
|
|
| 47 |
except Exception as e:
|
| 48 |
return f"Erreur : {str(e)}"
|
| 49 |
|
| 50 |
+
# Fonction pour prédire à partir d'un fichier CSV
|
| 51 |
def predict_from_file(file):
|
| 52 |
try:
|
| 53 |
+
# Charger les données du fichier CSV
|
| 54 |
+
df = pd.read_csv(file.name)
|
| 55 |
|
| 56 |
+
# Vérifier si les colonnes nécessaires existent dans le fichier
|
| 57 |
+
required_columns = ['Kms_Driven', 'Present_Price', 'Fuel_Type', 'Seller_Type', 'Transmission', 'Age']
|
| 58 |
+
if not all(col in df.columns for col in required_columns):
|
| 59 |
+
return "Erreur : Le fichier CSV doit contenir les colonnes suivantes : Kms_Driven, Present_Price, Fuel_Type, Seller_Type, Transmission, Age"
|
| 60 |
+
|
| 61 |
+
# Encoder les variables catégorielles
|
| 62 |
+
df['Fuel_Type'] = label_encoder_fuel.fit_transform(df['Fuel_Type'])
|
| 63 |
+
df['Seller_Type'] = label_encoder_seller.fit_transform(df['Seller_Type'])
|
| 64 |
+
df['Transmission'] = label_encoder_trans.fit_transform(df['Transmission'])
|
| 65 |
|
| 66 |
+
# Extraire les caractéristiques pour la prédiction
|
| 67 |
+
features = df[['Kms_Driven', 'Present_Price', 'Fuel_Type', 'Seller_Type', 'Transmission', 'Age']].values
|
| 68 |
features_scaled = scaler.transform(features)
|
| 69 |
|
| 70 |
# Faire les prédictions
|
| 71 |
predictions = ridge_model.predict(features_scaled)
|
| 72 |
|
| 73 |
# Ajouter les prédictions au dataframe et retourner
|
| 74 |
+
df['Prediction'] = predictions
|
| 75 |
+
return df
|
| 76 |
|
| 77 |
except Exception as e:
|
| 78 |
return f"Erreur : {str(e)}"
|
| 79 |
|
| 80 |
+
# Créer l'interface avec Gradio en utilisant gr.Blocks et demo.launch()
|
| 81 |
+
|
| 82 |
+
with gr.Blocks() as demo:
|
| 83 |
+
with gr.Tab("Prédiction Manuelle"):
|
| 84 |
+
# Définir les entrées pour la prédiction manuelle
|
| 85 |
+
inputs_manual = [
|
| 86 |
+
gr.Number(label="Kms Driven"),
|
| 87 |
+
gr.Number(label="Present Price"),
|
| 88 |
+
gr.Dropdown(["Petrol", "Diesel"], label="Fuel Type"),
|
| 89 |
+
gr.Dropdown(["Individual", "Dealer"], label="Seller Type"),
|
| 90 |
+
gr.Dropdown(["Manual", "Automatic"], label="Transmission"),
|
| 91 |
+
gr.Number(label="Age")
|
| 92 |
+
]
|
| 93 |
+
# Définir la sortie pour la prédiction manuelle
|
| 94 |
+
outputs_manual = gr.Textbox(label="Prédiction")
|
| 95 |
+
|
| 96 |
+
# Ajouter la fonction de prédiction manuelle dans le tab
|
| 97 |
+
gr.Button("Faire une Prédiction", elem_id="manual_predict_button").click(
|
| 98 |
+
fn=predict,
|
| 99 |
+
inputs=inputs_manual,
|
| 100 |
+
outputs=outputs_manual
|
| 101 |
+
)
|
| 102 |
+
|
| 103 |
+
with gr.Tab("Prédiction à partir d'un fichier CSV"):
|
| 104 |
+
# Définir l'entrée pour la prédiction à partir de fichier CSV
|
| 105 |
+
inputs_file = gr.File(label="Télécharger un fichier CSV")
|
| 106 |
+
# Définir la sortie pour le fichier CSV
|
| 107 |
+
outputs_file = gr.Dataframe(label="Prédictions depuis le fichier")
|
| 108 |
+
|
| 109 |
+
# Ajouter la fonction de prédiction à partir du fichier
|
| 110 |
+
gr.Button("Prédire à partir du fichier").click(
|
| 111 |
+
fn=predict_from_file,
|
| 112 |
+
inputs=inputs_file,
|
| 113 |
+
outputs=outputs_file
|
| 114 |
+
)
|
| 115 |
|
| 116 |
# Lancer l'application
|
| 117 |
+
demo.launch(debug=True)
|