import gradio as gr import numpy as np import pickle import pandas as pd from sklearn.preprocessing import LabelEncoder, StandardScaler from sklearn.linear_model import Ridge # Charger le modèle Ridge sauvegardé with open('ridge_model.pkl', 'rb') as file: ridge_model = pickle.load(file) # Charger le scaler sauvegardé with open('scaler.pkl', 'rb') as file: scaler = pickle.load(file) # Initialisation des encodeurs pour les variables catégorielles label_encoder_fuel = LabelEncoder() label_encoder_seller = LabelEncoder() label_encoder_trans = LabelEncoder() # Fonction pour effectuer une prédiction manuelle def predict(Kms_Driven, Present_Price, Fuel_Type, Seller_Type, Transmission, Age): try: # Encoder les variables catégorielles Fuel_Type_encoded = label_encoder_fuel.fit_transform([Fuel_Type])[0] Seller_Type_encoded = label_encoder_seller.fit_transform([Seller_Type])[0] Transmission_encoded = label_encoder_trans.fit_transform([Transmission])[0] # Préparer les caractéristiques d'entrée input_features = np.array([ Kms_Driven, Present_Price, Fuel_Type_encoded, Seller_Type_encoded, Transmission_encoded, Age ]).reshape(1, -1) # Normaliser les données input_features_scaled = scaler.transform(input_features) # Faire une prédiction prediction = ridge_model.predict(input_features_scaled) return prediction[0] except Exception as e: return f"Erreur : {str(e)}" # Fonction pour prédire à partir d'un fichier CSV def predict_from_file(file): try: # Charger les données du fichier CSV df = pd.read_csv(file.name) # Vérifier si les colonnes nécessaires existent dans le fichier required_columns = ['Kms_Driven', 'Present_Price', 'Fuel_Type', 'Seller_Type', 'Transmission', 'Age'] if not all(col in df.columns for col in required_columns): return "Erreur : Le fichier CSV doit contenir les colonnes suivantes : Kms_Driven, Present_Price, Fuel_Type, Seller_Type, Transmission, Age" # Encoder les variables catégorielles df['Fuel_Type'] = label_encoder_fuel.fit_transform(df['Fuel_Type']) df['Seller_Type'] = label_encoder_seller.fit_transform(df['Seller_Type']) df['Transmission'] = label_encoder_trans.fit_transform(df['Transmission']) # Extraire les caractéristiques pour la prédiction features = df[['Kms_Driven', 'Present_Price', 'Fuel_Type', 'Seller_Type', 'Transmission', 'Age']].values features_scaled = scaler.transform(features) # Faire les prédictions predictions = ridge_model.predict(features_scaled) # Ajouter les prédictions au dataframe et retourner df['Prediction'] = predictions return df except Exception as e: return f"Erreur : {str(e)}" # Créer l'interface avec Gradio en utilisant gr.Blocks et demo.launch() with gr.Blocks() as demo: with gr.Tab("Prédiction Manuelle"): # Définir les entrées pour la prédiction manuelle inputs_manual = [ gr.Number(label="Kms Driven"), gr.Number(label="Present Price"), gr.Dropdown(["Petrol", "Diesel"], label="Fuel Type"), gr.Dropdown(["Individual", "Dealer"], label="Seller Type"), gr.Dropdown(["Manual", "Automatic"], label="Transmission"), gr.Number(label="Age") ] # Définir la sortie pour la prédiction manuelle outputs_manual = gr.Textbox(label="Prédiction") # Ajouter la fonction de prédiction manuelle dans le tab gr.Button("Faire une Prédiction", elem_id="manual_predict_button").click( fn=predict, inputs=inputs_manual, outputs=outputs_manual ) with gr.Tab("Prédiction à partir d'un fichier CSV"): # Définir l'entrée pour la prédiction à partir de fichier CSV inputs_file = gr.File(label="Télécharger un fichier CSV") # Définir la sortie pour le fichier CSV outputs_file = gr.Dataframe(label="Prédictions depuis le fichier") # Ajouter la fonction de prédiction à partir du fichier gr.Button("Prédire à partir du fichier").click( fn=predict_from_file, inputs=inputs_file, outputs=outputs_file ) # Lancer l'application demo.launch(debug=True)