performances / app.py
SENEbabos's picture
Update app.py
edf8945 verified
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)