Spaces:
Sleeping
Sleeping
| # -*- coding: utf-8 -*- | |
| """Final_projet_app.ipynb | |
| Automatically generated by Colab. | |
| Original file is located at | |
| https://colab.research.google.com/drive/1BlNoqeygGpdcMtxEP-U-wJkAVngPpPUf | |
| """ | |
| #Importer les packages | |
| import numpy as np | |
| import gradio as gr | |
| import pandas as pd | |
| data = pd.read_csv('Telephone_data___.csv') | |
| df = pd.read_csv('data_prep.csv') | |
| # Encoder les variables catégorielles | |
| from sklearn.preprocessing import LabelEncoder | |
| # Créer différents encodeurs pour les variables catégorielles | |
| encoder0 = LabelEncoder() | |
| encoder1 = LabelEncoder() | |
| encoder2 = LabelEncoder() | |
| encoders = [encoder0, encoder1, encoder2] | |
| columns = [col for col in data.columns if data[col].dtype == 'object'] | |
| for i in range(len(columns)): | |
| encoders[i].fit(data[columns[i]]) # le modèle prend le temps de reconnaitre les classes | |
| # Fractionner les données | |
| x= df.drop('etat', axis = 1).values # variables prédicteurs | |
| y = df['etat'].values # variable cible | |
| # importer StandardScaler | |
| from sklearn.preprocessing import StandardScaler, MinMaxScaler, normalize | |
| # Instancier StandardScaler | |
| scaler = StandardScaler() | |
| scaler.fit(x) # calcul de la moyenne et de l'écart type | |
| x = scaler.transform(x) # normalisation | |
| from sklearn.model_selection import train_test_split | |
| # Splitter les données en train, val et test | |
| x_train, x_vt,y_train,y_vt = train_test_split(x,y , test_size = 0.2, random_state = 42) | |
| # Splitter les données en val et test | |
| x_val, x_test, y_val, y_test = train_test_split(x_vt, y_vt, test_size = 0.5, random_state = 42) | |
| from sklearn.ensemble import RandomForestClassifier | |
| # Entrainer Random Forest en utilisant les paramètres optimaux 'criterion': 'entropy', 'max_depth': 14, 'n_estimators': 40 | |
| rf = RandomForestClassifier(criterion = 'gini', max_depth = 10, n_estimators = 70) | |
| # Entrainement | |
| rf.fit(x_train, y_train) | |
| # importer gradio | |
| import gradio as gr | |
| # Fonction de prédiction simple | |
| def Pred_func(prix, adresse, marque, dim_ecr, ram, stockage): | |
| # Encoder les valeurs des adresse, marque, etat | |
| adresse = encoder0.transform([adresse])[0] | |
| marque = encoder1.transform([marque])[0] | |
| # vecteur des valeurs numériques | |
| x_new = np.array([prix, adresse, marque, dim_ecr, ram, stockage]) | |
| 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 = rf.predict(x_new) | |
| # Décoder la valeur prédite pour 'etat' | |
| y_pred_decoded = encoder2.inverse_transform([y_pred[0]])[0] # Décoder la valeur encodée | |
| return str(y_pred_decoded) | |
| # Fonction de prédiction multiple | |
| def Pred_func_csv(file): | |
| # Lire le fichier csv | |
| df = pd.read_csv(file) | |
| # prédictions | |
| 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], encoder0.transform([row[1]])[0], encoder1.transform([row[2]])[0], row[3], row[4],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 = rf.predict(new_row) | |
| # Décoder la valeur prédite pour 'etat' | |
| y_pred_decoded = encoder2.inverse_transform([y_pred[0]])[0] # Décoder la valeur encodée | |
| predictions.append(y_pred_decoded) # Ajouter la prédiction à la liste | |
| df['etat'] = predictions | |
| df.to_csv('predictions.csv', index = False) | |
| return 'predictions.csv' | |
| # définir les blocks afin de pouvoir ajouter plusieurs interfaces | |
| demo = gr.Blocks(theme = gr.themes.Glass()) | |
| # autres themes | |
| #gr.themes.Base() gr.themes.Default() gr.themes.Glass() gr.themes.Monochrome() gr.themes.Soft() | |
| # Interface Gradio pour interagir avec la fonction | |
| interface1 = gr.Interface( | |
| fn=Pred_func, # Fonction à appeler | |
| inputs=[ | |
| gr.Number(label="prix"), | |
| gr.Dropdown(choices= list(np.unique(data.adresse)), label='Adresse'), # on utilise list pour bcp de valeur | |
| gr.Dropdown(choices= list(np.unique(data.marque)), label='Marque'), # on utilise list pour bcp de valeur | |
| gr.Number(label="Dimension de l'écran"), | |
| gr.Number(label="RAM (Go)"), | |
| gr.Number(label="Stockage (Go)") | |
| ], | |
| outputs = gr.Textbox(label='etat'), # Sortie sous forme de texte | |
| title="Prédiction de l'état d'un Téléphone portable", # Titre de l'interface | |
| ) | |
| # Créer l'interface 2 permettant de faire une prédiction multiple en partant d'un fichier csv | |
| interface2 = gr.Interface(fn = Pred_func_csv, | |
| inputs = gr.File(label='Upload a csv file'), | |
| outputs = gr.File(label='Download a csv file'), | |
| title="Predict the statut of mobile phone", | |
| description = """This machine learning model allows us to predict the statut of mobile phone with his specifications. | |
| """) | |
| # faire un tabbing (regrouper en onglet) des interfaces | |
| with demo: | |
| gr.TabbedInterface([interface1, interface2], ['Simple Prediction', 'Prédiction multiple']) | |
| # lancer l'interface | |
| demo.launch(share = True) |