9 đ Ventes et â pluie : agrĂ©ger, câest choisir
Les chapitres prĂ©cĂ©dents ont prĂ©sentĂ© la mĂ©canique de lâagrĂ©gation : groupby, pivot_table, crosstab. Cet exercice porte sur autre chose : la lecture du rĂ©sultat.
Vous allez constater, sur deux jeux de donnĂ©es diffĂ©rents, quâune mĂȘme question posĂ©e Ă des donnĂ©es identiques reçoit des rĂ©ponses opposĂ©es selon la grandeur que lâon choisit dâagrĂ©ger. AgrĂ©ger nâest pas une opĂ©ration neutre : câest dĂ©jĂ une dĂ©cision dâanalyse.
9.1 Exercice
9.1.1 Partie A : Ventes de deux magasins
Le fichier ventes.csv donne, pour deux magasins et quatre trimestres, les quantités vendues de trois produits et leur prix unitaire.
- Charger le fichier et vérifier le type de chaque colonne avant toute chose.
- Ajouter une colonne
montant, Ă©gale Ă la quantitĂ© multipliĂ©e par le prix unitaire. - Quel magasin rĂ©alise le plus gros chiffre dâaffaires ?
- Croiser magasin et produit : quel produit porte le chiffre dâaffaires de chaque magasin ?
- Tracer lâĂ©volution du chiffre dâaffaires par trimestre pour chaque magasin.
- Quel magasin vend le plus dâarticles ? Comparer avec la rĂ©ponse de la question 3 et commenter.
9.1.2 Partie B : Pluviométrie de trois villes
Le fichier pluviometrie.csv donne, pour Brest, Paris et Nice, la hauteur de pluie et le nombre de jours de pluie de chaque mois.
- Charger le fichier.
- Classer les trois villes par cumul annuel de pluie.
- Classer les trois villes par nombre de jours de pluie.
- Comparer les deux classements. Que peut-on en conclure ?
- Calculer la hauteur moyenne de pluie par jour de pluie dans chaque ville.
- Construire un tableau croisĂ© station Ă mois. Attention Ă lâordre des mois.
- Pour chaque ville, déterminer le mois le plus arrosé.
Sur les donnĂ©es. Les ventes sont fictives. Pour la pluviomĂ©trie, les totaux annuels sont proches des normales publiĂ©es par MĂ©tĂ©o-France (Brest â 1200 mm, Nice â 800 mm, Paris â 640 mm), mais la rĂ©partition mensuelle a Ă©tĂ© reconstruite pour les besoins de lâexercice : ne citez pas ces chiffres comme des relevĂ©s officiels.
10 Partie A : Ventes de deux magasins
10.1 1. Charger le fichier et vérifier les types
Premier rĂ©flexe, avant mĂȘme de lire les donnĂ©es : regarder Ă quoi ressemble le fichier. Ici le sĂ©parateur est ; et le marqueur dĂ©cimal est la virgule.
magasin;trimestre;produit;quantite;prix_unitaire
Nord;T1;stylo;400;1,50
Nord;T1;cahier;120;3,20
Nord;T1;classeur;30;8,90
Nord;T2;stylo;420;1,50
Nord;T2;cahier;130;3,20
Nord;T2;classeur;25;8,90
Nord;T3;stylo;380;1,50
Nord
| magasin | trimestre | produit | quantite | prix_unitaire | |
|---|---|---|---|---|---|
| 0 | Nord | T1 | stylo | 400 | 1.5 |
| 1 | Nord | T1 | cahier | 120 | 3.2 |
| 2 | Nord | T1 | classeur | 30 | 8.9 |
| 3 | Nord | T2 | stylo | 420 | 1.5 |
| 4 | Nord | T2 | cahier | 130 | 3.2 |
magasin object
trimestre object
produit object
quantite int64
prix_unitaire float64
dtype: object
prix_unitaire est bien en float64. Si nous avions oubliĂ© decimal=',', la colonne aurait Ă©tĂ© lue comme du texte et toute la suite aurait Ă©tĂ© fausse : câest la vĂ©rification Ă ne jamais sauter.
10.2 2. Ajouter la colonne montant
10.3 3. Quel magasin rĂ©alise le plus gros chiffre dâaffaires ?
magasin
Nord 5264.0
Sud 8920.5
Name: montant, dtype: float64
Le magasin Sud rĂ©alise le plus gros chiffre dâaffaires : 8920.50 âŹ
10.4 4. Quel produit porte chaque magasin ?
| produit | cahier | classeur | stylo | All |
|---|---|---|---|---|
| magasin | ||||
| Nord | 1632.0 | 1157.0 | 2475.0 | 5264.0 |
| Sud | 1360.0 | 6630.5 | 930.0 | 8920.5 |
| All | 2992.0 | 7787.5 | 3405.0 | 14184.5 |
Plus lisible en pourcentage de chaque ligne :
| produit | cahier | classeur | stylo |
|---|---|---|---|
| magasin | |||
| Nord | 31.0 | 22.0 | 47.0 |
| Sud | 15.2 | 74.3 | 10.4 |
La lecture est immĂ©diate : le Sud rĂ©alise lâessentiel de son chiffre dâaffaires sur les classeurs, le Nord est beaucoup plus Ă©quilibrĂ©, avec une part importante de stylos.
10.5 5. Ăvolution trimestrielle
| magasin | Nord | Sud |
|---|---|---|
| trimestre | ||
| T1 | 1251.0 | 2147.0 |
| T2 | 1268.5 | 2235.0 |
| T3 | 1233.5 | 2119.5 |
| T4 | 1511.0 | 2419.0 |

