Résumer des nombres : moyenne, médiane, écart-type
La moyenne peut mentir
Une petite entreprise de Douala annonce fièrement : « Le salaire moyen chez nous est de 285 000 FCFA par mois. » Voici les huit salaires :
80 000 95 000 100 000 110 000 120 000 125 000 150 000 1 500 000
Sept employés gagnent entre 80 000 et 150 000 FCFA. Le huitième, c'est le patron. La moyenne est mathématiquement juste, mais aucun employé ne gagne quoi que ce soit qui ressemble à 285 000 FCFA. Une seule valeur extrême a tiré la moyenne vers le haut.
Avec NumPy :
import numpy as np
salaires = np.array([80000, 95000, 100000, 110000, 120000, 125000, 150000, 1500000])
print(salaires.mean()) # 285000.0
print(np.median(salaires)) # 115000.0
L'écart-type : mesurer la dispersion
Deux classes ont la même moyenne, 10 sur 20 :
- classe A :
10, 10, 10, 10; - classe B :
0, 20, 5, 15.
Elles ne se ressemblent pas du tout. Dans la A, tout le monde est au même niveau ; dans la B, il y a des élèves brillants et des élèves perdus. Il faut un nombre pour dire à quel point les valeurs sont étalées autour de la moyenne.
Pour la classe B : moyenne 10, écarts -10, 10, -5, 5, carrés 100, 100, 25, 25, variance (100 + 100 + 25 + 25) / 4 = 62,5, écart-type racine de 62,5, environ 7,9 points. Pour la classe A : tous les écarts sont nuls, écart-type 0.
np.array([10, 10, 10, 10]).std() # 0.0
np.array([0, 20, 5, 15]).std() # 7.905...
Exercice : Les salaires, honnêtement
Avec le tableau salaires, calcule :
moyenneetmedianede tous les salaires ;sans_patron: la moyenne des salaires sans le plus grand (utilise un masque, ne retire pas la valeur à la main) ;ecart: l'écart-type des salaires sans le patron, arrondi à l'entier.
Voir une solution
import numpy as np
salaires = np.array([80000, 95000, 100000, 110000, 120000, 125000, 150000, 1500000]) # donné
moyenne = salaires.mean()
mediane = np.median(salaires)
autres = salaires[salaires < salaires.max()]
sans_patron = autres.mean()
ecart = round(autres.std())
print(moyenne, mediane, sans_patron, ecart)Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Exercice : L'écart-type, à la main
Pour bien comprendre ce que fait .std(), écris ecart_type(valeurs) sans utiliser .std() ni .var() : calcule la moyenne, les écarts, leurs carrés, la moyenne des carrés, puis la racine carrée avec np.sqrt.
Voir une solution
import numpy as np
def ecart_type(valeurs):
"""Renvoie l'écart-type d'un tableau NumPy, calculé étape par étape."""
ecarts = valeurs - valeurs.mean()
variance = (ecarts ** 2).mean()
return np.sqrt(variance)
print(ecart_type(np.array([0, 20, 5, 15])))Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Teste-toi
Dans un village, 99 familles gagnent 50 000 FCFA par mois et une famille gagne 10 000 000 FCFA. Quelle phrase est juste ?
- La moyenne et la médiane sont proches
- La médiane (50 000) décrit mieux une famille typique que la moyenne (environ 150 000) (bonne réponse)
- La moyenne décrit mieux une famille typique
- L'écart-type est nul