Décrire une série, sans bibliothèque puis avec
Exercice d'entraînement · niveau 2 · mathématiques appliquées (ECG 1re année), chapitre 6 — Probabilités et statistiques · Statistiques en Python
Énoncé
Écrire, sans utiliser numpy, trois fonctions Python moyenne(L), variance(L) (par la formule de Koenig) et mediane(L) pour une liste de nombres. Comparer ensuite les résultats à np.mean, np.var et np.median sur la liste [4, 7, 7, 9, 13]. Sur quel point faut-il se méfier de np.var ?
Corrigé
Les trois fonctions.
def moyenne(L):
s = 0
for x in L:
s = s + x
return s / len(L)
def variance(L): # formule de Koenig
n = len(L)
s, s2 = 0, 0
for x in L:
s = s + x
s2 = s2 + x * x
return s2 / n - (s / n) ** 2
def mediane(L):
M = sorted(L) # sorted ne modifie pas L
n = len(M)
if n % 2 == 1:
return M[n // 2]
return (M[n // 2 - 1] + M[n // 2]) / 2
La fonction variance ne parcourt la liste qu'une fois, en accumulant et : c'est tout l'intérêt pratique de la formule de Koenig.
La comparaison. Sur [4, 7, 7, 9, 13] : , , donc , et la médiane est la troisième valeur triée, . Le code renvoie 8.0, 8.8 et 7 ; np.mean, np.var et np.median donnent les mêmes valeurs.
Le point de méfiance. np.var divise par — c'est bien la variance du cours. Mais l'option np.var(x, ddof=1) divise par et renvoie ici , un autre nombre. Selon les logiciels, l'un ou l'autre est le comportement par défaut ; il faut toujours vérifier lequel est employé avant de comparer deux résultats. Le même piège vaut pour np.std.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.