Bienvenue
La visualisation des données est l’un des outils les plus importants pour la Data Science. C’est aussi un très bon moyen pour commencer à apprendre R : l’aspect concret de la visualisation de données peut garder motivé lorsqu’on traverse des périodes de découragement à l’apprentissage d’un nouveau langage.
Dans ce module, vous allez apprendre à visualiser des données avec {ggplot2}, qui est probablement le package de visualisation de données le plus populaire en R. Ce module vous permettra d’acquérir trois compétences essentielles :
Créer des graphiques avec un modèle (ou template) {ggplot2} réutilisable
Ajouter des variables à un graphique avec aesthetics
Sélectionner le “type” de votre graphique avec geoms
Ces trois compétences vont rapidement vous permettre d’ajouter la visualisation à votre boîte à outils de Data Scientist. Par la suite, vous pourrez en savoir plus et augmenter encore vos compétences avec le module Visualiser des données.
Remerciements
Ces exemples sont issus du livre R for Data Science d’Hadley Wickham et Garrett Grolemund, publié par O’Reilly Media, Inc., 2016, ISBN: 9781491910399. Vous pouvez vous procurer le livre ici : shop.oreilly.com.
Ce module utilise le packages qui composent le coeur du tidyverse, notamment {ggplot2}. Ce package a déjà été installé au préalable.
Un modèle de code
“The simple graph has brought more information to the data analyst’s mind than any other device.” - ” Le graphique apporte plus d’informations à l’esprit du Data Analyst que tout autre outil.” — John Tukey
Problématique
Commençons ce module avec une question à explorer.
mpg
Vous pouvez tester votre hypothèse avec le jeu de données
mpg
qui s’installe en même temps que {ggplot2}.
mpg
contient des observations de 38 modèles de voitures par
l’Agence de protection environnementale des Etats-Unis. Voici
quelques-unes des variables de mpg
:
displ
, la taille du moteur de la voiture, en litres.hwy
, le rendement énergétique sur l’autoroute, en miles par gallon (1 mpg = 0.425144 km/L)
Lorsqu’elles effectuent la même distance, une voiture avec un faible rendement énergétique consomme plus de carburant qu’une voiture avec un important rendement énergétique.
Pour visualiser le jeu de données mpg
, tapez
mpg
dans le bloc de code ci-dessous et cliquez sur
“Exécuter”.
mpg
Exemple de graphique
Le code ci-dessous utilise des fonctions du package
{ggplot2} pour tracer la relation entre
displ
et hwy
.
Regardons d’abord le graphique et examinons ensuite le code en lui-même. Pour voir le graphique, cliquez sur “Executer” (cela permet de lancer le code ci-dessous).
ggplot(data = mpg) +
aes(x = displ, y = hwy) +
geom_point()
Et la réponse est…
Le graphique montre une relation négative entre la taille du moteur
(displ
) et le rendement énergétique (hwy
). Les
points ayant une valeur importante de displ
ont une faible
valeur de hwy
, et vice versa.
Autrement dit, les voitures avec de gros moteurs utilisent plus de carburant. Si c’était votre hypothèse, elle était correcte !
Regardons à présent le graphique que nous avons réalisé.
ggplot()
Ci-dessous se trouve le code utilisé pour construire le graphique.
Notez qu’il contient trois fonctions : ggplot()
,
aes()
, et geom_point()
.
ggplot(data = mpg) +
aes(x = displ, y = hwy) +
geom_point()
La première fonction, ggplot()
, crée un système de
coordonnées auquel vous pouvez ajouter des couches. Le premier argument
de ggplot()
est le jeu de données utilisé dans le
graphique.
En soi, ggplot(data = mpg)
crée un graphique vide, ce
qui n’est pas très intéressant (donc on ne vous le montre pas !).
aes()
ggplot(data = mpg) +
aes(x = displ, y = hwy) +
geom_point()
aes
est utilisé pour regrouper toutes les
représentations visuelles que vous voulez créer. C’est dans la fonction
aes
que l’on définit les variables du jeu de données à
représenter sur les différents axes du graphique.
Ici, nous voulons représenter la variable displ
sur
l’axe des abscisses (x) et la variable hwy
sur l’axe des
ordonnées (y). C’est pourquoi on ajoute x = displ
et
y = hwy
dans aes()
(séparés par une virgule).
Où {ggplot2} va-t-il chercher ces variables à représenter ? Dans le jeu
de données que l’on a indiqué dans l’argument data
, dans ce
cas, mpg
.
geom_point()
ggplot(data = mpg) +
aes(x = displ, y = hwy) +
geom_point()
geom_point()
ajoute une couche de points au graphique
vide crée par ggplot() + aes()
. En conséquence, cela permet
d’obtenir un nuage de points.
Processus de création d’un graphique
Notre code suit le processus classique pour créer un graphique avec {ggplot2}. Pour faire un graphique, il faut :
Commencer par
ggplot()
Sélectionner les variables avec la fonction
aes()
Ajouter des éléments au graphique avec la fonction
geom_
Un modèle de graphique
Vous pouvez transformer votre code en modèle réutilisable pour créer
des graphiques. Pour faire votre graphique, remplacez les sections entre
chevrons dans le code avec un jeu de données, une collection de
représentations, ou une fonction geom_
.
Essayez ! Remplacez les sections entre chevrons avec les données
mpg
, class
pour l’axe x, hwy
pour
l’axe y, et geom_boxplot
pour faire un graphique légèrement
différent. Assurez-vous d’effacer les symboles #
de
commentaire avant de lancer le code.
# ggplot(data = <DATA>) +
# aes(x = <X>, y = <Y>)
# <GEOM_FUNCTION>()
ggplot(data = mpg) +
aes(x = class, y = hwy) +
geom_boxplot()
Problèmes fréquents
Lorsque vous allez commencer à lancer du code, vous allez surement rencontrer des problèmes. Mais ne vous inquiétez pas —cela arrive à tout le monde, même les plus expérimentés. Les programmeurs qui codent depuis des années écrivent tous les jours du code qui ne fonctionne pas du premier coup.
Commencez par comparer minutieusement le code que vous lancez et le
code des exemples. R est extrêmement pointilleux, et une faute de frappe
peut faire toute la différence… Assurez-vous que chaque parenthèse
ouvrante (
est associée à une parenthèse femante
)
, ou que chaque guillemet "
est associé à un
autre "
. Faites également attention à la distinction
majuscule/minuscule : R est sensible à la casse.
Emplacement du +
Un problème commun lors de la création d’un graphique avec {ggplot2}
est la position du +
au mauvais endroit : il doit être
situé à la fin de la ligne. En effet, R exécute le code ligne par ligne
: le +
en fin de ligne indique que la ligne qui suit
doit être prise en compte avant la création du
graphique.
Aide
Si vous êtes bloqué, essayez l’aide de R. Vous pouvez trouver de
l’aide sur n’importe quelle fonction en lançant un point d’interrogation
devant la fonction (par exemple ?geom_point
). Notez que la
partie la plus souvent utilisée est tout en bas de la page : les codes
d’exemples. Regardez si un exemple ressemble à ce que vous cherchez à
faire.
Si cela ne vous aide pas, lisez minutieusement le message d’erreur qui apparaît lorsque vous lancez votre code qui ne fonctionne pas. Vous pouvez coller ce message d’erreur dans google, car il est fort probable que vous ne soyez pas le premier à avoir eu cette erreur.
Exercice 1
Lancez ggplot(data = mpg)
. Qu’observez-vous ?
Exercice 2
Faites un nuage de points de cty
vs
hwy
.
"Les nuages de points utilisent le geom point."
Exercice 3
Que se passe-t-il si vous faites un nuage de points avec
class
vs drv
. Essayez pour voir. Ce graphique
vous semble-t-il utile ?
Parametres esthetiques de projection
“The greatest value of a picture is when it forces us to notice what we never expected to see.” - “Une image devient pertinente lorsqu’elle nous oblige à remarquer ce que nous ne nous attendions pas à voir.” — John Tukey
Regardons d’un peu plus près
Dans le graphique ci-dessous, un groupe de points (en rouge) semble s’écarter de la tendance linéaire qui lie la taille du moteur et la consommation d’essence. Ces voitures ont une consommation d’essence plus élevée qu’attendu. Comment pouvez-vous expliquer ces observations ?
Hypothèse
Émettons l’hypothèse que ces voitures sont hybrides. Un moyen de
tester cette hypothèse est de regarder la valeur de class
pour chaque voiture. La variable class
du jeu de données
mpg
classifie les voitures en groupes comme : compact,
midsize, ou SUV. Si les points rouges représentent les voitures
hybrides, ils devraient être classifiés en compact ou, éventuellement,
subcompact (notez que ces données ont été collectées avant que les
voitures hybrides ne deviennent populaires). Pour vérifier cette
hypothèse, nous avons besoin d’ajouter la variable class
au
graphique.
Autres paramètres d’aes
Vous pouvez ajouter une troisième variable, comme class
à un nuage de point en deux dimensions en la représentant dans un
nouveau aesthetic (paramètre esthétique de projection)
dans la fonction aes
. Les arguments d’aes
sont
des propriétés visuelles des objets dans un graphique. Ces propriétés
visuelles incluent entre autres la taille, la forme, et la couleur des
points.
Vous pouvez afficher un point de différentes façons en changeant ses
propriétés dans la fonction aes
. On utilisera le mot
‘niveau’ pour décrire les valeurs des paramètres de la fonction
aes
(le mot ‘valeur’ sera réservé aux valeurs de données).
Ici, on change le niveau de taille, forme, et couleur de points pour
faire un point petit, triangulaire, et bleu :
Stratégie
On peut ajouter l’information de la variable class
au
graphique en appliquant les niveaux d’un paramètre d’aes
(comme la couleur) aux modalités de la variable class
. Par
exemple, on peut colorer les points en vert s’ils appartiennent à la
classe ‘compact’, bleu s’ils appartiennent à la classe ‘midsize’, et
ainsi de suite.
A vous de jouer ! Enlevez les #
et remplacez les parties
manquantes dans le code ci-dessous par color = class
. Que
se passe-t-il? (notez que vous pouvez utiliser colour
ou
color
.)
# ggplot(data = mpg) +
# aes(x = displ, y = hwy, ____________) +
# geom_point()
Indice: Assurez-vous de supprimer tous les ’_’ et ‘#’ du code
ggplot(data = mpg) +
aes(x = displ, y = hwy, color = class) +
geom_point()
Et la réponse est…
Les couleurs révèlent qu’une grande partie des points qui semblent éloignés des autres sont des voitures à deux places (2seater). Ces voitures ne sont pas hybrides, ce sont en fait des voitures de sport ! Les voitures de sport ont de gros moteurs comme les camionnettes, mais de petites carrosseries comme les petites voitures (ce qui réduit leur consommation). Rétrospectivement, il était en fait peu probable que ces voitures aient été des voitures hybrides puisque elles ont de gros moteurs.
Ce n’est pas la seule chose que nous avons appris, vous avez aussi appris à ajouter de nouveaux paramètres esthétiques à vos graphiques. Revoyons le processus en entier.
Représenter les aes
Pour représenter une troisième variable par une forme ou une couleur,
il faut indiquer le nom de la variable concernée dans le paramètre de la
fonction aes
. {ggplot2} va automatiquement assigner un
niveau du paramètre esthétique (ici, une couleur) à chaque modalité de
la variable. {ggplot2} va aussi ajouter une légende qui explique quel
niveau correspond à quelle modalité.
Ainsi, en plus de définir la localisation de chaque points (x et y),
la fonction aes
permet de définir de nombreuses propriétés
visuelles de ces points.
Autres paramètres esthétiques de projection
Dans l’exemple précédent, nous avons représenté la variable
class
par des couleurs, mais nous aurions pu utiliser la
taille (size) pour la représenter.
Changez le code ci-dessous pour représenter class
par
des points de différentes tailles (size
). Que se
passe-t-il?
ggplot(data = mpg) +
aes(x = displ, y = hwy, color = class) +
geom_point()
Indice: Si color
change la couleur,
quel paramètre change la taille ?
ggplot(data = mpg) +
aes(x = displ, y = hwy, size = class) +
geom_point()
Transparence (alpha)
Vous pouvez aussi représenter class
grâce à l’argument
alpha
qui contrôle la transparence des points. Essayez en
dessous.
ggplot(data = mpg) +
aes(x = displ, y = hwy) +
geom_point()
Indice: Si color
change la couleur,
quel paramètre permet de changer alpha ?
ggplot(data = mpg) +
aes(x = displ, y = hwy, alpha = class) +
geom_point()
Forme (shape)
Essayons une dernière façon de visualiser les données grâce à un
paramètre d’aes
. Cette fois-ci, utilisez shape
pour représenter la variable class
. Regardez ensuite la
classe SUV, que se passe-t-il?
ggplot(data = mpg) +
aes(x = displ, y = hwy) +
geom_point()
Indice: Si color
change la couleur,
quel paramètre change la forme (shape en anglais) ?
ggplot(data = mpg) +
aes(x = displ, y = hwy, shape = class) +
geom_point()
Exercice 1
Dans le code ci-dessous, représentez cty
, qui est une
variable continue, avec color
, size
, et
shape
. Comment se comportent ces différentes
représentations pour une variable continue comme cty
par
rapport à une variable catégorielle comme class
?
# Représentez cty avec color
ggplot(data = mpg) +
aes(x = displ, y = hwy) +
geom_point()
# Représentez cty avec size
ggplot(data = mpg) +
aes(x = displ, y = hwy) +
geom_point()
# Représentez cty avec shape
ggplot(data = mpg) +
aes(x = displ, y = hwy) +
geom_point()
Exercice 2
Représentez class
avec color
,
size
, et shape
dans un même graphique. Est-ce
que cela fonctionne ?
ggplot(data = mpg) +
aes(x = displ, y = hwy) +
geom_point()
Indice: Assurez-vous de créer chaque représentation
visuelle séparément, par exemple color = class
,
size = class
, etc.
Exercice 3
Que se passe-t-il si vous représentez autre chose qu’uniquement le
nom de la variable, comme colour = displ < 5
?
Essayez.
ggplot(data = mpg) +
aes(x = displ, y = hwy) +
geom_point()
Paramétrage esthétique général
Comment faire si l’on veut changer la couleur de tous les points, par exemple en bleu comme ci-dessous ?
Vous pouvez faire cela en renseignant la couleur en argument de la
fonction geom()
, comme ceci :
ggplot(data = mpg) +
aes(x = displ, y = hwy) +
geom_point(color = "blue")
Paramètre global vs. Représentation d’une variable
Le paramétrage global dans geom_
fonctionne pour tous
les paramètres esthétiques de aes
. Si vous voulez spécifier
manuellement un paramètre esthétique pour l’ensemble du
graphique, renseignez les éléments dans
geom_()
.
ggplot(data = mpg) +
aes(x = displ, y = hwy) +
geom_point(color = "blue", shape = 3, alpha = 0.5)
Si par contre vous voulez modifier la représentation d’une
variable qui est dans votre jeu de données, indiquez
les éléments dans aes()
.
ggplot(data = mpg) +
aes(x = displ, y = hwy, color = class, shape = fl, alpha = displ) +
geom_point()
Exercice 4
D’après vous, quel est le problème dans le code ci-dessous ? Corrigez le code pour produire quelque chose de sensé.
ggplot(data = mpg) +
aes(x = displ, y = hwy, color = "blue") +
geom_point()
ggplot(data = mpg) +
aes(x = displ, y = hwy) +
geom_point(color = "blue")
Reprenons
Vous associez le nom du paramètre de la fonction aes
avec la variable que vous voulez représenter.
Une fois cette association faite, {ggplot2} s’occupe du reste. Il sélectionne une échelle adaptée et il construit la légende qui explique les différents niveaux du paramètre. Pour les représentations de x et y, ggplot2 ne crée pas de légende mais il crée un axe avec des marques (par exemple des graduations) et un titre. L’axe agit comme une légende : il explique la correspondance entre la localisation et les valeurs de la variable.
Vous avez expérimenté les représentations les plus courantes pour les
points : x
, y
, color
,
size
, alpha
et shape
. Chaque
geom
utilise son propre ensemble de paramètres de
représentation (vous ne vous attendez pas à ce qu’une ligne ait une
forme par exemple). Pour savoir quelles représentations utiliser pour un
certain geom, regardez sa page d’aide, par exemple
?geom_line
.
Ceci soulève une nouvelle question que nous n’avons fait qu’effleurer : qu’est-ce qu’un geom ?
Objets geometriques
Geoms
En quoi ces deux graphiques sont similaires ?
Les deux graphiques représentent la même variable x, la même variable y, et décrivent le même jeu de données. Mais, les deux graphiques ne sont pas identiques. Chaque graphique utilise un objet visuel différent pour représenter les données. Dans la syntaxe de {ggplot2}, on dit qu’ils utilisent différents geoms.
Un geom est un objet géométrique utilisé pour représenter les observations. Par exemple, les nuages de points utilisent le geom_point, les boîtes à moustaches utilisent le geom_boxplot, et les graphiques avec des lignes utilisent le geom_lines.
Comme vu précédemment, vous pouvez utiliser différents geom pour représenter les mêmes données. Le graphique de gauche utilise le geom boxplot et le graphique de droite le geom violin.
Fonctions geom
Pour changer l’objet géométrique utilisé par votre graphique, changez
la fonction geom. Par exemple, reprenez le code qui produit le graphique
de droite (du dessus), et changez geom_boxplot
par
geom_violin
. Qu’obtenez-vous ?
ggplot(data = mpg) +
aes(x = class, y = hwy) +
geom_boxplot()
# right
ggplot(data = mpg) +
aes(x = class, y = hwy) +
geom_violin()
Plus de geoms !
{ggplot2} contient plus de 30 fonctions geom que vous pouvez utiliser, et d’autres packages en procurent encore d’avantage (regarder https://exts.ggplot2.tidyverse.org/ pour une liste non exhaustive). Vous apprendrez comment utiliser ces geoms pour l’exploration de données dans le primer Visualiser des données.
Jusque là, le meilleur moyen d’obtenir une vue d’ensemble
compréhensible sur les geoms, c’est d’utiliser la cheatsheet {ggplot2}, cette petite page
remplie d’astuces trèsutiles. Et pour en savoir plus sur un geom en
particulier, regardez sa page d’aide (par ex :
?geom_violin
.)
Exercice 1
Quel geom utiliseriez-vous pour représenter un nuage de points ? Une boîte à moustaches ?
Bilan
Ce que vous avez appris ici : manipuler aes
,
geom
, et plus généralement les concepts de couches de
données et de couches de représentations. C’est ce qu’on appelle
la Grammaire des Graphiques (Grammar of Graphics en
anglais).
La Grammaire des Graphiques fournit un cadre systématique pour créer n’importe quel graphique, et elle a été utilisée pour créer le package {ggplot2}. En fait, les deux premières lettres de {ggplot2} sont pour “Grammar of Graphics”.
Grammaire des Graphiques
Le meilleur moyen pour comprendre la Grammaire des Graphiques est de la voir expliquée en actions :
Package {ggplot2}
Qu’est-ce qu’un package ?
Tout au long de ce module, nous avons référé à {ggplot2} comme étant un package. Qu’est-ce que cela veut dire ?
Le langage R est divisé en packages. Ce sont de petites collections d’ensembles de données et de fonctions qui se concentrent toutes sur une seule tâche. Les fonctions que nous avons utilisées dans ce module viennent d’un de ces packages, le package {ggplot2} dédié à la visualisation des données.
Ce que vous devez savoir sur les packages
Lorsque vous installez R, une petite collection de packages de base s’installe aussi ( base R). Les autres packages —il en existe plus de 17 000 !— sont optionnels. Vous n’aurez besoin de n’installer que ceux dont vous aurez besoin.
{ggplot2} est l’un de ces packages optionnels, de même que les autres packages que nous utiliserons dans ces modules. La facette la plus populaire et la plus moderne de R est généralement issue de ces packages optionnels.
Vous n’aurez pas besoin d’installer de packages dans ces modules de cours. Tous les packages dont vous aurez besoin sont déjà pré-installés.
Cependant, un jour, vous voudrez peut-être (et sûrement !) utiliser R en dehors de ces modules. Vous voudrez alors savoir de quels packages vous aurez besoin pour utiliser les fonctions que nous voyons ensemble ici. Tout au long de ces modules, nous tâcherons de clairement lier les fonctions aux packages dont elles sont issues. Vous devrez ainsi installer ces packages lorsque ce plongeon dans le grand bain de l’autonomie dans R viendra.
Si vous voulez en savoir d’avantage sur l’installation des packages R (ou R ou l’IDE – environnement de développement intégré– RStudio), la vidéo Installation) vous aidera dans le processus de paramétrage de R sur votre ordinateur.
Suite
Félicitations ! Vous pouvez utiliser {ggplot2} pour représenter n’importe quel jeu de données de différentes façons. Lorsque vous commencerez à explorer des données, vous gagnerez à intégrer ces outils dans votre façon de travailler.
Il y a bien plus dans {ggplot2} et dans la visualisation de données en général que ce que nous avons couvert ici. Si vous voulez en apprendre d’avantage sur la visualisation des données avec {ggplot2}, essayez le module Visualisation de données.
Vos nouvelles compétences en visualisation de données vont vous aider à apprendre d’autres parties de R, parce que vous savez maintenant visualiser les résultats d’un changement fait sur les données. Vous allez mettre vos compétences à profit dès le prochain module. Vous y aborderez la manière avec laquelle vous pouvez extraire des données depuis un jeu de données ainsi que la manière de calculer de nouvelles variables et des statistiques synthétiques à partir des données.