-
Notifications
You must be signed in to change notification settings - Fork 0
/
02-Visualisation-I.Rmd
executable file
·315 lines (202 loc) · 23.3 KB
/
02-Visualisation-I.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
# Visualisation I {#visu1}
```{r setup, include=FALSE, echo=FALSE, message=FALSE, results='hide'}
SciViews::R
```
##### Objectifs {.unnumbered}
- Découvrir ce que l'on peut faire avec le [logiciel R](https://www.r-project.org) [@R-base]
- Être capable de réaliser différentes variantes d'un graphique en nuage de points dans R avec la fonction `chart()`
- Découvrir le format Quarto/R Markdown [@R-rmarkdown] et la recherche reproductible
- Intégrer ensuite des graphiques dans un rapport et y décrire ce que vous observez
##### Prérequis {.unnumbered}
Le premier module de ce cours vous a permis de découvrir de nouveaux outils logiciels comme GitHub, Git, Markdown ou encore RStudio. Ces outils vont être employés tout au long de votre formation en science des données (et donc de ce cours). Il est indispensable de les maîtriser.
##### À vous de jouer ! {.unnumbered}
`r h5p(139, height = 270, toc = NULL)`
Ce second module va se focaliser sur la réalisation de graphiques en nuage de points. Il est important de maîtriser les [éléments de base de la géométrie](https://mathix.org/cours_interactif/index.php?l=fr&n=3e&c=Rep%C3%A9rage) : origine, abscisse, ordonnée, coordonnées d'un point dans un plan...
##### À vous de jouer ! {.unnumbered}
Le graphique ci-dessous présente la variation de la hauteur du test en fonction de la masse d'oursins (n'hésitez à faire des petites recherches par vous-même, si vous ne savez pas ce qu'est le "test" d'un oursin).
`r h5p(154, height = 270, toc = NULL)`
Ce second module va également vous faire utiliser des fonctions mathématiques. Vous devez maîtriser les notions suivantes : [les puissances](https://fr.khanacademy.org/math/algebra-basics/alg-basics-expressions-with-exponents), [les logarithmes, dont le logarithme népérien et les exponentielles](https://fr.khanacademy.org/math/algebra2/exponential-and-logarithmic-functions).
## R, les éléments de base
Dans le module précédent, vous avez pu découvrir que le logiciel **R** allait être un outil central dans cette formation en science des données. Par exemple, vous avez édité votre premier document Quarto qui combine R (pour les calculs, les graphiques et les tables) avec du Markdown (pour le formatage du texte). Nous allons maintenant nous initier aux rudiments de l'utilisation de R.
![](images/sdd1_02/Rlogo.png)
[R](https://www.r-project.org/about.html) est un logiciel **open source** (c'est-à-dire que son code source est disponible ; un logiciel est constitué de la **compilation** d'un code source qui peut être rendu public comme ici, ou non) spécialisé dans l'analyse de données. Le langage de programmation R qu'il implémente est mature et développé depuis 1993. Il prend ses sources dans le langage S (spécialement conçu pour les statistiques dans les années 1970). R permet, entre autres, la manipulation et la visualisation de données, ainsi que les calculs statistiques. C'est l'un des logiciels les plus utilisés et les plus puissants pour l'analyse des données, avec Python, Julia et Matlab. Donc, étudier R sera un **investissement clé** pour votre future carrière de biologiste, car des données, vous en aurez tous à en analyser !
##### À vous de jouer ! {.unnumbered}
Dans le premier module, vous avez réalisé un premier tutoriel qui contenait principalement des questions à choix multiples. Ces tutoriels servent aussi à vous entraîner à écrire des instructions en R. Avant de vous lancer dans ces exercices, consultez l'Appendice \@ref(learnr) pour apprendre à utiliser correctement ces tutoriels learnrs pour les questions relatives à du code R.
`r learnr("A02La_base", title = "Les bases de R", toc = "Notions de base de R")`
Vous venez de découvrir les assignations, les fonctions, le chaînage d'instructions... Lancez-vous à présent dans une première analyse concrète de données biologiques.
`r learnr("A02Lb_progression", title = "Progression R", toc = "Progression en R")`
([BioDataScience1](https://github.com/BioDataScience-Course/BioDataScience1) est un package R spécialement développé pour ce cours et qui est préinstallé dans votre SciViews Box).
`r h5p(156, height = 270, toc = "Sélection de la fonction adéquate")`
## Nuage de points
Dès que vous commencez à maîtriser les principes de base de R, vous allez pouvoir réaliser assez rapidement de beaux graphiques. Par exemple, si vous souhaitez représenter une variable numérique en fonction d'une autre variable numérique, vous pouvez exprimer cela sous la forme d'une **formule**[^02-visualisation-i-1]
[^02-visualisation-i-1]: Dans R, une **formule** permet de spécifier les variables avec lesquelles on souhaite travailler, et leur rôle. Par exemple ici, la variable *x* sur l'axe des abscisses et la variable *y* sur l'axe des ordonnées.
$$y \sim x$$
que l'on peut lire "y en fonction de x". Pour les deux variables numériques *x* et *y*, la représentation graphique la plus classique est le **nuage de points** (voir Fig. \@ref(fig:first-scatterplot) pour un exemple).
```{r first-scatterplot, echo=FALSE, results='hide', message=FALSE, fig.cap="Exemple de graphique en nuage de points. Des éléments essentiels sont ici mis en évidence en couleurs (voir texte). \\label{np_intro}"}
chart(data = data.frame(x = rnorm(50), y = rnorm(50)), x ~ y) +
geom_point(col = "gray50") +
labs(x = "Label de l'axe x [unité]",
y = "Label de l'axe y [unité]") +
theme(axis.text.x = element_text(colour = "#a80039", size = 15),
axis.title.x = element_text(colour = "#029687", size = 15),
axis.text.y = element_text(colour = "#a80039", size = 15),
axis.title.y = element_text(colour = "#029687", size = 15),
axis.line.x = element_line(colour = "#a80039"),
axis.line.y = element_line(colour = "#a80039")
)
```
Les éléments indispensables à la compréhension d'un graphique en nuage de points sont mis en évidence à la Fig. \@ref(fig:first-scatterplot) :
- Les axes avec les graduations (en rouge),
- Les labels et les unités des axes (en bleu).
- Les points représentant les différentes observations (en gris).
Les instructions dans R pour produire un tel nuage de points sont les suivantes :
- Préparation de l'environnement, importation et visualisation des données sous forme de tableau synthétique pour commencer.
```{r, warning=FALSE, message=FALSE}
# Chargement de SciViews::R
SciViews::R
# Importation du jeu de données
urchin <- read("urchin_bio", package = "data.io", lang = "fr")
# Visualisation des premières et dernières lignes du jeu de données
tabularise$headtail(urchin, auto.labs = FALSE)
```
- Réalisation du graphique en nuage de points proprement dit.
```{r, fig.cap="Taille (hauteur du test) d'oursins en fonction de leur masse."}
chart(data = urchin, height ~ weight) +
geom_point()
```
La fonction `chart()` n'est pas accessible dans R de base, mais l'extension chargée via l'instruction `SciViews::R` rend cette fonction disponible. Elle requiert comme argument le jeu de donnée (`data = urchin`, c'est un objet qui s'appelle un **"data frame"** dans le langage de R), ainsi que la formule à employer dans laquelle vous avez indiqué le nom des variables que vous voulez sur l'axe des ordonnées à gauche et des abscisses à droite de la formule, les deux parties étant séparées par un "tilde" (`~`). Vous voyez que le jeu de données contient beaucoup de variables (les titres des colonnes du tableau en sortie). Parmi toutes ces variables, nous avons choisi ici de représenter `height` en fonction de `weight`, la hauteur en fonction de la masse des oursins. Jusqu'ici, nous avons spécifié *ce que* nous voulons représenter, mais pas encore *comment* (sous quelle apparence), nous voulons les matérialiser sur le graphique. Pour un nuage de points, nous voulons les représenter sous forme de ... points ! Donc, nous devons ajouter la fonction `geom_point()` pour indiquer cela.
##### À vous de jouer ! {.unnumbered}
*Note : la vidéo ci-dessous vous expliquant la création du nuage de points dans R sur le jeu de données `urchin` est affublée du signe "H5P", ce qui signifie qu'elle contient également des questions auxquelles vous devez répondre dans le cadre de votre progression dans la matière.*
`r h5p(157, height = 270, toc = "Vidéo d'introduction au graphique en nuage de points")`
```{r, echo=FALSE}
#vembedr::embed_youtube("-QzG3Xr202w", width = 770, height = 433)
```
*Autoévaluez maintenant vos acquis avec le tutoriel learnr suivant.*
`r learnr("A02Lc_scatterplot", title = "Nuage de points", toc = "Graphiques en nuages de points")`
`r h5p(155, height = 270, toc = "Les fonctions chart() et geom_point()")`
### Échelles de graphiques
Vous devez être particulièrement vigilant lors de la réalisation d'un graphique en nuage de point sur l'étendue des valeurs présentées sur vos axes. Vous devez utiliser votre expertise de biologiste pour vous poser les deux questions suivantes :
- Est-ce que l'axe représente des valeurs plausibles de hauteurs et de masses de ces oursins (sachant que l'espèce est *Paracentrotus lividus* vous pouvez faire une recherche pour vérifier les tailles et masses de ces animaux) ?
- Quelle est la précision des mesures ?
Par défaut, `chart()` va calculer l'étendue des axes en tenant compte de la plus petite et de la plus grande valeur observée. Dans certains cas, lorsqu'une ou plusieurs observations s'éloignent très fort du nuage de points (par exemple, une valeur mal encodée avec un zéro de trop à la fin du nombre), le graphique va compresser le nuage de points à cause de la présence de ces valeurs aberrantes. Ce n'est pas le cas ici, mais nous pouvons le simuler en distendant artificiellement soit l'axe X, soit l'axe Y, soit les deux :
```{r, echo=FALSE, fig.cap="Piège du nuage de points. A) Graphique initial montrant la variation de la hauteur [mm] en fonction de la masse [g]. B) Graphique A avec la modification de l'échelle de l'axe X. C) Graphique A avec une seconde modification de l'axe X. D) Graphique A avec modification simultanée des deux axes."}
a <- chart(data = urchin, height ~ weight) +
geom_point() +
theme(text = element_text(size = 10)) # Réduction des labels
# Modification des échelles
b <- a + scale_x_continuous(limits = c(0, 500))
c <- a + scale_x_continuous(limits = c(-100, 120))
d <- a + scale_x_continuous(limits = c(-400, 400)) +
scale_y_continuous(limits = c(-400, 400))
# Assemblage des graphiques
combine_charts(list(a, b, c, d))
```
Vous voyez que l'effet peut éventuellement être assez catastrophique. Faites donc bien attention à la façon dont les points se répartissent et remplissent ou non le graphique pour éviter de tomber dans ce piège !
##### À vous de jouer ! {.unnumbered}
*Note : l'exercice suivant est une **application Shiny**. Il s'agit d'un petit programme écrit en R et qui vise à expérimenter un concept de manière interactive. Vous pouvez lancer cet exercice directement dans cette page. Vérifiez d'être bien enregistré (message à l'ouverture de l'application) et n'oubliez pas de cliquer sur le bouton `Submit` pour tester votre choix, mais également sur le bouton `Save & Quit` pour valider définitivement votre réponse pour la prendre en compte dans votre rapport de progression.*
`r launch_shiny("https://sdd.umons.ac.be/A02Sa_limits/", height = 500, delay = 10, toc = "Étendue des axes d'un graphique")`
### Transformation des données
Vous avez la possibilité d'appliquer une transformation à vos données (il est même conseillé de le faire) pour qu'elles soient plus facilement analysables ensuite. Par exemple, il est possible d'utiliser des fonctions de puissance, racines, logarithmes, exponentielles[^02-visualisation-i-2] pour modifier l'apparence du nuage de points dans le but de le rendre plus linéaire. Il est, en effet, plus facile d'analyser statistiquement des données qui s'alignent le long d'une droite.
[^02-visualisation-i-2]: Pour les proportions (`prop`) ou les pourcentages (`perc`) (valeurs bornées entre 0 et 1 ou 0 et 100%) la transformation arc-sinus est souvent utilisée dans la littérature $prop′ = \arcsin \sqrt{prop}$ ou $perc′ = \arcsin \sqrt{perc / 100}$. Son usage est cependant soumis à la critique et tous les statisticiens ne sont pas d'accord au sujet de cette transformation.
##### À vous de jouer ! {.unnumbered}
`r launch_shiny("https://sdd.umons.ac.be/A02Sb_transformation/", height = 500, delay = 10, toc = "Transformation des axes d'un graphique")`
##### Pièges et astuces {.unnumbered}
RStudio permet de récupérer rapidement des instructions à partir d'une banque de solutions toutes prêtes. Cela s'appelle des **snippets**. Vous avez une série de snippets disponibles dans la SciViews Box. Celui qui vous permet de réaliser un graphique en nuage de points s'appelle `.cbxy` (pour **c**hart -\> **b**ivariate -\> **xy**-plot). Entrez ce code et appuyez ensuite sur la tabulation dans un script R, et vous verrez le code remplacé par ceci dans la fenêtre d'édition :
```
chart(data = DF, YNUM ~ XNUM) +
geom_point()
```
Vous avez à votre disposition un ensemble de snippets que vous pouvez retrouver dans l'aide-mémoire consacré à [**SciViews**](https://github.com/BioDataScience-Course/sdd_cheatsheets/raw/master/SciViews/sciviews.pdf). Vous avez également à votre disposition l'aide-mémoire sur la visualisation des données ([**Data Visualization Cheat Sheet**](https://rstudio.github.io/cheatsheets/html/data-visualization.html)) qui utilise la fonction `ggplot()` plutôt que `chart()` et une interface légèrement différente pour spécifier les variables à utiliser pour réaliser le graphique (`aes(x = ..., y = ...)`).
Prêtez une attention toute particulière à l'organisation d'un script R. En plus des instructions R, il contient aussi sous forme de commentaires, un titre, la date de la dernière mise à jour, le nom de l'auteur, et des sections qui organisent de façon claire le contenu du script. À ce sujet, vous trouverez des explications détaillées concernant l'utilisation des scripts R dans l'annexe \@ref(script).
##### À vous de jouer ! {.unnumbered}
La première partie du projet suivant vous permettra de faire des graphiques en nuage de points en utilisant un script R.
```{r assign_A02Ia_scatterplot_I, echo=FALSE, results='asis'}
if (exists("assignment"))
assignment("A02Ia_scatterplot", part = "I",
url = "https://github.com/BioDataScience-Course/A02Ia_scatterplot",
course.ids = c(
'S-BIOG-006' = !"A02Ia_{YY}M_scatterplot"),
course.urls = c(
'S-BIOG-006' = "https://classroom.github.com/a/8_oZPNZT"),
course.starts = c(
'S-BIOG-006' = !"{W[5]+1} 13:00:00"),
course.ends = c(
'S-BIOG-006' = !"{W[6]+1} 23:59:59"),
term = "Q1", level = 3,
toc = "Graphiques avec `urchin_bio` (partie I)")
```
##### Pour en savoir plus {.unnumbered}
- [Visualisation des données dans R for Data Science, 2e edition](https://r4ds.hadley.nz/data-visualize.html). Chapitre du livre portant sur la visualisation des données, en anglais.
<!-- Plus accessible? - [ggplot2 nuage de point](http://www.sthda.com/french/wiki/ggplot2-nuage-de-points-guide-de-d-marrage-rapide-logiciel-r-et-visualisation-de-donn-es#nuage-de-points-simples). Tutoriel en français portant sur l'utilisation d'un nuage de points avec le package {ggplot2} et la fonction `geom_point()`. -->
- [Fundamentals of Data Visualization](http://serialmentor.com/dataviz/). Un livre en anglais sur les fondamentaux de la visualisation graphique.
- [R Graphics Cookbook - Chapter 5: Scatter Plots](https://r-graphics.org/chapter-scatter). Un chapitre d'un livre en anglais sur l'utilisation du nuage de points.
- [geom_point()](http://ggplot2.tidyverse.org/reference/geom_point.html). La fiche technique de la fonction `geom_point()` (en anglais).
## Graphiques dans Quarto/R Markdown
Un fichier [Quarto](https://quarto.org) a une extension `.qmd`[^02-visualisation-i-3]. Un fichier R Markdown est caractérisé par l'extension `.Rmd`. Ces deux formats sont très similaires, Quarto étant la version plus récente de R Markdown. Tous deux sont développés et maintenus par la même société (Posit). À partir d'ici, nous indiquerons Quarto/R Markdown lorsque la phrase s'applique indifféremment aux deux formats. Donc, Quarto/R Markdown permet de combiner le langage Markdown que vous avez déjà abordé au premier module avec du code R, tel que celui utilisé dans la première partie de ce module 2, voire du code dans d'autres langages comme Python, Julia, SQL\... Ces zones contenant du code exécutable en R ou autre s'appellent des **chunks**, ou **morceaux** dans l'interface RStudio en français (mais nous utiliserons préférentiellement le terme anglais dans cet ouvrage).
[^02-visualisation-i-3]: L'**extension d'un fichier** est un indicateur de son format à la fin de son nom, sous forme d'un point (.) suivi d'un sigle. Par exemple `.txt` caractérise un fichier texte, alors que `.png` indique qu'il s'agit d'une image au format PNG. Attention que les extensions sont parfois cachées (c'est systématique dans l'explorateur de fichiers de Windows avec la configuration par défaut, et c'est selon le fichier dans le Finder de MacOS. Sous Linux, et donc dans votre machine Saturn CLoud, l'extension est *toujours* affichée heureusement.
`r img("annexe_a2/rmd.gif")`
##### À vous de jouer ! {.unnumbered}
*La vidéo ci-dessous vous montre ce qu'est R Markdown, un format hybride entre Markdown et R bien pratique pour inclure vos graphiques directement dans un rapport. Elle vous montre aussi comment transformer un script R en document R Markdown (ou Quarto, le principe est le même). Elle contient des questions "H5P" également.*
`r h5p(158, height = 270, toc = "Vidéo de présentation de R Markdown")`
```{r, echo=FALSE}
#vembedr::embed_youtube("NDuHBMh690I", width = 770, height = 433)
```
Les balises spéciales Quarto/R Markdown à retenir sont les suivantes :
- en entrée de chunk R : ```` ```{r} ```` seul sur une ligne. Il est aussi possible de rajouter un label, par exemple, ```` ```{r graphique1} ```` et/ou des options, par exemple, ```` ```{r, echo=FALSE, results='hide'} ```` pour cacher et le code et le résultat dans le rapport),
- en sortie de chunk R : ```` ``` ```` seul sur une ligne.
En mode éditeur visuel, les trois apostrophes inverses ```` ``` ```` en début et fin de chunk sont cachées. Mais tant en mode visuel qu'en mode source, le fond du texte est représenté dans une couleur différente pour les chunks et pour le texte Markdown, afin de bien les différencier.
Vous devez bien entendu avoir autant de balises d'entrée que de balises de sortie. Des explications plus détaillées se trouvent dans l'annexe \@ref(Rmd) dédiée au R Markdown. De plus, l'écriture d'un texte scientifique doit respecter certaines conventions. Vous trouverez des explications à ce sujet dans l'annexe \@ref(redaction-scientifique).
```{block, type='note'}
Vous ne devez bien évidemment pas commencer votre analyse avec un script R. Vous pouvez commencer d'emblée avec un Quarto/R Markdown et écrire vos instructions R directement dans des chunks. Il vous est toujours possible d'exécuter ces instructions ligne après ligne dans la fenêtre **Console** pour les tester tout comme à partir d'un script R.
```
##### À vous de jouer ! {.unnumbered}
Vous allez maintenant manipuler un document **Quarto** pour réaliser des graphiques en nuage de points.
```{r assign_A02Ia_scatterplot_II, echo=FALSE, results='asis'}
if (exists("assignment"))
assignment("A02Ia_scatterplot", part = "II",
url = "https://github.com/BioDataScience-Course/A02Ia_scatterplot",
course.ids = c(
'S-BIOG-006' = !"A02Ia_{YY}M_scatterplot"),
course.urls = c(
'S-BIOG-006' = "https://classroom.github.com/a/8_oZPNZT"),
course.starts = c(
'S-BIOG-006' = !"{W[5]+1} 13:00:00"),
course.ends = c(
'S-BIOG-006' = !"{W[6]+1} 23:59:59"),
term = "Q1", level = 3,
toc = "Graphiques avec `urchin_bio` (partie II)")
```
*Note : le travail ci-dessous est un **projet GitHub Classroom** par groupe. Vos enseignants vont définir les groupes, ainsi que la personne responsable de la mise en place d'une équipe (team) GitHub Classroom. Ensuite, vous accepterez le projet en entrant dans l'équipe qui vous a été désignée, à l'exclusion de toute autre en cliquant sur le lien. Enfin, clonez le dépôt dans votre machine virtuelle et vous aurez un nouveau projet RStudio* \@ref(rs-projet) *dans lequel vous pourrez travailler. Les instructions sont indiquées dans le fichier `README.md` à la racine de ce projet.*
Vous allez vous exercer à la création et à l'interprétation de graphiques en nuage de points dans ce projet.
```{r assign_A02Ga_analysis_I, echo=FALSE, results='asis'}
if (exists("assignment2"))
assignment2("A02Ga_analysis", part = "I",
url = "https://github.com/BioDataScience-Course/A02Ga_analysis",
course.ids = c(
'S-BIOG-006' = !"A02Ga_{YY}M_analysis"),
course.urls = c(
'S-BIOG-006' = "https://classroom.github.com/a/L0JZAlcP"),
course.starts = c(
'S-BIOG-006' = !"{W[5]+5} 08:00:00"),
course.ends = c(
'S-BIOG-006' = !"{W[15]+2} 23:59:59"),
term = "Q1", level = 4, n = 4,
toc = "Analyse de données (partie I)")
```
##### Pour en savoir plus {.unnumbered}
Pour plus d'informations sur Quarto/R Markdown, vous pouvez consulter les liens suivants :
- [Quarto](https://quarto.org) le site contenant tout ce qu'il faut savoir sur Quarto (en anglais).
- [Communicating results with R Markdown](https://rviews.rstudio.com/2018/11/01/r-markdown-a-better-approach/) explique la même chose que dans la vidéo, avec plus de détails et des liens vers d'autres documents utiles (en anglais).
- [What is R Markdown?](https://rmarkdown.rstudio.com/lesson-1.html). Vidéo en anglais + site présentant les différentes possibilités, par les concepteurs de R Markdown (RStudio).
- [Introduction to R Markdown](https://rmarkdown.rstudio.com/articles_intro.html). Tutoriel en anglais, par RStudio.
- [R Markdown: the definitive guide](https://bookdown.org/yihui/rmarkdown/) est **le** manuel par excellence pour R Markdown (en anglais uniquement, malheureusement).
- Aide-mémoire R Markdown, dans les menus de RStudio : `Aide -> Cheat Sheets -> Aide-mémoire R Markdown`
- Référence rapide à Markdown, dans les menus RStudio : `Aide -> Référence rapide Markdown`
- [Introduction à R Markdown](https://rstudio-pubs-static.s3.amazonaws.com/32239_0956f02cef24443abd9525551368ef12.html#6). Présentation en français par Agrocampus Ouest, Rennes.
- [Le langage R Markdown](https://www.fun-mooc.fr/c4x/UPSUD/42001S02/asset/RMarkdown.pdf). Introduction en français concise, mais relativement complète.
- [Why I love R Notebooks](https://rviews.rstudio.com/2017/03/15/why-i-love-r-notebooks/) explique (en anglais) pourquoi le format R Notebook, une variante du R Markdown, est particulièrement bien adapté à la science des données.
## Récapitulatif des exercices
Ce second module vous a permis de réaliser vos premiers graphiques pour visualiser des données et vous a introduit à Quarto/R Markdown, un système qui allie la facilité de Markdown pour l'écriture de documents textuels et la puissance de calcul de R pour y inclure des analyses directement. Pour évaluer votre compréhension de cette matière, vous aviez les exercices suivants à réaliser :
`r show_ex_toc()`
##### Progression {.unnumbered}
`r launch_report("02", height = 800)`