La moyenne, la médiane et le mode sont des sujets fondamentaux de la statistique. Vous pouvez facilement les calculer en Python, avec ou sans l’aide de bibliothèques externes.
Ces trois mesures sont les principales mesures de la tendance centrale. La tendance centrale nous permet de connaître les valeurs “normales” ou “moyennes” d’un ensemble de données. Si vous débutez dans la science des données, ce tutoriel est fait pour vous.
À la fin de ce tutoriel, vous saurez :
- Comprendre le concept de moyenne, médiane et mode
- Être capable de créer vos propres fonctions de moyenne, médiane et mode en Python
- Utiliser le module de statistiques de Python pour démarrer rapidement l’utilisation de ces mesures
Si vous souhaitez une version téléchargeable des exercices suivants, n’hésitez pas à consulter le dépôt GitHub.
Voyons maintenant les différentes façons de calculer la moyenne, la médiane et le mode.
Calculer la moyenne en Python
La moyenne, ou moyenne arithmétique, est la mesure de la tendance centrale la plus utilisée.
Rappelez-vous que la tendance centrale est une valeur typique d’un ensemble de données.
Un ensemble de données est une collection de données, donc un ensemble de données en Python peut être n’importe laquelle des structures de données intégrées suivantes :
- Listes, tuples et ensembles : une collection d’objets
- Chaînes : une collection de caractères
- Dictionnaire : une collection de paires clé-valeur
Remarque : bien qu’il existe d’autres structures de données en Python, comme les files d’attente ou les piles, nous n’utiliserons que les structures intégrées.
Nous pouvons calculer la moyenne en additionnant toutes les valeurs d’un ensemble de données et en divisant le résultat par le nombre de valeurs. Par exemple, si nous disposons de la liste de nombres suivante :
[1, 2, 3, 4, 5, 6]
La moyenne serait de 3 ,5 parce que la somme de la liste est de 21 et que sa longueur est de 6. 21 divisé par 6 est 3,5. Vous pouvez effectuer ce calcul à l’aide de la formule suivante :
(1 2 3 4 5 6) / 6 = 21
Dans ce tutoriel, nous utiliserons les joueurs d’une équipe de basket-ball comme échantillon de données.
Création d’une fonction moyenne personnalisée
Commençons par calculer l’âge moyen des joueurs d’une équipe de basket-ball. Le nom de l’équipe sera “Pythonic Machines”.
pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24]
def mean(dataset) :
return sum(dataset) / len(dataset)
print(mean(pythonic_machine_ages))
Décomposition de ce code :
- Le “pythonic_machine_ages” est une liste contenant les âges des joueurs de basket-ball
- Nous définissons une fonction mean() qui renvoie la somme de l’ensemble de données donné divisée par sa longueur
- La fonction sum() renvoie la somme totale (ironiquement) des valeurs d’un itérable, dans ce cas, une liste. Essayez de passer l’ensemble de données en argument, elle renverra 211
- La fonction len() renvoie la longueur d’un itérable. Si vous lui passez l’ensemble de données, vous obtiendrez 8
- Nous passons les âges des équipes de basket à la fonction mean() et nous imprimons le résultat.
Si vous vérifiez la sortie, vous obtiendrez :
26.375
# Parce que 211 / 8 = 26,375
Ce résultat représente l’âge moyen des joueurs de l’équipe de basket-ball. Notez que le nombre n’apparaît pas dans l’ensemble de données mais décrit précisément l’âge de la plupart des joueurs.
Utilisation de mean() à partir du module statistique de Python
Le calcul des mesures de tendance centrale est une opération courante pour la plupart des développeurs. C’est parce que le module statistique de Python fournit diverses fonctions pour les calculer, ainsi que d’autres sujets statistiques de base.
Comme il fait partie de la bibliothèque standard de Python, vous n’aurez pas besoin d’installer un paquetage externe avec PIP.
Voici comment utiliser ce module :
from statistics import mean
pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24]
print(mean(pythonic_machine_ages))
Dans le code ci-dessus, il vous suffit d’importer la fonction mean() du module statistique et de lui passer l’ensemble de données en argument. Vous obtiendrez le même résultat que la fonction personnalisée que nous avons définie dans la section précédente :
26.375
Maintenant que le concept de moyenne est clair comme de l’eau de roche, poursuivons avec la mesure de la médiane.
Trouver la médiane en Python
La médiane est la valeur centrale d’un ensemble de données triées. Elle est utilisée – encore une fois – pour fournir une valeur “typique” d’une population déterminée.
En programmation, nous pouvons définir la médiane comme la valeur qui sépare une séquence en deux parties – la moitié inférieure et la moitié supérieure -.
Pour calculer la médiane, nous devons d’abord trier l’ensemble des données. Nous pouvons le faire à l’aide d’algorithmes de tri ou en utilisant la fonction intégrée sorted(). La deuxième étape consiste à déterminer si la longueur de l’ensemble de données est paire ou impaire. En fonction de cela, certains des processus suivants peuvent être appliqués :
- Impair : La médiane est la valeur centrale de l’ensemble de données
- Pair : La médiane est la somme des deux valeurs médianes divisée par deux
En continuant avec notre ensemble de données sur les équipes de basket-ball, calculons la taille médiane des joueurs en centimètres :
[181, 187, 196, 196, 198, 203, 207, 211, 215]
# Puisque l'ensemble de données est impair, nous sélectionnons la valeur médiane
médiane = 198
Comme vous pouvez le constater, la longueur de l’ensemble de données étant impaire, nous pouvons prendre la valeur du milieu comme médiane. Cependant, que se passerait-il si un joueur venait de prendre sa retraite ?
Nous devrions calculer la médiane en prenant les deux valeurs médianes de l’ensemble de données
[181, 187, 196, 198, 203, 207, 211, 215]
# Nous sélectionnons les deux valeurs médianes et les divisons par 2
médiane = (198 203) / 2
médiane = 200,5
Création d’une fonction médiane personnalisée
Transposons le concept ci-dessus dans une fonction Python.
Rappelez-vous les trois étapes à suivre pour obtenir la médiane d’un ensemble de données :
- Trier l’ensemble de données : Nous pouvons le faire à l’aide de la fonction sorted()
- Déterminez s’il est pair ou impair : Nous pouvons le faire en obtenant la longueur de l’ensemble de données et en utilisant l’opérateur modulo (%)
- Renvoyez la médiane en fonction de chaque cas :
- Impair : Renvoi de la valeur médiane
- Pair : Renvoie la moyenne des deux valeurs médianes
Cela donnerait la fonction suivante :
pythonic_machines_heights = [181, 187, 196, 196, 198, 203, 207, 211, 215]
après_la_retraite = [181, 187, 196, 198, 203, 207, 211, 215]
def median(dataset) :
data = sorted(dataset)
index = len(data) // 2
# Si le jeu de données est impair
if len(dataset) % 2 != 0 :
return data<x><x>[index]</x></x>
# Si l'ensemble de données est pair
return (data[index - 1] data<x><x>[index]</x></x>) / 2
Impression du résultat de nos ensembles de données :
print(médiane(poids_des_machines_pythoniques))
print(médiane(après_retraite))
Résultat :
198
200.5
Notez que nous créons une variable de données qui pointe vers la base de données triée au début de la fonction. Bien que les listes ci-dessus soient triées, nous voulons créer une fonction réutilisable, et donc trier l’ensemble de données chaque fois que la fonction est invoquée.
L’index stocke la valeur centrale – ou la valeur centrale supérieure – de l’ensemble de données, en utilisant l’opérateur de division des nombres entiers. Par exemple, si nous transmettons la liste “pythonic_machine_heights”, elle aura la valeur 4.
Rappelez-vous qu’en Python, les index de séquence commencent à zéro, c’est parce que nous sommes capables de retourner l’index central d’une liste, avec une division entière.
Nous vérifions ensuite si la longueur de l’ensemble de données est impaire en comparant le résultat de l’opération modulo à toute valeur différente de zéro. Si la condition est vraie, nous retournons l’élément central, par exemple, avec la liste “pythonic_machine_heights” :
>>> pythonic_machine_heights[4]
# 198
En revanche, si l’ensemble de données est pair, nous renvoyons la somme des valeurs centrales divisée par deux. Notez que data[index -1] nous donne le point médian inférieur de l’ensemble de données, tandis que data
Utilisation de median() à partir du module statistique de Python
Cette méthode est beaucoup plus simple car nous utilisons une fonction déjà existante du module statistique.
Personnellement, s’il y a quelque chose de déjà défini pour moi, je l’utiliserais à cause du principe DRY -Don’t repeat yourself- (dans ce cas, ne pas répéter le code des autres).
Vous pouvez calculer la médiane des ensembles de données précédents avec le code suivant :
from statistics import median
pythonic_machines_heights = [181, 187, 196, 196, 198, 203, 207, 211, 215]
après_la_retraite = [181, 187, 196, 198, 203, 207, 211, 215]
print(median(pythonic_machines_heights))
print(médiane(après_retraite))
Résultat :
198
200.5
Calcul du mode en Python
Le mode est la valeur la plus fréquente de l’ensemble de données. Nous pouvons l’assimiler au groupe “populaire” d’une école, qui peut représenter une norme pour tous les étudiants.
Un exemple de mode pourrait être les ventes quotidiennes d’un magasin de technologie. Le mode de cet ensemble de données serait le produit le plus vendu un jour donné.
['laptop', 'desktop', 'smartphone', 'laptop', 'laptop', 'headphones']
Comme vous pouvez le constater, le mode de l’ensemble de données ci-dessus est “ordinateur portable”, car il s’agit de la valeur la plus fréquente de la liste.
Ce qui est intéressant avec le mode, c’est que l’ensemble de données ne doit pas nécessairement être numérique. Par exemple, nous pouvons travailler avec des chaînes de caractères.
Analysons les ventes d’un autre jour :
['mouse', 'camera', 'headphones', 'usb', 'headphones', 'mouse']
L’ensemble de données ci-dessus comporte deux modes : “souris” et “casque”, car ils ont tous deux une fréquence de deux. Il s’agit donc d’un ensemble de données multimodal.
Que se passe-t-il si nous ne parvenons pas à trouver le mode dans un ensemble de données, comme dans l’exemple ci-dessous ?
['usb', 'camera', 'smartphone', 'laptop', 'TV']
Il s’agit d’une distribution uniforme, ce qui signifie qu’il n’y a pas de mode dans l’ensemble de données.
Maintenant que vous comprenez rapidement le concept de mode, calculons-le en Python.
Création d’une fonction de mode personnalisée
Nous pouvons considérer la fréquence d’une valeur comme une paire clé-valeur, en d’autres termes, un dictionnaire Python.
Pour reprendre l’analogie avec le basket-ball, nous pouvons utiliser deux ensembles de données : Les points par match et le sponsoring de certains joueurs.
Pour trouver le mode, nous devons d’abord créer un dictionnaire de fréquences avec chacune des valeurs présentes dans l’ensemble de données, puis obtenir la fréquence maximale et renvoyer tous les éléments ayant cette fréquence.
Traduisons cela en code :
points_par_jeu = [3, 15, 23, 42, 30, 10, 10, 12]
parrainage = ['nike', 'adidas', 'nike', 'jordan',
'jordan', 'rebook', 'under-armour', 'adidas']
def mode(dataset) :
fréquence = {}
for value in dataset :
frequency[value] = frequency.get(value, 0) 1
most_frequent = max(frequency.values())
modes = [key for key, value in frequency.items()
if value == most_frequent]
return modes
Vérifiez le résultat en passant les deux listes comme arguments :
print(mode(points_par_jeu))
print(mode(parrainage))
Résultat :
<x>[10]</x>
['nike', 'adidas', 'jordan']
Comme vous pouvez le constater, la première instruction print nous donne un seul mode, tandis que la seconde renvoie plusieurs modes.
Explication plus approfondie du code ci-dessus :
- Nous déclarons un dictionnaire de fréquences
- Nous itérons sur l’ensemble de données pour créer un histogramme – le terme statistique pour un ensemble de compteurs (ou de fréquences) -..
- Si la clé est trouvée dans le dictionnaire, nous ajoutons un à la valeur
- Si la clé n’est pas trouvée, nous créons une paire clé-valeur avec une valeur de un
- La variable most_frequent stocke – ironiquement – la plus grande valeur (et non la clé) du dictionnaire des fréquences
- Nous renvoyons la variable modes qui consiste en toutes les clés du dictionnaire des fréquences ayant la fréquence la plus élevée.
Notez l’importance de la dénomination des variables pour écrire un code lisible.
Utilisation de mode() et multimode() du module statistique de Python
Une fois de plus, le module statistique nous offre un moyen rapide d’effectuer des opérations statistiques de base.
Nous pouvons utiliser deux fonctions : mode() et multimode().
from statistics import mode, multimode
points_par_jeu = [3, 15, 23, 42, 30, 10, 10, 12]
parrainage = ['nike', 'adidas', 'nike', 'jordan',
'jordan', 'rebook', 'under-armour', 'adidas']
Le code ci-dessus importe les deux fonctions et définit les ensembles de données avec lesquels nous avons travaillé.
Voici la petite différence : La fonction mode() renvoie le premier mode qu’elle rencontre, tandis que multimode() renvoie une liste des valeurs les plus fréquentes dans l’ensemble de données.
print(mode(points_par_jeu))
print(mode(parrainage))
Résultat :
10
nike
Note : Dans Python 3.8 ou plus, la fonction mode() renvoie le premier mode qu’elle a trouvé. Si vous avez une version plus ancienne, vous obtiendrez une StatisticsError.
Utilisation de la fonction multimode():
print(multimode(points_par_jeu))
print(multimode(parrainage))
Résultat :
<x>[10]</x>
['nike', 'adidas', 'jordan']
En résumé
Nousvous félicitons! Si vous avez suivi jusqu’ici, vous avez appris à calculer la moyenne, la médiane et le mode, les principales mesures de tendance centrale.
Bien que vous puissiez définir vos propres fonctions pour trouver la moyenne, la médiane et le mode, il est recommandé d’utiliser le module de statistiques, car il fait partie de la bibliothèque standard et vous n’avez rien à installer pour commencer à l’utiliser.
Lisez ensuite une introduction conviviale à l’analyse de données en Python.