# 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()