Un jeu de données brut, c'est une foule illisible. La statistique descriptive trouve les quelques nombres qui racontent son histoire — son centre, sa dispersion, sa forme.
Sur une planche de Galton, chaque bille dévale une rangée de clous et part au hasard, à gauche ou à droite. Une seule bille est totalement imprévisible. Mais des milliers de billes empilées dessinent toujours la même courbe en cloche.
C'est tout le projet de la statistique descriptive : transformer le chaos individuel d'une donnée brute en une forme collective lisible — un centre, une largeur, une silhouette.
Moyenne, médiane, mode : trois réponses différentes à la même question. Elles coïncident souvent — et divergent violemment dès qu'une valeur extrême s'invite dans les données.
Deux archers peuvent viser exactement le même centre de cible. L'un touche un groupe serré, l'autre éparpille ses flèches sur toute la cible. Le centre ne dit rien de cette différence — la dispersion, si.
Imagine cent coureurs classés à l'arrivée d'un marathon. Le premier quartile (Q1) est la position du 25ᵉ : un quart du peloton est devant lui. La médiane est le 50ᵉ, le troisième quartile (Q3) le 75ᵉ. Ces trois bornes découpent la course en quatre groupes égaux.
Une distribution symétrique ressemble à une colline régulière — moyenne, médiane et mode se superposent au sommet. Une distribution asymétrique ressemble à une colline avec une longue pente d'un seul côté, qui tire la moyenne loin du sommet le plus fréquenté.
numpy, pandas et scipy calculent en une ligne ce que ce cours vient de construire pas à pas. Voir la formule tourner sur de vraies données ferme la boucle.
import numpy as np from scipy import stats notes = np.array([8, 10, 11, 12, 13, 14, 15, 17]) moyenne = np.mean(notes) mediane = np.median(notes) mode = stats.mode(notes, keepdims=True).mode[0] print(f"Moyenne={moyenne:.2f}, Médiane={mediane:.2f}, Mode={mode}") # ── Avec un salaire extrême ajouté ────────────────────── salaires = np.array([28,32,35,38,41,45,52,450]) # le patron rejoint le groupe print(f"Moyenne={salaires.mean():.1f}k€ vs Médiane={np.median(salaires):.1f}k€") # → la moyenne explose, la médiane bouge à peine : robustesse aux outliers