Moyenne, Médiane et Mode en Python
Calculez la moyenne, médiane et mode en Python avec numpy et statistics. Exemples concrets, choix de la mesure et gestion des valeurs manquantes.
La moyenne, la médiane et le mode sont les trois mesures de tendance centrale fondamentales en statistiques. Chacune décrit le « centre » d'un jeu de données d'une manière différente, et savoir laquelle utiliser — et quand — est l'une des premières compétences pratiques dont vous avez besoin pour la préparation des données en apprentissage automatique.
Ce chapitre couvre :
- Ce que signifie chaque mesure et comment elle est calculée
- Comment les calculer en Python avec
numpyet le modulestatistics - Quand préférer une mesure plutôt qu'une autre
- Comment les utiliser pour remplir les valeurs manquantes (imputation)
Qu'est-ce que la Moyenne, la Médiane et le Mode ?
Ces trois mesures résument un jeu de données avec une valeur représentative unique, mais elles capturent différents aspects de la distribution :
| Mesure | Définition | Idéal pour |
|---|---|---|
| Moyenne | Somme de toutes les valeurs ÷ effectif | Données symétriques, à distribution normale |
| Médiane | Valeur centrale après tri | Données asymétriques ou contenant des valeurs aberrantes |
| Mode | Valeur la plus fréquente | Données catégorielles ou dénombrements discrets |
Comprendre la distribution des données vous aide à décider quelle mesure est la plus adaptée à votre jeu de données.
Moyenne
La moyenne (moyenne arithmétique) additionne toutes les valeurs et divise par le nombre de valeurs.
Formule : mean = (x₁ + x₂ + … + xₙ) / n
Utilisez numpy.mean() pour la calculer en Python :
Calculer la moyenne d'une liste avec numpy
Quand utiliser la moyenne
La moyenne fonctionne bien lorsque vos données ne comportent pas de valeurs aberrantes extrêmes et suivent une distribution à peu près symétrique. En présence de valeurs aberrantes, elles tirent la moyenne vers elles et en font un mauvais représentant de la valeur « typique ».
Moyenne vs. médiane avec une valeur aberrante
import numpy as np
salaries = [40000, 42000, 45000, 48000, 50000, 300000]
print(f"Mean: {np.mean(salaries):.0f}") # Output: 87500
print(f"Median: {np.median(salaries):.0f}") # Output: 46500Ici, la moyenne est 87 500 — bien supérieure à cinq des six salaires — car une valeur extrême (300 000) la tire vers le haut. La médiane (46 500) représente mieux ce qu'un employé typique gagne.
Médiane
La médiane est la valeur centrale d'un jeu de données trié.
- Nombre impair de valeurs : l'élément du milieu.
- Nombre pair de valeurs : la moyenne des deux éléments du milieu.
Utilisez numpy.median() :
Calculer la médiane d'une liste avec numpy
Jeu de données à effectif pair — la médiane est la moyenne des deux valeurs centrales
import numpy as np
data_even = [1, 3, 5, 7]
print(np.median(data_even)) # Output: 4.0 (average of 3 and 5)Quand utiliser la médiane
La médiane est la mesure de tendance centrale préférée lorsque vos données sont asymétriques ou contiennent des valeurs aberrantes, car elle n'est pas affectée par les valeurs extrêmes. Les revenus, les prix immobiliers et les distributions d'âge sont des exemples classiques où la médiane est plus informative que la moyenne.
Mode
Le mode est la valeur qui apparaît le plus souvent dans un jeu de données. Un jeu de données peut avoir :
- Aucun mode — si toutes les valeurs apparaissent le même nombre de fois.
- Un seul mode (unimodal) — le cas le plus courant.
- Plusieurs modes (multimodal) — deux valeurs ou plus à égalité pour la fréquence la plus élevée.
Utilisez statistics.mode() de la bibliothèque standard :
Trouver le mode d'une liste avec le module statistics
Gestion des données multimodales
statistics.mode() lève une StatisticsError en Python 3.7 et antérieur lorsqu'il y a une égalité. En Python 3.8+, il retourne le premier mode rencontré. Pour récupérer en toute sécurité tous les modes, utilisez statistics.multimode() :
Trouver tous les modes lorsque les données ont plusieurs pics
import statistics
votes = [1, 1, 2, 2, 3]
print(statistics.multimode(votes)) # Output: [1, 2]Mode pour les données numériques
Le mode est le plus naturel pour les données catégorielles ou entières discrètes, mais il fonctionne aussi pour les données numériques continues :
import statistics
scores = [10, 20, 20, 30, 40]
print(statistics.mode(scores)) # Output: 20Quand utiliser le mode
Utilisez le mode lorsque vous travaillez avec des caractéristiques catégorielles (couleurs, étiquettes, catégories de produits) ou lorsque vous avez besoin de connaître l'élément le plus populaire — par exemple, le type de défaut le plus courant dans un jeu de données de contrôle qualité.
Comparaison des Trois Mesures
L'exemple ci-dessous montre comment la moyenne, la médiane et le mode divergent sur un jeu de données asymétrique. Quelques employés plus âgés tirent la moyenne vers le haut, tandis que la médiane et le mode restent proches de là où se trouve réellement la majorité des données :
Comparer la moyenne, la médiane et le mode sur des données asymétriques
import numpy as np
import statistics
ages = [22, 23, 24, 24, 25, 25, 25, 26, 60]
print(f"Mean: {np.mean(ages):.1f}") # Output: 28.2
print(f"Median: {np.median(ages):.1f}") # Output: 25.0
print(f"Mode: {statistics.mode(ages)}") # Output: 25La moyenne (28,2) est tirée vers le haut par l'unique employé de 60 ans. La médiane et le mode (tous deux à 25) représentent fidèlement l'employé typique.
Utiliser la Moyenne et la Médiane pour Imputer les Valeurs Manquantes
Une étape de prétraitement courante avant l'entraînement d'un modèle consiste à remplacer les valeurs manquantes (NaN) par une statistique représentative. C'est ce qu'on appelle l'imputation.
- Imputation par la moyenne — remplace
NaNpar la moyenne de la colonne. Rapide, mais sensible aux valeurs aberrantes. - Imputation par la médiane — remplace
NaNpar la médiane. Robuste aux valeurs aberrantes ; préférée pour les caractéristiques asymétriques. - Imputation par le mode — remplace
NaNpar la valeur la plus fréquente. Appropriée pour les colonnes catégorielles.
Imputation par la moyenne avec numpy
import numpy as np
data = [10.0, 20.0, float('nan'), 40.0, 50.0]
mean_val = np.nanmean(data) # ignores NaN: (10+20+40+50)/4 = 30.0
imputed = [mean_val if np.isnan(x) else x for x in data]
print(imputed)
# Output: [10.0, 20.0, 30.0, 40.0, 50.0]Dans le code en production, vous utiliseriez généralement sklearn.impute.SimpleImputer, qui s'intègre proprement dans les pipelines scikit-learn et applique les mêmes statistiques ajustées aux ensembles d'entraînement et de test.
Référence Rapide : Quelle Mesure Choisir ?
| Scénario | Mesure recommandée |
|---|---|
| Données numériques à distribution normale | Moyenne |
| Données numériques asymétriques (revenus, prix) | Médiane |
| Données avec valeurs aberrantes extrêmes | Médiane |
| Données catégorielles (étiquettes, couleurs) | Mode |
| Imputation de colonnes numériques avec valeurs aberrantes | Médiane |
| Imputation de colonnes catégorielles | Mode |
| Trouver la valeur la plus populaire | Mode |
Sujets Connexes
- Distribution des données — comprendre les distributions normales, asymétriques et uniformes avant de choisir une mesure.
- Écart type — mesurer la dispersion de vos données autour de la moyenne.
- Percentile — classer les valeurs par rapport au reste du jeu de données.
- Mise à l'échelle — techniques de mise à l'échelle des caractéristiques qui s'appuient sur ces statistiques.
Conclusion
La moyenne, la médiane et le mode capturent chacun un aspect différent du centre de vos données. La moyenne est la valeur par défaut la plus courante, mais elle est fragile en présence de valeurs aberrantes. La médiane est robuste et devrait être votre premier choix pour les distributions asymétriques. Le mode est indispensable pour les données catégorielles et pour les requêtes rapides de type « valeur la plus courante ». En apprentissage automatique, ces trois mesures apparaissent régulièrement dans l'analyse exploratoire des données et l'imputation des valeurs manquantes — choisir la bonne pour chaque colonne conduit à des caractéristiques plus propres et à de meilleures performances du modèle.