import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt def repartition_par_categorie(st,data): val_code = data['prdtypecode'].unique() target_count = (data["prdtypecode"].value_counts(normalize=True)*100).reset_index() target_count.columns=["prdtypecode","pourcentage"] plt.figure(figsize=(10,3)) ax = sns.barplot( x="prdtypecode", y="pourcentage", data=target_count) ax.axhline(y=100/len(val_code),color="green",linewidth=2, alpha=0.5) plt.xticks(rotation=45) plt.xlabel('Code produit') plt.ylabel('Pourcentage') plt.grid() plt.title("Distribution des valeurs de la target") # Afficher le graphique avec Streamlit col1, col2,col3 = st.columns([6,1,3]) with col1: st.pyplot(plt) with col3: st.markdown('
', unsafe_allow_html=True) st.write("\n\n\n\n\n\n") st.write("La catégorie la plus présente représente 12% du corpus.") st.write("Si la base était uniformément répartie:") st.write(f"=> chaque code serait représenté à {100/len(val_code):.2f}% de la base") def repartition_longueur_categorie(st,data): val_code = data["prdtypecode"].unique() st.text(f"Nombre de valeurs de la target: {len(val_code)}") st.text(f"Liste des valeurs : {val_code}") st.text(""" Les valeurs ne sont pas continues, agissent comme des labels Les valeurs ne sont pas signifiantes """) st.write("") st.write("") data["designation_length"] = data["designation"].str.len() data["description_length"] = data["description"].str.len() plt.figure(figsize=(10,4)) ax = sns.histplot(x='designation_length', data=data,bins=50); ax.axhline(data["designation_length"].mean(),color="r",linewidth=2, alpha=0.5) plt.xticks(rotation=45) plt.xlabel("Longueur de la designation en caractères"); plt.ylabel("nb d'occurences"); plt.grid() plt.title("Répartition des longueurs des designations"); col1, col2,col3 = st.columns([2,6,3]) with col1: st.write(data["designation_length"].describe()) with col2: st.pyplot(plt) with col3: st.text('') st.text('') st.text('') st.text('') st.text('') st.write(f'=> Longueur de la designation comprise entre {data["designation_length"].min()} et {data["designation_length"].max()} caractères') st.write("on a une majeurepartie de la distribution entre 45 et 100 caractères, puis un pic à 250 caractères") st.text('') st.text('') st.text('Les tailles des désignations sont relativement différentes selon les catégories') plt.figure(figsize=(10,4)) sns.boxplot(x="prdtypecode",y="designation_length",data=data); plt.title("Répartition des longueurs des designation par code"); plt.xlabel("Code produit"); plt.ylabel("Longueur de la designation en caractères"); plt.xticks(rotation=45) st.pyplot(plt) col1, col2 = st.columns([3,6]) with col2: plt.figure(figsize=(10,4)) ax = sns.histplot(x='description_length', data=data,bins=100); ax.axhline(data["description_length"].mean(),color="r",linewidth=2, alpha=0.5) plt.xticks(rotation=45) plt.xlabel("nb d'occurences"); plt.xlim(0); plt.grid() plt.title("Répartition des longueurs des descriptions"); st.pyplot(plt) with col1: st.write(data["description_length"].describe()) st.write("Nous observons des longueurs tres variables, qui s'étalent sur tout le spectre, avex peu de descriptions tres longues, nous pouvons regarder et voir si ce sont des aberrations ou des aberrances") limit = st.number_input(label="Descriptions d'au moins:",min_value=200, max_value=12000, value=5000) pic_8000 = data[data["description_length"] >= limit] pic_8000 = pic_8000[["prdtypecode","description_length","description"]] st.dataframe(pic_8000) st.write("Nous constatons des textes correspondant à des descriptifs marketing, parfois sous forme HTML, contenant de nombreux détails.") st.write("") st.write("Recherche de chaines de tailles très petites") limit_max = st.number_input(label="Descriptions d'au moins:",min_value=1, max_value=12000, value=12) st.write("") desc_invalides = data[data["description_length"] < limit_max] desc_invalides = desc_invalides[["description_length","description"]] st.dataframe(desc_invalides) st.write(f"nous remarquons avoir {desc_invalides.shape[0]} observations triviales") st.write("") st.write("") st.write("Analyse des cas où la description est vide") st.write("") desc_vides = data[pd.isna(data["description"])] plt.figure(figsize=(10,4)) sns.histplot(x='designation_length', data=desc_vides,bins=100, stat='probability'); plt.xlabel("Longueur de la description en caractères"); plt.xlabel("occurences"); plt.xlim(0); plt.grid() plt.title("Répartition des longueurs des designations"); st.pyplot(plt) st.write("") st.write("La designation a globalement la même répartition en taille, lorsque la description est absente, qe lorsque la description est remplie.")