File size: 2,391 Bytes
505bef6
7831bed
 
 
 
e93633b
7831bed
505bef6
 
 
 
 
 
 
 
 
 
 
 
e93633b
b93c54b
7831bed
505bef6
e93633b
 
505bef6
e93633b
e7d6af8
e93633b
 
edf8945
 
e93633b
edf8945
 
 
e93633b
edf8945
e7d6af8
edf8945
 
 
 
 
 
 
 
 
 
7831bed
edf8945
 
 
7831bed
e93633b
edf8945
7831bed
edf8945
 
 
7831bed
 
e7d6af8
8cd62e8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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)