M2 Sigma – Module U902_2 - Dataviz - séance 2
Séance 2 : Pratique avec R, GGplot2, Shiny et Observable Plot.
L’objectif de cette séance est d’approfondir et de pratiquer la visualisation de données sous R, en utilisant les fonctions internes, le package GGPlot2 et la visualisation interactive avec le package Shiny. On poursuivra par la pratique de la bibliothèque Plot dans Observable.
Ressources pour les graphiques avec R
Le cours en ligne d’Andrew Heiss : https://datavizs21.classes.andrewheiss.com/ (syllabus, ressources, diaporamas…). Notamment le chapitre 3.
Le site r-statistics, avec ses tutoriels pour GGPlot2 : http://r-statistics.co/
Le site r-graph-gallery : https://www.r-graph-gallery.com/
Le site R-Charts : https://r-charts.com/
Les tutoriels en français de Datanovia : https://www.datanovia.com/en/fr/lessons/ggplot-barplot/
le nouveau site GGPlot2 Uncharted de Y. Holtz et C. Scherer (introduction et bases gratuites) : https://www.ggplot2-uncharted.com/
L’ouvrage de référence de L. Wilkinson, 2005. Grammar of Graphics, Springer. https://link.springer.com/book/10.1007/0-387-28695-0 (disponible en PDF via les ressources numériques de la bibliothèque universitaire)
L’ouvrage H. Wickham, 2016. Ggplot2, Elegant Graphics for Data Analysis, libre en ligne : https://ggplot2-book.org/
L’ouvrage K. Healy, 2018, Data Visualization. A practical introduction. PUP et libre en ligne : https://socviz.co/index.html
Le tutoriel de Cédric Scherer, « évolution d’un ggplot », avec les boxplots (boîtes à moustaches) : https://www.cedricscherer.com/2019/05/17/the-evolution-of-a-ggplot-ep.-1/
Les « cheatsheets » de Posit/R-Studio : https://www.rstudio.com/resources/cheatsheets/
Un article de review très intéressant, par S. L. Franconeri et al. : https://journals.sagepub.com/stoken/default+domain/10.1177%2F15291006211051956-FREE/full
Les graphiques avec R-Base
Graphiques simples
Le langage R possède un ensemble de fonctionnalités de représentation graphique de base, via la commande *plot*. Cette commande va réaliser une représentation graphique automatiquement, en fonction du *type* d’objet, de structure de données, qui lui est passé.
Elle comporte donc beaucoup de paramètres par défaut qui permettent de produire rapidement un graphique, sans fournir de détails sur sa présentation. On peut naturellement préciser des paramètres pour modifier ce comportement par défaut.
La liste de tous les paramètres communs des fonctions de représentation graphique de base est disponible sur cette page du manuel : https://stat.ethz.ch/R-manual/R-devel/library/graphics/html/par.html
Pour commencer simplement, passons une série de valeurs (un vecteur dans le vocabulaire R) à la commande plot :
Si on passe des couples de points (deuxième ligne), plot les interprète comme des listes de coordonnées X,Y. Attention, ce ne sont pas des points définis par un couple X,Y chacun, mais bien deux X, puis deux Y.
Si on passe deux séries de valeurs, alors plot les interprète de la même manière comme des suites de coordonnées X, puis Y :
On peut naturellement rendre le graphique plus lisible avec des titres.
Si le type de représentation par défaut n’est pas celui désiré, on peut forcer la commande plot à en changer avec le paramètre « type » :
"p" - points "l" - lines "b" - both points and lines "c" - empty points joined by lines "o" - overplotted points and lines "s" and "S" - stair steps "h" - histogram-like vertical lines "n" - does not produce any points or lines
Pour représenter plusieurs courbes sur le même graphe, ainsi qu’une légende pour les distinguer, on peut utiliser plot() pour dessiner la première courbe, puis line() et legend() pour ajouter une autre courbe et la légende.
Un exemple avec plusieurs courbes, une légende
Ici, on utilise une structure de type dataframe pour stocker les données en un tableau de trois colonnes.
Le graphe est dessiné ligne par ligne, d’abord sans axes, avec des couleurs et des formes de symboles différents (pch). On ajoute ensuite les axes, les titres, puis la légende et le cadre.
Les autres types de graphiques
La commande plot() génère des courbes par défaut. Pour produire les autres types de graphiques, il faut utiliser d’autres commandes.
Les diagrammes en barres sont indiqués pour représenter des valeurs discrètes. Avec la commande barplot(), les barres sont dessinées dans l’ordre des valeurs, on peut leur donner des noms avec le paramètre names.arg.
En utilisant notre dataframe de véhicules, on peut produire des barplots multiples.
Si ce sont les jours qui nous intéressent plus que les véhicules, on peut transposer la matrice (la pivoter, permuter les lignes et les colonnes).
Les diagrammes en secteurs, pou pie charts en anglais, sont aussi disponibles, adaptés à la représentation des proportions.
Les diagrammes en profils de points permettent de comparer sur un même axe les différentes valeurs.
Représenter les distributions
La représentation des distributions, des répartitions des valeurs dans une variable (fréquences) est souvent très utile. R propose des graphes standard : histograme, boxplot.
Ici, on va utiliser une variable fournie avec le jeu de données standard « airquality » pour disposer de plus de valeurs.
Avec une classification de Jenks en 7 classes
Source : MathWorks
Exercice : dessiner l’histogramme de fréquence et le boxplot pour les données d’ensoleillement
Les heatmaps : cartes de chaleur ou matrices (par exemple les matrices de confusion en TLD)
Les fonctions de base de R comprennent de quoi dessiner et regrouper automatiquement des valeurs sur deux dimensions, des matrices, selon des algorithmes de clustering (hclust par défaut, avec une dissimilarité par dist).
Les graphiques avec GGPlot2
Ggplot2 est une extension très largement utilisée de R pour la représentation graphique. Elle apporte des types de représentations plus variés, mais aussi une nouvelle manière de réaliser des graphiques, plus logique et plus organisée, selon une véritable grammaire.
En effet, les lettres « GG » dans GGPlot2 correspondent à la « Grammar of Graphics », d’après le célèbre ouvrage de Leland Wilkinson. Ce manuel, réédité en 2005, propose une nouvelle manière de réfléchir à la représentation graphique. Il est en partie inspiré de la Sémiologie Graphique de J. Bertin. Dans le cadre de l’ensemble de packages nommé « Tidyverse » développé par l’équipe de ösit/R-Studio, GGPlot se veut une implémentation sous R de la méthode de Leland Wilkinson.
Pour simplifier, selon cette méthode, la production d’un graphique consiste à affecter les variables à représenter à des dimensions géométriques, puis à attribuer des propriétés esthétiques (des variables visuelles) pour réaliser cette représentation, via des mappings.
Ainsi, un graphique est modulaire, composé en assemblant des éléments indépendants, ce qui apporte une grande souplesse dans le test et le paramétrage des représentations graphiques.
- Un layer est une collection d’éléments géométriques, ou geoms, et de transformations statistiques, les stats. Les geoms représentent ce que l’on voit concrètement dans le graphe : des points, des lignes, des polygones. Les stats sont des réductions, des synthèses, des indicateurs tirés des variables (comptages, moyennes, classifications…).
- Les scales sont des mappings, des transformations des valeurs de l’espace des données à celui des esthétiques (des variables visuelles). Cela comprend l’utilisation de la couleur, de la forme, de la taille. Les scales dessinent aussi la légende et les axes.
- Un coord, ou système de coordonnées, décrit comment les coordonnées des variables sont mappées sur le plan du graphique. Il procure aussi des axes et des grilles pour aider à la lecture du graphique. Généralement, il s’agit du système cartésien, mais on peut utiliser une projection polaire ou cartographique.
- Une facette spécifie comment décomposer et afficher des sous-parties des données, en tant que small multiples. On parle aussi de treillis.
- Un thème contrôle des ensembles de paramétrage graphique : tailles et fontes des polices, couleurs de fond. On peut ainsi définir sessstyles selon une charte graphique et les ré-appliquer ensemble facilement.
GGPlot2 fonctionne de manière cumulative : on représente les données, puis on ajoute des analyses et des annotations. La feuille « cheatsheet » de GGPlot2 est très utile pour synthétiser la syntaxe et les possibilités du package : https://posit.co/resources/cheatsheets/
GGPlot2 a été porté sur Python, selon la même syntaxe par plusieurs bibliothèques, par exemple plotnine : https://realpython.com/ggplot-python/
Les graphes simples avec GGPlot2
Cf. le code du script 2-ggplot-simple.R.
Ici, une table au format dataframe est créée, avec une colonne d’étiquettes (labels). Les structures de données de type dataframe permettent de gérer des jeux de données de manière plus compacte et plus accessible. Les données spatiales sont souvent dans ce format, avec des dimensions spatialisées.
Un premier graphique est réalisé avec la commande ggplot, en fournissant les données, une esthétique qui utilise les deux vecteurs x et y, pour produire un graphique de points, qui est stocké dans l’objet p. Notez que les paramètres sont ajoutés par le signe « + » (fonctionnement venu du « tidyverse » de R).
Le graphique en barres n’est pas dimensionné selon 3 valeurs discrètes, comme on les produit d’habitude, mais bien par les coordonnées des 3 points.
Pour réaliser les graphiques suivants, il suffit de surcharger l’objet p avec l’opérateur « + », ce qui change le type de graphique, via des geoms différents. L’esthétique de mappage sur des coordonnées x,y reste, c’est le type de représentation qui varie.
Des graphes plus complexes
Préparation
Ici, on génère un graphe en points avec des étiquettes sur certains de ces points, à partir des données INSEE/Filosofi par EPCI (utilisés lors de la séance précédente).
Notez comment le package « ggrepel » est utilisé pour placer les étiquettes sans qu’elles se superposent. Le graphique est ensuite exporté au format PDF avec ggsave().
Exercice : Reproduire ce graphe avec l’indicateur de la part des retraites dans le revenu disponible, en étiquetant les valeurs < 14% et > 52%.
Les « beeswarm », ou graphes en essaim d’abeilles, sont produits avec la geom « geom_quasi_random() » :
Le graphe en nuage de points X/Y utilise la geom_point() classique :
Pour ajouter une troisième variable, représentée par la taille des cercles, on modifie la commande en le précisant dans l’esthétique des points :
Enfin, on peut colorer les bulles pour renforcer l’effet de la taille our exprimer la population, en le précisant dans l’esthétique des points :
Exercice : - Reproduire ce graphe en comparant le niveau de vie médian et l’indicateur de la part des retraites dans le revenu disponible et la population en 2021 pour la taille et la couleur. - Utiliser une autre palette de couleurs. - Adapter le filtre des étiquettes pour produire un graphique plus lisible.