import os import gradio as gr import joblib import pandas as pd import numpy as np from keras.models import load_model # Vérification des fichiers nécessaires required_files = [ 'Student_Performance.csv', 'encoder.joblib', 'scaler.joblib', 'DNN_model_new.keras' ] missing_files = [f for f in required_files if not os.path.exists(f)] if missing_files: raise FileNotFoundError(f"Les fichiers suivants sont manquants : {missing_files}") # Chargement des outils encoder = joblib.load('encoder.joblib') scaler = joblib.load('scaler.joblib') # Chargement du modèle try: modele = load_model('DNN_model_new.keras') print("✅ Modèle chargé avec succès.") except Exception as e: print(f"❌ Erreur lors du chargement du modèle : {e}") modele = None # Fonction de prédiction multiple def prediction_batch(input_file): """ Prédit l'indice de performance pour chaque étudiant dans un fichier CSV. Le fichier doit contenir les colonnes : 'Hours Studied', 'Previous Scores', 'Extracurricular Activities', 'Sleep Hours', 'Sample Question Papers Practiced' """ df_input = pd.read_csv(input_file) # Encoder la variable catégorielle df_input['Extracurricular Activities'] = encoder.transform(df_input['Extracurricular Activities']) # Sélectionner les colonnes dans le bon ordre X = df_input[['Hours Studied', 'Previous Scores', 'Extracurricular Activities', 'Sleep Hours', 'Sample Question Papers Practiced']].values # Normaliser X_scaled = scaler.transform(X) # Prédire y_pred = modele.predict(X_scaled).flatten() # Ajouter la prédiction au DataFrame df_input['Predicted Performance Index'] = np.round(y_pred, 2) return df_input # Interface Gradio pour prédiction multiple inputs = gr.File(label="Charger un fichier CSV avec les colonnes attendues") outputs = gr.Dataframe(label="Résultats avec prédiction") interface = gr.Interface( fn=prediction_batch, inputs=inputs, outputs=outputs, title='Prédiction multiple des performances des étudiants', description="Chargez un fichier CSV avec les colonnes : 'Hours Studied', 'Previous Scores', 'Extracurricular Activities', 'Sleep Hours', 'Sample Question Papers Practiced'. Les valeurs pour 'Extracurricular Activities' doivent être 'Yes' ou 'No'." ) if __name__ == "__main__": interface.launch(share=True)