10.6 6. Et en nombre dâarticles ?
Jusquâici nous avons agrĂ©gĂ© les euros. AgrĂ©geons maintenant les articles :
| articles | chiffre_affaires | panier_moyen | |
|---|---|---|---|
| magasin | |||
| Nord | 2290 | 5264.0 | 2.30 |
| Sud | 1790 | 8920.5 | 4.98 |
Plus dâarticles vendus : Nord
Plus gros chiffre dâaffaires : Sud
Les deux classements sâopposent. Le magasin Nord vend 2 290 articles contre 1 790 pour le Sud, mais le Sud rĂ©alise un chiffre dâaffaires de 8 920,50 ⏠contre 5 264 ⏠pour le Nord.
Il nây a aucune contradiction : le Nord Ă©coule des stylos Ă 1,50 âŹ, le Sud des classeurs Ă 8,90 âŹ. La derniĂšre colonne le rĂ©sume : le prix moyen dâun article vendu est prĂšs de deux fois plus Ă©levĂ© au Sud.
La question « quel est le meilleur magasin ? » nâa donc pas de rĂ©ponse tant quâon nâa pas dit ce quâon mesure. Câest Ă lâanalyste de le prĂ©ciser, pas Ă groupby.
11 Partie B : Pluviométrie de trois villes
11.1 1. Charger le fichier
11.2 2. et 3. Deux classements
| cumul_mm | jours | |
|---|---|---|
| station | ||
| Brest | 1225 | 162 |
| Nice | 797 | 63 |
| Paris | 655 | 111 |
Classement par hauteur de pluie : Brest > Nice > Paris
Classement par jours de pluie : Brest > Paris > Nice
11.3 4. Comparaison des deux classements
Paris et Nice échangent leur place.
- En hauteur de pluie, il tombe nettement plus dâeau Ă Nice quâĂ Paris : environ 800 mm contre 655 mm.
- En nombre de jours, câest lâinverse : il pleut Ă Paris environ 111 jours par an, contre 63 Ă Nice.
« Il pleut plus Ă Paris quâĂ Nice » est donc vrai et faux Ă la fois, selon la grandeur choisie. Les deux affirmations dĂ©crivent la mĂȘme rĂ©alitĂ© : Ă Nice il pleut rarement, mais fort ; Ă Paris il pleut souvent, mais peu.
Brest, elle, est premiĂšre dans les deux classements : il nây a pas toujours dâambiguĂŻtĂ©, mais il faut toujours vĂ©rifier.
11.4 5. LâintensitĂ© des pluies
Le rapport des deux grandeurs donne directement la hauteur moyenne tombée un jour de pluie :
| cumul_mm | jours | mm_par_jour_de_pluie | |
|---|---|---|---|
| station | |||
| Nice | 797 | 63 | 12.7 |
| Brest | 1225 | 162 | 7.6 |
| Paris | 655 | 111 | 5.9 |
Une pluie niçoise apporte en moyenne plus du double dâune pluie parisienne. Câest cette troisiĂšme grandeur, construite Ă partir des deux premiĂšres, qui rĂ©concilie les classements et explique le phĂ©nomĂšne.
11.5 6. Tableau croisé station à mois
PremiĂšre tentative, et premier piĂšge :
| mois | août | avril | décembre | février | janvier | juillet | juin | mai | mars | novembre | octobre | septembre |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| station | ||||||||||||
| Brest | 55.0 | 85.0 | 165.0 | 110.0 | 150.0 | 50.0 | 55.0 | 75.0 | 100.0 | 155.0 | 140.0 | 85.0 |
| Nice | 20.0 | 70.0 | 95.0 | 45.0 | 70.0 | 12.0 | 35.0 | 45.0 | 40.0 | 140.0 | 150.0 | 75.0 |
| Paris | 60.0 | 52.0 | 58.0 | 45.0 | 50.0 | 60.0 | 55.0 | 65.0 | 48.0 | 52.0 | 62.0 | 48.0 |
Les mois sont rangĂ©s par ordre alphabĂ©tique : aoĂ»t, avril, dĂ©cembre⊠Pandas ne peut pas deviner quâil sâagit dâun calendrier. Il faut le lui dire, en dĂ©clarant la colonne comme une variable catĂ©gorielle ordonnĂ©e :
calendrier = ["janvier","février","mars","avril","mai","juin",
"juillet","août","septembre","octobre","novembre","décembre"]
pluie['mois'] = pd.Categorical(pluie['mois'], categories=calendrier, ordered=True)
croise = pluie.pivot_table(index='station', columns='mois', values='pluie_mm', observed=True)
croise| mois | janvier | février | mars | avril | mai | juin | juillet | août | septembre | octobre | novembre | décembre |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| station | ||||||||||||
| Brest | 150.0 | 110.0 | 100.0 | 85.0 | 75.0 | 55.0 | 50.0 | 55.0 | 85.0 | 140.0 | 155.0 | 165.0 |
| Nice | 70.0 | 45.0 | 40.0 | 70.0 | 45.0 | 35.0 | 12.0 | 20.0 | 75.0 | 150.0 | 140.0 | 95.0 |
| Paris | 50.0 | 45.0 | 48.0 | 52.0 | 65.0 | 55.0 | 60.0 | 60.0 | 48.0 | 62.0 | 52.0 | 58.0 |

La carte de chaleur rend les trois rĂ©gimes immĂ©diatement visibles : Brest arrosĂ©e toute lâannĂ©e avec un creux estival, Paris remarquablement rĂ©guliĂšre, et Nice avec un Ă©tĂ© quasi sec suivi dâun automne trĂšs violent.
11.6 7. Le mois le plus arrosé de chaque ville
12 Conclusion
Ce que cet exercice voulait montrer
Dans les deux cas, le code Ă©tait trivial : un groupby et une somme. Câest lâinterprĂ©tation qui demandait du travail.
- Partie A : « quel est le meilleur magasin ? » dĂ©pend de ce quâon somme, les euros ou les articles.
- Partie B : « oĂč pleut-il le plus ? » dĂ©pend de ce quâon somme, les millimĂštres ou les jours.
Retenez le rĂ©flexe : avant dâagrĂ©ger, demandez-vous quelle question vous posez rĂ©ellement, et aprĂšs avoir agrĂ©gĂ©, demandez-vous si une autre grandeur donnerait une autre rĂ©ponse. Câest prĂ©cisĂ©ment ce quâon attend de vous Ă lâexamen : non pas produire un tableau, mais dire ce quâil signifie.