Alglege commited on
Commit
f3edb3b
·
verified ·
1 Parent(s): 86c3394

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +71 -61
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 les fichiers nécessaires
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
- with open('label_encoder_fuel.pkl', 'rb') as file:
15
- label_encoder_fuel = pickle.load(file)
 
 
16
 
17
- with open('label_encoder_seller.pkl', 'rb') as file:
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.transform([Fuel_Type])[0]
28
- Seller_Type_encoded = label_encoder_seller.transform([Seller_Type])[0]
29
- Transmission_encoded = label_encoder_trans.transform([Transmission])[0]
30
 
31
  # Préparer les caractéristiques d'entrée
32
- input_features = np.array([Kms_Driven, Present_Price, Fuel_Type_encoded, Seller_Type_encoded, Transmission_encoded, Age]).reshape(1, -1)
 
 
 
 
 
 
 
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 charger un fichier CSV et faire des prédictions
46
  def predict_from_file(file):
47
  try:
48
- import pandas as pd
49
- data = pd.read_csv(file.name)
50
 
51
- # Encoder et normaliser les données
52
- data['Fuel_Type'] = label_encoder_fuel.transform(data['Fuel_Type'])
53
- data['Seller_Type'] = label_encoder_seller.transform(data['Seller_Type'])
54
- data['Transmission'] = label_encoder_trans.transform(data['Transmission'])
 
 
 
 
 
55
 
56
- # Extraire les caractéristiques
57
- features = data[['Kms_Driven', 'Present_Price', 'Fuel_Type', 'Seller_Type', 'Transmission', 'Age']].values
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
- data['Prediction'] = predictions
65
- return data
66
 
67
  except Exception as e:
68
  return f"Erreur : {str(e)}"
69
 
70
- # Définir les entrées pour la prédiction manuelle
71
- inputs_manual = [
72
- gr.Number(label="Kms Driven"),
73
- gr.Number(label="Present Price"),
74
- gr.Dropdown(["Petrol", "Diesel"], label="Fuel Type"),
75
- gr.Dropdown(["Individual", "Dealer"], label="Seller Type"),
76
- gr.Dropdown(["Manual", "Automatic"], label="Transmission"),
77
- gr.Number(label="Age")
78
- ]
79
-
80
- # Définir la sortie
81
- outputs = gr.Textbox(label="Prédiction")
82
-
83
- # Définir l'entrée pour la prédiction à partir de fichier CSV
84
- inputs_file = gr.File(label="Télécharger un fichier CSV")
85
-
86
- # Définir la sortie pour le fichier CSV
87
- outputs_file = gr.Dataframe(label="Prédictions depuis le fichier")
88
-
89
- # Créer l'application Gradio avec deux onglets
90
- app = gr.Interface(
91
- fn=predict,
92
- inputs=inputs_manual,
93
- outputs=outputs,
94
- title="Prédictions avec le modèle Ridge",
95
- description="Entrez les valeurs des caractéristiques pour obtenir une prédiction."
96
- )
97
-
98
- # Ajouter un deuxième onglet pour la prédiction depuis un fichier CSV
99
- app.add_component(
100
- fn=predict_from_file,
101
- inputs=inputs_file,
102
- outputs=outputs_file,
103
- label="Prédiction à partir d'un fichier CSV"
104
- )
105
 
106
  # Lancer l'application
107
- app.launch(debug=True)
 
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)