Mise en situation : avant de tracer sns.barplot(data=df, x="region", y="moyenne"), il faut préparer des données qu'on peut présenter sans arrière-pensée — pas seulement une moyenne brute qui masquerait un effectif ridicule.
Écrivez plot_data(sales, min_lignes=2), qui reçoit une liste de {"region":..., "montant":...} et retourne :
{
"donnees": [{"region": ..., "moyenne": <arrondie à 2 décimales>, "n": <effectif>}, ...],
"regions_ecartees": [<régions dont l'effectif est trop faible>],
"total_lignes": <nombre de lignes exploitées>,
}
Règles :
- normalisez les libellés de région (
.str.strip().str.title()) avant de grouper ; - convertissez les montants avec
pd.to_numeric(..., errors="coerce")et écartez les lignes non numériques ; - une région dont l'effectif est inférieur à
min_lignesne doit pas figurer dansdonnees— ce serait présenter une moyenne calculée sur presque rien — mais son nom doit apparaître, trié, dansregions_ecartees; donneesdoit être trié par moyenne décroissante : c'est la forme la plus lisible d'un barplot de comparaison ;- une liste vide renvoie des listes vides et
total_lignesà 0, sans exception.