Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Lire un résultat honnêtement

Après cette leçon: Je peux dire jusqu’où on peut croire le résultat d’un échantillon.

Leçon de 60 min5 commandesLab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Dix jours d’hiver

Un nouvel employé compte les locations des dix premiers jours de l’année et dit : « On loue environ 197 vélos par jour. » Le patron approuve.

L’année entière donne environ 270. Le nombre était juste et la phrase était fausse. Un résultat vaut ce que valent l’échantillon, la dispersion et le groupe derrière lui.

À la fin de cette leçon

Remarque

Je peux dire jusqu’où on peut croire le résultat d’un échantillon.

Mots-clés

MotCe que ça veut dire
Échantillonquelques lignes prises dans un tableau plus grand
Représentatifun échantillon qui ressemble au tableau entier
Dispersionde combien les valeurs diffèrent les unes des autres
Valeur aberranteune valeur loin des autres, vraie ou fausse
Médianela valeur du milieu quand les valeurs sont rangées
Taille du groupele nombre de lignes derrière une moyenne ou un compte

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un échantillon sert s’il ressemble au tout

Souvent on ne peut pas tout regarder : on prend un échantillon. Un bon échantillon est représentatif : il ressemble au tableau entier sur ce qui compte.

Les dix premières lignes d’un tableau sont rarement représentatives. Elles viennent toutes du même endroit ou du même moment.

Comparer trois façons de choisir des jours

Commande
docker exec jupyter python3 -c "import pandas as pd; h=pd.read_csv('hires.csv'); print(\"moyenne de l’année :\", round(h['hires'].mean(),1)); print(\"moyenne des 10 premiers jours :\", round(h['hires'].head(10).mean(),1)); print(\"moyenne d’un jour sur 36 :\", round(h['hires'].iloc[::36].mean(),1), len(h['hires'].iloc[::36]))"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un échantillon au hasard bouge encore

Tirer des lignes au hasard évite un motif. Mais un petit échantillon au hasard donne chaque fois une autre moyenne, et un grand échantillon bouge moins.

Dans pandas, sample(10, random_state=1) tire dix jours. Le random_state est une graine : le même nombre redonne les mêmes jours.

Six échantillons de 10 jours, six de 100

Commande
docker exec jupyter python3 -c "import pandas as pd; h=pd.read_csv('hires.csv'); print([round(h['hires'].sample(10, random_state=s).mean(),1) for s in range(1,7)]); print([round(h['hires'].sample(100, random_state=s).mean(),1) for s in range(1,7)])"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une grande valeur, et que faire d’elle

Une valeur aberrante est loin des autres. Elle tire la moyenne vers elle, mais bouge à peine la médiane.

Ne la supprimez pas parce qu’elle est grande. Demandez si elle peut être vraie. Une erreur, comme 5000 locations dans un magasin de 30 vélos, se retire. Un vrai jour chargé reste, et on le signale.

Un jour énorme, calculé en Python

Code: python
# Sept jours de locations dans une station, puis la même liste avec un jour énorme.
jours = [204, 173, 327, 173, 240, 198, 220]
def milieu(valeurs):
    en_ordre = sorted(valeurs)
    moitie = len(en_ordre) // 2
    if len(en_ordre) % 2 == 1:
        return en_ordre[moitie]
    return (en_ordre[moitie - 1] + en_ordre[moitie]) / 2

print("moyenne :", round(sum(jours) / len(jours), 1), "médiane :", milieu(jours))
jours.append(5000)
print("moyenne :", round(sum(jours) / len(jours), 1), "médiane :", milieu(jours))
# Lequel des deux nombres a le plus bougé ?

Mettre un 5000 inventé au premier jour

Commande
docker exec jupyter python3 -c "import pandas as pd; h=pd.read_csv('hires.csv'); t=h.copy(); t.loc[t.index[0],'hires']=5000; print(round(h['hires'].mean(),1), h['hires'].median(), round(t['hires'].mean(),1), t['hires'].median())"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Regarder les trois plus grands jours

Commande
docker exec jupyter python3 -c "import pandas as pd; h=pd.read_csv('hires.csv'); print(h.nlargest(3,'hires')[['date','weather','hires']].to_string(index=False))"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une erreur fréquente

Attention

Beaucoup pensent que la médiane est toujours meilleure que la moyenne. Elle est plus stable face à une valeur aberrante, mais elle cache sa taille. Donnez les deux, dites quelle était la plus grande valeur et pourquoi vous l’avez gardée.

Regardez la taille de chaque groupe

Une moyenne sur 8 jours et une moyenne sur 200 jours ne sont pas des preuves égales. Affichez toujours combien de lignes il y a dans chaque groupe, à côté de sa moyenne.

Et soignez le verbe. Les jours de pluie vont avec moins de locations dans ce tableau. Montrer que la pluie les cause demande plus qu’une moyenne.

Jours de pluie contre jours de soleil

Commande
docker exec jupyter python3 -c "import pandas as pd; h=pd.read_csv('hires.csv'); r=h[h['weather']=='rainy']['hires']; s=h[h['weather']=='sunny']['hires']; print(len(r),len(s),round(r.mean(),1),round(s.mean(),1)); print(round(r.std(),1), round(s.std(),1))"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Exemple travaillé : lire les nombres

Ce qu’on voitCe qu’on peut direCe qu’on ne peut pas dire
120 jours de pluie, moyenne 227.6Les jours de pluie ont eu moins de locations iciQue la pluie est la seule raison
131 jours de soleil, moyenne 312.2Les jours de soleil étaient plus chargés iciQue ce sera pareil l’an prochain
Dispersion de 80.3 et 68.2Un jour isolé varie beaucoupQu’un jour donné sera proche de sa moyenne

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Plus loin : une règle juste

Dans votre carnet, trouvez les percentiles 25 et 75 de hires avec quantile. Appelez leur écart l’EIQ.

Comptez les jours sous le percentile 25 moins 1,5 EIQ ou au-dessus du percentile 75 plus 1,5 EIQ. Quels jours sont-ce, et en retireriez-vous un ?

À propos de ce labo et de sa source: Lab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.