Annexe · le notebook 3-05-seaborn-intro-nb, puis comment choisir sa représentation
3-05-seaborn-intro-nb
La séance 5 est allée vite sur les figures : nous reprenons en trois temps, bien séparés.
🖐️ 0. Hands-on seaborn, tout de suite : le notebook 3-05-seaborn-intro-nb du cours (dépôt numerique), que nous faisons ensemble, en direct.
numerique
1. Choisir sa représentation. Quel graphique pour quelles données ? La réponse ne dépend pas de l'outil : elle dépend du type de chaque colonne.
2. Retour sur seaborn : ce qu'il faut retenir du notebook, à la lumière des types.
On ouvre le notebook, on exécute, on modifie. Je montre au tableau, vous faites sur votre machine.
🖐️ Hands-on
git pull
notebooks/3-05-seaborn-intro-nb.md
relplot
total_bill
tip
hue=
col=
size=
displot
catplot
strip
box
violin
bar
À chaque cellule, changez une colonne ou un argument et regardez ce qui bouge. Posez-vous déjà la question : de quel type est cette colonne ? On y répond juste après.
💡 sns.load_dataset télécharge les données : il faut une connexion la première fois.
sns.load_dataset
Le type des données d'abord, le graphique ensuite : vrai pour seaborn, matplotlib, un tableur ou un crayon.
🎨 Choisir sa représentation
C'est le jeu tips du notebook : des montants (total_bill, tip), un nombre de convives (size), des oui/non (smoker), des étiquettes (sex, time) et des jours (day).
tips
size
smoker
sex
time
day
Pouvez-vous deviner lesquelles se rangent dans un ordre naturel ?
En clair : quantitatif = on peut calculer avec ; qualitatif = on ne peut que compter et, s'il y a un ordre, ranger.
À l'inverse, un oui/non se code souvent 1/0 : c'est une nominale, dont la moyenne donne une proportion.
Le réflexe : regarder ce que la colonne veut dire, pas comment elle est écrite.
Une troisième variable s'ajoute par la couleur, la taille des points ou des facettes (une petite figure par catégorie).
Un dégradé dit « plus ou moins » : il convient à une ordinale ou à une quantitative, jamais à une nominale (fumeur n'est pas « plus » que non-fumeur).
🌟 Des visualisations qui ont fait date · 1/4
Exportations et importations de l'Angleterre avec le Danemark et la Norvège, 1700-1780 : deux quantitatives dans le temps, et l'aire entre les courbes montre la balance commerciale. Playfair invente aussi le diagramme en barres, puis le camembert (1801).
Domaine public, via Wikimedia Commons.
🌟 Des visualisations qui ont fait date · 2/4
Londres, quartier de Soho : chaque décès est un petit trait noir, posé à l'adresse du malade. Les traits s'agglutinent autour d'une pompe, celle de Broad Street : le choléra passe par l'eau. On démonte la poignée, l'épidémie recule.
🌟 Des visualisations qui ont fait date · 3/4
Guerre de Crimée, un secteur par mois : en bleu, les morts de maladies évitables ; en rouge, de blessures ; en noir, d'autres causes. Les soldats meurent bien plus à l'hôpital qu'au combat. Ici, c'est l'aire de chaque secteur qui suit le nombre de morts, comme il se doit.
🌟 Des visualisations qui ont fait date · 4/4
Six variables sur une seule image : effectif de l'armée (épaisseur), position, sens de marche (couleur), dates et température du retour. « Probablement le meilleur graphique statistique jamais dessiné » (Edward Tufte).
Ce qu'il faut retenir du notebook, à la lumière des types.
🐍 seaborn
seaborn est une brique au-dessus de matplotlib qui parle DataFrame : on lui nomme des colonnes, il choisit les axes, les couleurs et la légende… d'après leur type.
DataFrame
import seaborn as sns tips = sns.load_dataset("tips") tips.dtypes # sex, smoker, day, time : category
Les trois familles du notebook :
sns.relplot
sns.displot
sns.catplot
tips["day"].cat.categories # ['Thur', 'Fri', 'Sat', 'Sun'] : l'ordre retenu # rendre une colonne catégorielle, et ordonnée df["mention"] = pd.Categorical(df["mention"], ordered=True, categories=["passable", "assez bien", "bien", "très bien"]) df["Pclass"] = df["Pclass"].astype("category") # 1, 2, 3 : des classes, plus des nombres
order=
hue_order=
palette=
"rocket_r"
"Blues"
"Set2"
"tab10"
"vlag"
sns.displot(kind="hist")
kind="kde"
sns.relplot(kind="scatter")
kind="line"
sns.catplot(kind="box")
"violin"
"bar"
sns.catplot(kind="count")
sns.heatmap(pd.crosstab(…))
La troisième variable : hue= (couleur), size= (taille), col= / row= (facettes).
row=
🐍 seaborn · deux quantitatives
sns.relplot(data=tips, x="total_bill", y="tip", hue="time", palette="Set2")
time (déjeuner, dîner) est nominale : une palette qualitative, aux teintes bien distinctes.
🐍 seaborn · une ordinale et une quantitative
sns.catplot(data=tips, x="day", y="total_bill", kind="box", color="#7fb3d5")
day est une catégorie ordonnée : l'axe suit jeudi → dimanche, et non l'ordre alphabétique.
Pour une colonne texte, c'est à vous de le donner : order=["Thur", "Fri", "Sat", "Sun"].
order=["Thur", "Fri", "Sat", "Sun"]
🐍 seaborn · une quantitative seule
sns.displot(data=tips, x="total_bill", hue="time", kind="hist", palette="Set2")
hue= superpose les déjeuners et les dîners ; kind="kde" donne une courbe lissée.
🐍 seaborn · deux qualitatives
sns.catplot(data=tips, x="day", hue="sex", kind="count", palette="Set2")
Rien à mesurer : on compte les additions par jour, puis par sexe du payeur.
🐍 seaborn · le piège
sns.relplot(data=tips, x="total_bill", y="tip", hue="size", palette="rocket_r")
Du clair (1 convive) au foncé (6) : c'est juste, 6 convives c'est « plus » que 1.
Avec hue="smoker", seaborn prend une palette qualitative : c'est le type de la colonne qui décide.
hue="smoker"
Pour toute question, vous pouvez me contacter par email : raphael@imagine-app.fr.
fig: img-seaborn/relplot.svg
fig: img-seaborn/catplot-box.svg
fig: img-seaborn/displot.svg
fig: img-seaborn/count.svg
fig: img-seaborn/hue-size.svg