import pandas as pd import numpy as np import matplotlib.pyplot as plt import importlib from st_on_hover_tabs import on_hover_tabs import streamlit as st import streamlit_presentation import streamlit_presentation.analyse importlib.reload(streamlit_presentation.analyse) from streamlit_presentation.analyse import repartition_par_categorie from streamlit_presentation.analyse import repartition_longueur_categorie import streamlit_presentation.preprocessing importlib.reload(streamlit_presentation.preprocessing) from streamlit_presentation.preprocessing import detection_langage_et_traduction import streamlit_presentation.modele importlib.reload(streamlit_presentation.modele) from streamlit_presentation.modele import presentation_modele from sklearn.metrics import f1_score plt.rcParams['font.size'] = 12 plt.rcParams['axes.labelsize'] = 10 plt.rcParams['axes.titlesize'] = 12 plt.rcParams['xtick.labelsize'] = 8 plt.rcParams['ytick.labelsize'] = 8 plt.rcParams['legend.fontsize'] = 8 plt.rcParams['lines.linewidth'] = 1 #on charge les donnees utilisees data = pd.read_csv( 'data.csv') extract_data = pd.read_csv( 'data_tr_extract.csv') sum_data = pd.read_csv( 'data_sum_extract.csv') test_data = pd.read_pickle( 'data_test.pkl') from keras.models import load_model import tensorflow as tf from tensorflow.keras import backend as K import ast def f1_weighted(true, pred): # Classes classes = K.arange(0, 27) true = K.one_hot(K.cast(true, 'int32'), 27) # Calcule les TP, FP, FN pour chaque classe tp = K.dot(K.transpose(true), K.round(pred)) fp = K.dot(K.transpose(1-true), K.round(pred)) fn = K.dot(K.transpose(true), 1-K.round(pred)) # Calcule le score F1 pour chaque classe p = tp / (tp + fp + K.epsilon()) r = tp / (tp + fn + K.epsilon()) f1 = 2*p*r / (p+r+K.epsilon()) weighted_f1 = K.sum(f1 * K.sum(true, axis=0) / K.sum(true)) return weighted_f1 model = load_model("final_model_kfold.h5", custom_objects={'f1_weighted': f1_weighted}) from sklearn.preprocessing import LabelEncoder encoder = LabelEncoder() print(test_data.columns) y_test = encoder.fit_transform(test_data["prdtypecode"]) class_labels = encoder.classes_ label_size = 27 ####### Page principale st.set_page_config(layout="wide") st.markdown('', unsafe_allow_html=True) st.title("Rakuten Challenge") with st.sidebar: tabs = on_hover_tabs(tabName=['Introduction', "Analyse", "Preprocessing", "Modèle", "Pistes exploratoires"], iconName=['apps', 'bar_chart', "sync", "memory", "topic"], styles = {'navtab': {'background-color':'RGB(55,71,79)', 'color': 'RGB(180,180,180)', 'font-size': '18px', 'transition': '.3s', 'white-space': 'nowrap', 'text-transform': 'uppercase'}, 'tabOptionsStyle': {':hover :hover': {'color': 'RGB(235,197,82)', 'cursor': 'pointer'}}, 'iconStyle':{'position':'fixed', 'left':'7.5px', 'text-align': 'left'}, 'tabStyle' : {'list-style-type': 'none', 'margin-bottom': '30px', 'padding-left': '30px'}}, default_choice=0) st.markdown(""" """, unsafe_allow_html=True) if tabs == "Introduction": st.write("### Introduction") st.write(""" Le catalogue de l’ecommerce Rakuten comporte des centaines de milliers d’articles mis à jour régulièrement. Le besoin de l’entreprise est de les classer automatiquement dans leur catégorie. L’objectif de notre projet est de de prédire le code type d’un produit à partir de données textes décrivant des produits ainsi que leurs images associées. Notre étude doit déterminer la qualité et la pertinence des données, d’évaluer un prétraitement possible et proposer une solution de classification l’exploitation de ces dernières """) elif tabs == "Analyse": st.write("### Analyse") st.write("Extrait de la base de données fournie par Rakuten:") st.dataframe(data.head(30)) st.write("") st.write("### Regard sur les données:") st.write("") st.write("") st.write("Une distribution des observations par code produit non balancée:") st.write("") repartition_par_categorie(st, data) st.write("") st.divider() st.write("") st.write("### Variabilité de la taille des champs textes:") st.write("") st.text(""" Pourcentage de valeurs manquantes pour la description : 35.09% Pourcentage de valeurs manquantes pour la designation : 0.00% """) st.write("") st.write("") repartition_longueur_categorie(st, data) st.write("") elif tabs == "Preprocessing": detection_langage_et_traduction(st, extract_data, sum_data) elif tabs == "Modèle": presentation_modele(st, test_data, model,class_labels,y_test) elif tabs == "Pistes exploratoires": st.write("# Pistes exploratoires") st.write("Ici")