Hamsy's picture
Update app.py
8a40925 verified
# Fonction de prédiction
import gradio as gr
import joblib
import pandas as pd
import numpy as np
# importer les encodeurs
encoder0 = joblib.load('job.joblib')
encoder1 = joblib.load('marital.joblib')
encoder2 = joblib.load('education.joblib')
encoder3 = joblib.load('housing.joblib')
encoder4 = joblib.load('loan.joblib')
encoder5 = joblib.load('contact.joblib')
encoder6 = joblib.load('month.joblib')
encoder7 = joblib.load('day_of_week.joblib')
encoder8 = joblib.load('poutcome.joblib')
# importer le modèle
gb = joblib.load('gb.joblib')
# importer le normaliseur
scaler = joblib.load('scaler.joblib')
def Pred_func(age,job, marital, education, housing, loan, contact, month,
day_of_week, duration, campaign, pdays, previous, poutcome):
# Encoder les valeurs des Fuel_Type, Seller_Type et Transmission
job = encoder0.transform([job])[0]
marital = encoder1.transform([marital])[0]
education = encoder2.transform([education])[0]
housing = encoder3.transform([housing])[0]
loan = encoder4.transform([loan])[0]
contact = encoder5.transform([contact])[0]
month = encoder6.transform([month])[0]
day_of_week = encoder7.transform([day_of_week])[0]
poutcome = encoder8.transform([poutcome])[0]
# vecteur des valeurs numériques
x_new = np.array([age,job, marital, education, housing, loan, contact, month,
day_of_week, duration, campaign, pdays, previous, poutcome])
x_new = x_new.reshape(1,-1) # convert en un 2D array
# Normaliser les données
x_new = scaler.transform(x_new)
# Prédire
y_pred = gb.predict(x_new)[0]
if y_pred == 1:
return 'Depot'
else:
return 'Pas de depot'
# Fonction de prédiction multiple
def Pred_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 = Pred_func(row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10], row[11], row[12], row[13])
# ajouter la prediction sur List_predictions
predictions.append(y_pred)
df['BANQUE'] = predictions
df.to_csv('predictions.csv', index = False)
return 'predictions.csv'
# définir les blocks
demo = gr.Blocks(theme='shivi/calm_seafoam')
# Créer les inputs
inputs = [gr.Number(label='age'),
gr.Radio(choices=['admin.', 'blue-collar', 'entrepreneur', 'housemaid', 'management',
'retired', 'self-employed', 'services', 'student', 'technician',
'unemployed', 'unknown'], label='job'),
gr.Radio(choices=['divorced', 'married', 'single', 'unknown'], label='marital'),
gr.Radio(choices=['basic.4y', 'basic.6y', 'basic.9y', 'high.school', 'illiterate',
'professional.course', 'university.degree', 'unknown'], label='education'),
gr.Radio(choices=['no', 'unknown', 'yes'], label='housing'),
gr.Radio(choices=['no', 'unknown', 'yes'], label='loan'),
gr.Radio(choices=['cellular', 'telephone'], label='contact'),
gr.Radio(choices=['apr', 'aug', 'dec', 'jul', 'jun', 'mar', 'may', 'nov', 'oct',
'sep'], label='month'),
gr.Radio(choices=['fri', 'mon', 'thu', 'tue', 'wed'], label='day_of_week'),
gr.Number(label='duration'),
gr.Number(label='campaign'),
gr.Number(label='pdays'),
gr.Number(label='previous'),
gr.Radio(choices=['failure', 'nonexistent', 'success'], label='poutcome')]
# Créer les outputs
outputs = gr.Textbox(label='BANQUE')
# Créer l'interface 1
interface1 = gr.Interface(fn = Pred_func,
inputs = inputs,
outputs = outputs,
title="Prédire si le client d'une banque souscrira à un dépôt à terme (term deposit) ou pas avec une seule entrée",
description = """Ce modèle d'apprentissage automatique nous permet de prédire si le client d'une banque souscrira
à un dépôt à terme (term deposit) à partir de son age, de son job,
de sa situation matrimoniale, de son niveau d'etude, de son logement,
de son prêt bancaire, de son contact, de son dernier mois de contact,
de son dernier jour de contact, de la durée de son dernier contact,
de sa campagne, de son jour de travail, de son precedent contact,
et de son poutcome""")
# Créer l'interface 2
interface2 = gr.Interface(fn = Pred_func_csv,
inputs = gr.File(label='Upload a csv file'),
outputs = gr.File(label='Download a csv file'),
title="Prédire si le client d'une banque souscrira à un dépôt à terme (term deposit) ou pas avec plusieurs entrées",
description = """Ce modèle d'apprentissage automatique nous permet de prédire si le client d'une banque souscrira
à un dépôt à terme (term deposit) à partir de son age, de son job,
de sa situation matrimoniale, de son niveau d'etude, de son logement,
de son prêt bancaire, de son contact, de son dernier mois de contact,
de son dernier jour de contact, de la durée de son dernier contact,
de sa campagne, de son jour de travail, de son precedent contact,
et de son poutcome """)
# faire un tabbing des interfaces
with demo:
gr.TabbedInterface([interface1, interface2], ['Simple Prediction', 'Prédiction multiple'])
# lancer l'interface
demo.launch()