01 75 60 34 00 | conseil@ensae.fr | Prenez RDV |

Construire des graphes efficaces avec Python

DATA SCIENCE & IA 1 jour (6 h) Intermédiaire 790 € HT Nouveau
Construire des graphes efficaces avec Python

Objectifs pédagogiques

  • Restituer l’information contenue dans les données ou les résultats des analyses effectuées de façon claire et didactique.
  • Naviguer dans les données afin de trouver des pistes d’analyses.

Programme détaillé

Une donnée mal mise en forme est une donnée mal exploitée. Dans un contexte de multiplication des sources et d’augmentation incessante de la volumétrie, la visualisation des données prend de plus en plus d’importance pour assurer la pertinence de l’information transmise.

Rappels historiques 30 min

Bonnes pratiques et erreurs classiques 30 min

Sémiologies graphiques 1h

Utilisation de matplotlib, seaborn et plotnine (ggplot) pour représenter des données avec Python 2h

Présentation des outils spécialisés (plotly) 2h

Public visé

Data analysts

Prérequis

Approche pédagogique

Moyens pédagogiques
Exposé théorique de concepts Applications pratiques sur ordinateur Échanges sur les pratiques et expériences des participants Temps de questions / réponses
Méthodes pédagogiques
Méthode expositive Méthode démonstrative

Sémiologie graphique : ce que Jacques Bertin apprend aux graphiques Python

matplotlib, seaborn ou plotly savent tout tracer ; aucune ne dit quoi tracer. Les règles qui permettent de choisir une représentation viennent en grande partie d’un cartographe français, Jacques Bertin, et d’expériences de perception menées vingt ans plus tard aux laboratoires Bell.

Les variables visuelles de Bertin (1967)

Dans Sémiologie graphique, publié en 1967, Jacques Bertin, cartographe à l’École pratique des hautes études, recense les moyens dont dispose un graphique pour transcrire une information : les deux dimensions du plan, et six variables dites « rétiniennes », la taille, la valeur (du clair au foncé), le grain, la couleur, l’orientation et la forme. Toutes ne disent pas la même chose. La taille peut exprimer une quantité ; la valeur exprime un ordre ; la couleur, au sens de la teinte, distingue des catégories mais n’ordonne rien : personne ne sait si le vert est « plus » que le violet.

D’où une erreur fréquente : représenter une variable ordonnée (un taux, une classe d’âge) par une palette arc-en-ciel. seaborn traduit directement la distinction de Bertin dans ses palettes : séquentielles, en dégradé de valeur, pour une variable ordonnée (sns.color_palette("Blues")), qualitatives, en teintes distinctes, pour des catégories (sns.color_palette("Set2")).

Cleveland et McGill (1984) : mesurer la perception

En 1984, William Cleveland et Robert McGill publient dans le Journal of the American Statistical Association une série d’expériences sur la précision avec laquelle on lit différentes représentations. Leur classement est resté une référence : on compare le plus précisément des positions sur une échelle commune, puis des longueurs, puis des angles et des pentes, puis des surfaces, et en dernier des intensités de couleur.

C’est la raison pour laquelle un diagramme en barres se lit mieux qu’un camembert : le premier demande de comparer des longueurs alignées sur une même échelle, le second des angles et des surfaces. Trier les barres ajoute un ordre que l’œil lit immédiatement :

import matplotlib.pyplot as plt
import pandas as pd

parts = pd.Series({"Nord": 18, "Est": 23, "Ouest": 21, "Sud": 26, "Centre": 12}).sort_values()
fig, ax = plt.subplots()
ax.barh(parts.index, parts.values, color="steelblue")   # une seule teinte : la longueur porte l'information
ax.set_xlabel("Part des ventes (%)")

Et la grammaire des graphiques ?

plotnine, la troisième bibliothèque au programme, reprend en Python la syntaxe de ggplot2 et sa « grammaire des graphiques », dont l’histoire est racontée dans le bloc de la formation Construire des graphiques efficaces avec R. Pour aller du graphique interactif plotly jusqu’à l’application web, voir Python expert — Développement d’interfaces graphiques et dataviz avancée.