Un petit écart qui paraissait énorme
En réunion, un responsable regarde un diagramme en barres. La barre du soleil écrase celle de la pluie. Il veut donc douze fois plus de vélos les jours de beau temps.
Le vrai écart est bien plus petit. Les nombres du graphique étaient justes. Son axe trompait, et il répondait à la mauvaise question.
À la fin de cette leçon
Remarque
Je peux choisir un graphique qui répond à une question.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Diagramme en barres | une barre par groupe, sa longueur donne la valeur | |
| Courbe | des points reliés dans l’ordre, souvent dans le temps | |
| Histogramme | des barres qui comptent les valeurs tombées dans chaque intervalle | |
| Classe | un intervalle de valeurs dans un histogramme | 250 à 299 |
| Nuage de points | un point par ligne, placé par deux nombres | |
| Axe | l’échelle le long d’un bord du graphique |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
La question choisit le graphique
Partez de la question, pas du graphique. Pour comparer des groupes, prenez un diagramme en barres. Pour montrer une évolution dans le temps, une courbe.
Pour voir comment un nombre se répartit, un histogramme. Pour savoir si deux nombres varient ensemble, un nuage de points.
Le camembert est rarement le bon choix : l’œil juge bien mieux une longueur qu’un angle.
Exemple travaillé : quatre questions, quatre graphiques
| Question sur les locations | Graphique | pandas |
|---|---|---|
| Quelle météo attire le plus ? | Diagramme en barres | moyennes.plot.bar() |
| Comment les locations évoluent-elles dans l’année ? | Courbe | par_mois.plot.line() |
| Combien de jours calmes, normaux ou chargés ? | Histogramme | locations["hires"].plot.hist() |
| Les jours chauds sont-ils plus chargés ? | Nuage de points | locations.plot.scatter(x="temp_c", y="hires") |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
La moyenne des locations par mois
docker exec jupyter python3 steps/months.pyAffiché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.
À taper dans votre carnet : une courbe
import pandas as pd
locations = pd.read_csv("hires.csv")
ordre = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
par_mois = locations.groupby("month")["hires"].mean().reindex(ordre)
# Une courbe, car les mois se suivent.
par_mois.plot.line(marker="o", title="Locations moyennes par jour")
Un histogramme range les valeurs en classes
Un histogramme découpe une droite de nombres en classes de même largeur. Chaque valeur tombe dans une seule classe. La hauteur de la barre dit combien de valeurs y sont tombées.
Avec des classes de 50, un jour à 273 locations va dans la classe de 250 à 299. Divisez par la largeur sans garder le reste : 273 // 50 vaut 5, la sixième classe en comptant depuis 0.
Ranger les jours en classes
docker exec jupyter python3 steps/hist.pyAffiché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.
Des classes à la main
# Ranger les locations de huit jours dans des classes de 100.
jours = [35, 92, 140, 268, 271, 299, 300, 480]
largeur = 100
comptes = [0, 0, 0, 0, 0]
for valeur in jours:
place = valeur // largeur
comptes[place] = comptes[place] + 1
print(comptes)
# Mettez largeur à 50 et comptes à dix zéros.
# Quelle classe est alors la plus remplie ?
À taper dans votre carnet : classes de 100
# La division entière donne le numéro de classe de chaque jour.
(locations["hires"] // 100).value_counts().sort_index()
Une barre part de zéro
Le lecteur juge une barre à sa longueur. L’axe des valeurs d’un diagramme en barres doit donc partir de zéro, sinon les longueurs mentent.
axis.py trace deux fois la moyenne des locations par météo. À gauche, l’axe part de 0. À droite, il part de 220, juste sous la moyenne des jours de pluie. Le script enregistre les deux dans axis.png, à ouvrir depuis la liste de fichiers de JupyterLab.
Tracer un graphique de deux façons
docker exec jupyter python3 steps/axis.pyAffiché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 qu’un axe peut partir de n’importe où, sur n’importe quel graphique. Sur un diagramme en barres, la longueur est la valeur : partez de zéro. Une courbe montre une évolution plutôt qu’une taille. Son axe peut donc partir près des données, si les graduations le disent.
Pour aller plus loin
Dans votre carnet, tracez un histogramme des locations pour les jours de soleil et un autre pour les jours de pluie, sur les mêmes classes. Prenez range(0, 550, 50) comme classes et alpha=0.5 pour voir les deux.
Écrivez une phrase utile à la gérante. Dites ensuite quel graphique de la leçon répondrait à la même question avec un seul nombre par groupe.