pechaut's picture
Update streamlit_presentation/analyse.py
7a734ae
raw
history blame
5.31 kB
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('<div class="rounded-border"></div>', 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.")