File size: 4,007 Bytes
2ce4d34
 
 
 
 
5f54337
2ce4d34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3578429
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2ce4d34
 
 
 
3578429
 
 
 
2ce4d34
 
 
 
 
3578429
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# Fonction de prédiction
import gradio as gr
import joblib
import pandas as pd
import numpy as np
from keras.models import load_model
#importer la liste des noms des variables catégorielles
cat_data_columns = joblib.load('cat_data_columns.joblib')
# importer les encodeurs
encoder0 = joblib.load('Extracurricular Activities.joblib')
# importer le modèle
model = load_model('DNN_model.h5')
# importer le scaler
scaler = joblib.load('scaler.joblib')
# Fonction de prédiction simple
def prediction_func(Hours_Studied,Previous_Scores, Extracurricular_Activities, Sleep_Hours, Sample_Question_Papers_Practiced):
  # encoder les valeurs
  Extracurricular_Activities = encoder0.transform([Extracurricular_Activities])[0]
    # vecteur des valeurs
  x_new = np.array([Hours_Studied,Previous_Scores, Extracurricular_Activities, Sleep_Hours, Sample_Question_Papers_Practiced]).reshape(1, -1)
  # normaliser les valeurs
  x_new = scaler.transform(x_new)
  # prédire la valeur
  y_pred = np.round(model.predict(x_new))
  # retourner
  return y_pred[0][0]

# Fonction de prédiction multiple
def prediction_func_csv(file):
  # Lire le fichier csv
  df = pd.read_csv(file)
  predictions = []
  # Boucle sur les lignes du dataframe
  for row in df.iloc[:, :].values:
    # # nouvelle ligne avec les valeurs des Fuel_Type, Seller_Type et Transmission encodées
    # new_row = np.array([row[0], row[1], encoder0.transform([row[2]])[0], encoder1.transform([row[3]])[0], encoder2.transform([row[4]])[0], row[5]])
    # new_row = new_row.reshape(1,-1) # convertir en un 2D array
    # # Normaliser les données
    # new_row = scaler.transform(new_row)
    # # Prédire
    # y_pred = xgb.predict(new_row)
    # # Arrondir
    # y_pred = round(y_pred[0],2)
    y_pred = prediction_func(row[0], row[1], row[2], row[3], row[4])
    # ajouter la prediction sur List_predictions
    predictions.append(y_pred)

  df['Performance'] = predictions
  df.to_csv('predictions.csv', index = False)
  return 'predictions.csv'

# load les valeurs uniques
uniques = []
for i in range(len(cat_data_columns)):
  uniques.append(joblib.load(f'{cat_data_columns[i]}_unique.joblib'))
# définir les blocks
demo = gr.Blocks(theme='shivi/calm_seafoam')

# Créer les inputs
inputs = [gr.Number(label='Hours Studied'),
          gr.Number(label='Previous Score'),
          gr.Radio(choices=['Yes', 'No'], label='Extracurricular Activities'),
          gr.Number(label='Sleep Hours'),
          gr.Number(label='Sample Question Papers Practiced')]
# Créer les outputs
outputs = gr.Textbox(label='Performance')
# Créer l'interface 1
interface1 = gr.Interface(fn = prediction_func_csv,
                         inputs = inputs,
                         outputs = outputs,
                         title="Prédire la performance des élèves avec une seule entrée",
                         description = """Ce modèle d'apprentissage automatique nous permet de prédire la performance des élèves à partir des
                         Heures étudiées, des Scores précédents, des Activités parascolaires, des Heures de sommeil, des Exemples de sujets d'examen pratiqués .
                         """)
# Créer l'interface 2
interface2 = gr.Interface(fn = prediction_func_csv,
                         inputs = gr.File(label='Upload a csv file'),
                          outputs = gr.File(label='Download a csv file'),
                         title="Prédire la performance des élèves avec plusieurs entrées",
                         description = """"Ce modèle d'apprentissage automatique nous permet de prédire la performance des élèves à partir des
                         Heures étudiées, des Scores précédents, des Activités parascolaires, des Heures de sommeil, des Exemples de sujets d'examen pratiqués.
                         """)

# faire un tabbing des interfaces
with demo:
  gr.TabbedInterface([interface1, interface2], ['Simple Prediction', 'Prédiction multiple'])

# lancer l'interface
demo.launch()