class: center, middle, inverse, title-slide # Produire des documents reproductibles avec R Markdown ## Partager code et documentation ### Ronan Ysebaert, Timothée Giraud, Nicolas Lambert - UMS RIATE ### École thématique CNRS Sciences de l’information géographique reproductibles - 2021-06-27 (Saint Pierre d’Oléron) ### Dernière mise à jour: 2021-06-29 --- ## Objectifs ### Éléments théoriques - Initiation au literate programming avec R Markdown. - Bonnes pratiques en matière de reproductibilité et documentation de méthodes. - Fournir des ressources de référence pour approfondir l'apprentissage. - *DoItYourSelf* / *Self gratification*. <br> ### Déroulé .pull-left[ [Partie 1 - Literate programming ?](#part1) [Partie 2. Initier un projet R Markdown avec RStudio](#part2) [Partie 3. La syntaxe Markdown](#part3) ] .pull-right[ [Partie 4. Bonnes pratiques (code)](#part4) [Partie 5. Jouer du code dans du R Markdown](#part5) ] --- ## L'atelier - 2 possibilités en fonction de votre niveau de pratique de R .pull-left[ ### Débutant Mobiliser un jeu de données disponible avec R (cars). ![](data:image/png;base64,#fig/datasets_R.PNG) ] .pull-right[ ### Confirmé Caractériser l'environnement géographique des centres de vacances CNRS <img src="data:image/png;base64,#index_files/figure-html/unnamed-chunk-1-1.png" style="display: block; margin: auto;" /> ] --- ## L'atelier - 2 possibilités en fonction de votre niveau de pratique de R .pull-left[ ### Débutant Mobiliser un jeu de données disponible avec R (cars). ![](data:image/png;base64,#fig/cars.PNG) ] .pull-right[ ### Confirmé 3 représentations cartographiques possibles (population, pollution lumineuse, équipements touristiques à proximité) <img src="data:image/png;base64,#index_files/figure-html/unnamed-chunk-2-1.png" style="display: block; margin: auto;" /> ] --- name: part1 class: inverse, center, middle # Partie 1 - Literate programming ? --- ## Literate programming ? **Paradigme de programmation** qui consiste à associer ensemble du code source (pour les ordinateurs) à de la documentation (pour les humains).</p> - Un processus d'explication de la pensée : *Expliquer à des êtres humains ce que nous voulons que l'ordinateur fasse* ([Knuth, 1970](https://www-cs-faculty.stanford.edu/~knuth/lp.html)). - Des programmes qui gagnent en qualité : une explication ininterrompue de la logique, à la manière d'un essai. - Rend les mauvaises décisions de conception plus évidentes (détails souvent omis dans le code source). - Permet de reprendre des analyses ultérieurement sans se perdre, même longtemps après. - Orienté vers la transmission et le partage de connaissance (tutoriels, manuels). Un gain général en **reproductibilité** de la démarche et en **ouverture** des méthodes scientifiques. --- ## Literate programming ? .pull-left-c[ Associe un langage de programmation à un langage de balisage léger, dans un environnement de développement ou un document. Premier environnement de literate programming : WEB (1981), combinaison de Pascal et TeX. Une application sur l'analyse des nombres premiers. ] .pull-right-c[ ![](data:image/png;base64,#fig/knuth.PNG) .leg-fig[ Présentation du système de documentation *WEB* par [Donald E. Knuth, Computer Journal (1984)](http://literateprogramming.com/knuthweb.pdf) ] ] --- ## Plusieurs solutions existent | Nom | Langage supporté | Langage de balisage | Date de création | |----------------------|-----------------------|---------------------------------------------------|------------------| | [WEB](http://infolab.stanford.edu/pub/cstr/reports/cs/tr/83/980/CS-TR-83-980.pdf) | Pascal | TeX | 1981 | | [CWEB](http://tug.ctan.org/info/knuth/cwebman.pdf) | C et C++ | TeX, LaTeX | 1987 | | [Sweave](https://rpubs.com/YaRrr/SweaveIntro) | R | PDF | 2002 | | [Knitr](https://github.com/yihui/knitr/releases/download/doc/knitr-manual.pdf) | R | LaTeX, PDF, LyX, HTML, Markdown, AsciiDoc, | 2012 | | [R Markdown](https://rmarkdown.rstudio.com/) | R, Python, Julia, SQL | Markdown | 2014 | | [Jupiter Notebook](https://jupyter-notebook.readthedocs.io/en/stable/) | Python (kernel de défaut) | Markdown | 2014 | | [Observable](https://observablehq.com/@observablehq/how-observable-runs?collection=@observablehq/overview) | JavaScript (librairie D3) | Markdown / LaTeX | 2018 | -- Leur usage dépend... .pull-left-c[ - Du langage de programmation supporté. - De l'usage de la communauté. - De la variété des formats de sortie proposés. ] .pull-right-c[ - Des évolutions technologiques. - De l'intégration dans un environnement de développement intégré (IDE). ] --- ## R Markdown .pull-left-c[ Format de document initié en 2012 par **Yihui Xie** avec [knitr](https://github.com/yihui/knitr/releases/download/doc/knitr-manual.pdf) puis étendu dans le package [rmarkdown](https://cran.r-project.org/web/packages/rmarkdown/index.html) en 2014. Fait aujourd'hui référence dans l'écosystème de R. Plusieurs objectifs : - Compiler des documents R Markdown dans différents formats de sortie : PDF, HTML, Word. - Pouvoir jouer du code R dans la documentation. - Produire des sorties interactives (dahshboards) et des sorties de document "attractives". - Produire facilement des manuels, sites Web. ] .pull-right-c[ ![](data:image/png;base64,#fig/yihui_xie.PNG) .leg-fig[ Présentations de *Yihui Xie* sur [R Markdown](https://vimeo.com/94181521) et ses [origines](http://datascience.la/yihui-xie-the-user-2014-interview/) ] ] --- ## R Markdown `rmarkdown` repose sur une **large communauté d'utilisateurs et de développeurs** : - En évolution constante (Yihui Xie est développeur logiciel à RStudio). - Très bien documenté, des exemples clé en main, des modèles de mise en page (*templates*) - Recours important à `rmarkdown` par d'autres packages R. <table class="table" style="font-size: 16px; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:left;"> Package </th> <th style="text-align:left;"> Version </th> <th style="text-align:left;"> Maintainer </th> <th style="text-align:right;"> Import </th> <th style="text-align:right;"> AutNB </th> <th style="text-align:right;"> RevDepends </th> <th style="text-align:right;"> RevImports </th> <th style="text-align:right;"> RevSuggest </th> <th style="text-align:right;"> Down </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> rmarkdown </td> <td style="text-align:left;"> 2.9 </td> <td style="text-align:left;"> Yihui Xie <xie@yihui.name> </td> <td style="text-align:right;"> 11 </td> <td style="text-align:right;"> 51 </td> <td style="text-align:right;"> 10 </td> <td style="text-align:right;"> 278 </td> <td style="text-align:right;"> 6433 </td> <td style="text-align:right;"> 27090982 </td> </tr> <tr> <td style="text-align:left;"> knitr </td> <td style="text-align:left;"> 1.33 </td> <td style="text-align:left;"> Yihui Xie <xie@yihui.name> </td> <td style="text-align:right;"> 8 </td> <td style="text-align:right;"> 100 </td> <td style="text-align:right;"> 26 </td> <td style="text-align:right;"> 372 </td> <td style="text-align:right;"> 7339 </td> <td style="text-align:right;"> 32760828 </td> </tr> <tr> <td style="text-align:left;"> bookdown </td> <td style="text-align:left;"> 0.22 </td> <td style="text-align:left;"> Yihui Xie <xie@yihui.name> </td> <td style="text-align:right;"> 6 </td> <td style="text-align:right;"> 55 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 20 </td> <td style="text-align:right;"> 69 </td> <td style="text-align:right;"> 1072758 </td> </tr> <tr> <td style="text-align:left;"> rticles </td> <td style="text-align:left;"> 0.20 </td> <td style="text-align:left;"> Yihui Xie <xie@yihui.name> </td> <td style="text-align:right;"> 6 </td> <td style="text-align:right;"> 47 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 12 </td> <td style="text-align:right;"> 458657 </td> </tr> <tr> <td style="text-align:left;"> blogdown </td> <td style="text-align:left;"> 1.3 </td> <td style="text-align:left;"> Yihui Xie <xie@yihui.name> </td> <td style="text-align:right;"> 9 </td> <td style="text-align:right;"> 30 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 266375 </td> </tr> <tr> <td style="text-align:left;"> xaringan </td> <td style="text-align:left;"> 0.22 </td> <td style="text-align:left;"> Yihui Xie <xie@yihui.name> </td> <td style="text-align:right;"> 5 </td> <td style="text-align:right;"> 30 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 3 </td> <td style="text-align:right;"> 6 </td> <td style="text-align:right;"> 160041 </td> </tr> </tbody> </table> .leg-fig[ **Statistiques liées aux packages de l'environnement R Markdown** (*Import* : packages importés au chargement, *AutNB* : nombre d'auteurs, *RevDepends* : autres packages qui dépendent du package, *RevImports* : autres packages qui importent des fonctions du package, *RevSuggest* : autres packages qui suggèrent l'usage du package, *Down* : téléchargements depuis le 1er janvier 2015) ] --- ## Repose sur... .pull-left-c[ - **[Markdown](https://www.markdownguide.org/getting-started/)**, un langage de balisage léger reconnu pour sa simplicité (John Gruber et Aaron Swartz, 2004) - **R Markdown** : une variation du markdown spécifique à R et qui permet d'incorporer du code et de l'exécuter dans des *chunks*. C'est aussi un package. - **knitr** : un package qui interprète le code (R/Python/Julia) contenu dans les chunks *chunks* ([Yihui Xie](https://github.com/yihui/knitr/releases/download/doc/knitr-manual.pdf)) - **Pandoc** : Un logiciel qui convertit le markdown (faiblement structuré) en langage balisé (fortement structuré). Installé automatiquement avec RStudio. ] .pull-right-c[ ![](data:image/png;base64,#fig/schema_rmd.png) .leg-fig[ [Source : FinistR2018](https://stateofther.github.io/finistR2018/atelier3_advancedrmd.html) ] ] --- ## Un document R Markdown type Un fichier R Markdown contient 3 parties essentielles. .pull-left.c[ - Des **métadonnées** associées au document (YAML - Yet Another Markup Language) : configuration des fichiers de sortie (format, css, bibliographie, métadonnées auteur, date de création, etc.) - Du **texte**, qui décrit le cheminement de pensée : langage Markdown. - Des **blocs de code** structurés, pour rendre reproductible l'analyse. Ces trois éléments sont paramétrables pour produire des documents uniques. ] .pull-right-c[ <p align="center"><img src="data:image/png;base64,#fig/rmardown.PNG" height= 300px width = 600px/></p> .leg-fig[ [Source : RStudio](https://rmarkdown.rstudio.com/lesson-1.html) ] ] --- ## Des possibilités de sorties mutliples .fig[ ![](data:image/png;base64,#fig/rmarkdown2.PNG) ] .leg-fig[ [Source : RStudio](https://rmarkdown.rstudio.com/lesson-1.html) ] --- ## Document R Markdown Le modèle de document R Markdown standard de R Studio. .pull-left-c[ <p align="left"><img src="data:image/png;base64,#fig/rmadkown_document_input.PNG" height= 450px width = auto/></p> ] .pull-right-c[ <p align="right"><img src="data:image/png;base64,#fig/rmadkown_document_output.PNG" height= 450px width = auto/></p> ] --- ## Présentations Le modèle de présentation R Markdown standard de R Studio ([`ioslides_presentation`](https://bookdown.org/yihui/rmarkdown/ioslides-presentation.html)). .pull-left-c[ ![](data:image/png;base64,#fig/ioslide.PNG) ] .pull-right-c[ ![](data:image/png;base64,#fig/ioslide_output.PNG) ] --- ## Présentations Des packages dédiés à la réalisation de présentations, comme [`xaringan`](https://bookdown.org/yihui/rmarkdown/xaringan.html) ou [`revealjs`](https://github.com/rstudio/revealjs) .pull-left-c[ .fig[ <p align="center"><img src="data:image/png;base64,#fig/xaringan.PNG" width="100%" height="100%"/></p> ] .leg-fig[ [Présentation xaringan, Xie, 2021](https://slides.yihui.org/xaringan/#1) ] ] .pull-right-c[ .fig[ <p align="center"><img src="data:image/png;base64,#fig/reveal-js.png" width="200%" height="200%"/></p> ] .leg-fig[ [Create Stunning Presentations on the Web](https://revealjs.com/) ] ] --- ## Bookdown Un [package](https://bookdown.org/yihui/rmarkdown/books.html) dédié à l'écriture de rapports et livres numériques longs. Repose sur la compilation de documents R Markdown. .pull-left-c[ <p align="center"><img src="data:image/png;base64,#fig/cover_bookdown1.png" height= 350px width = auto/></p> ] .pull-right-c[ <p align="center"><img src="data:image/png;base64,#fig/cover_bookdown2.png" height= 350px width = auto/></p> ] .leg-fig[ [RMarkdown Cookbook (Xie, Dervieux, Riederer, 2021)](https://bookdown.org/yihui/rmarkdown-cookbook/) ] --- ## Bookdown Un [package](https://bookdown.org/yihui/rmarkdown/books.html) dédié à l'écriture de rapports et livres numériques longs. Repose sur la compilation de documents R Markdown. .pull-left-c[ <p align="center"><img src="data:image/png;base64,#fig/cover_bookdown3.png" height= 350px width = auto/></p> ] .pull-right-c[ <p align="center"><img src="data:image/png;base64,#fig/cover_bookdown4.png" height= 350px width = auto/></p> ] .leg-fig[ [Geocomputation with R (Lovelace, Nowosad, Muenchow, 2019)](https://geocompr.robinlovelace.net/) ] --- ## Rmardown's site generator .pull-left-c[ <p align="center"><img src="data:image/png;base64,#fig/website1.PNG" height= 450px width = auto/></p> ] .pull-right-c[ Transformer une collection de documents [R Markdown en site Web](https://bookdown.org/yihui/rmarkdown/rmarkdown-site.html). Chaque .Rmd devient une page du site Web. La configuration de l'affichage de la collection de fichiers HTML s'effectue dans un fichier `_site.yml`. <br><br><br><br><br><br> .leg-fig[ Un [site Web](https://rcarto.gitpages.huma-num.fr/centralite/) d'un projet de recherche qui combine préparation des données, analyses et documentations (métadonnées). ] ] --- ## Blogdown .pull-left-c[ <p align="center"><img src="data:image/png;base64,#fig/website2.PNG" height= 450px width = auto/></p> ] .pull-right-c[ Un [package](https://github.com/rstudio/blogdown) dédié à la génération de site Webs : - Utilise par défaut un générateur de sites Web open source, [Hugo](https://gohugo.io/), qui propose de nombreux [thèmes](https://themes.gohugo.io/). - Possibilité d'organiser le contenu du site Web en sous-répertoires. <br><br><br><br> .leg-fig[ [Rzine](https://rzine.fr/collection/#publi_rzine), un site Web dédié au partage de ressources sur la pratique de R en sciences sociales. ] ] --- ## Journals Le package [rticles](https://github.com/rstudio/rticles) intègre les modèles éditoriaux de plusieurs revues (sortie Rmd, pdf, TeX document). Recquiert l'installation d'outils permettant de compiler du LaTex, comme [TinyTex](https://yihui.org/tinytex/r/). Nécessite possiblement l'installation de packages [LaTex](https://bookdown.org/yihui/rmarkdown-cookbook/install-latex-pkgs.html) manquants (quelques [tips](https://github.com/yihui/tinytex/issues/210)). <img src="fig/journals.PNG" height="350"><img src="fig/journals_2.PNG" height="350"><img src="fig/journals_3.PNG" height="350"> .leg-fig[ Une trentaine de revues et éditeurs référencés, dont [The R Journal](https://journal.r-project.org/) et [PLOS](https://plos.org/#journals). Ouvert aux contributions ] --- name: part2 class: inverse, center, middle # Partie 2 - Créer un projet R Markdown avec RStudio --- ## Préparer son espace de travail RStudio propose d'organiser son travail en **projet** (File > New Project). L’idée principale consiste à réunir tous les fichiers / documents relatifs à un même projet dans un **répertoire dédié**. .pull-left-c[ <p align="center"><img src="data:image/png;base64,#fig/New_project.png" width="350"/></p> ] .pull-right-c[ A l'ouverture du projet : - Le nom du projet est affiché à côté de l'icône projet. - Une nouvelle session de R est exécutée. - Le répertoire de travail de R est défini comme étant le répertoire du projet. - Les objets créés (et sauvegardés dans le fichier .RData) sont chargés en mémoire. - Les scripts ouverts lors d'une précédente séance de travail sont automatiquement ouverts. ] Facilite le **travail discontinu**, améliore la **portabilité** et garantie la **reproductibilité** de son travail. --- ## Préparer son espace de travail Disposer d'une organisation de dossiers et de fichiers claire et cohérente facilite l'appropriation du répertoire de travail par d'autres. .pull-left-c[ **Organiser son espace de travail** - Un R Project à la racine. - Un dossier dédié au stockage des données. - Un dossier qui contient les figures. - ... ] .pull-right-c[ <img src="data:image/png;base64,#fig/folder_orga.PNG" width="400"/></img> ] --- ## Initier un projet R Markdown dans RStudio RStudio propose l'import de modèles [R Markdown](https://rmarkdown.rstudio.com/) (File > New File > R Markdown). <p align="center"><img src="data:image/png;base64,#fig/rmarkdown3.PNG" height="400"/></p> --- ## Modèles additionnels Une multitude ! Avec les packages [`rmdformats`](https://github.com/juba/rmdformats), [`prettydoc`](https://prettydoc.statr.me/themes.html) et [`tufte`](https://github.com/rstudio/tufte) (documents HTML), [`xaringan`](https://github.com/yihui/xaringan) et [`revealjs`](https://github.com/hakimel/reveal.js/) (présentations), [`rticles`](https://github.com/rstudio/rticles) (revues scientifiques), [`pagedown`](https://github.com/rstudio/pagedown) (posters, pages illustrées), [`flexdashboard`](https://pkgs.rstudio.com/flexdashboard/) et [`learnr`](https://rstudio.github.io/learnr/) (dashboards, tutoriels)... <p align="center"><img src="data:image/png;base64,#fig/rmarkdown_templates.PNG" height="400"/></p> --- ## Des modèles paramétrables Possibilité d'ajouter des paramètres dans les métadonnées du document. .pull-left-c[ ```yaml --- title: Un R Markdown formidable en gestation author: Un auteur qui semble maitriser cette technologie date: 27 juin 2021 output: html_document: theme: united toc: true number_sections: true --- ``` ] .pull-right-c[ - **title, author, date** : Par défaut à la création d'un R Markdown - **output** : type de sortie (`html_document` ou `ioslides_presentation`, ou modèles issus de certains packages comme `rmdformats::robobook:`) - **theme** : [12 thèmes](https://www.datadreaming.org/post/r-markdown-theme-gallery/) additionnels pour personnaliser graphiquement son document. - **toc** : table des matières - **number_sections** : numéros de sections - ... Et beaucoup d'autres options, présentées [ici](https://bookdown.org/yihui/rmarkdown/html-document.html). ] --- ## "Tricoter" son R Markdown .pull-left-c[ Le R Markdown est exporté en .HTML (ou .pdf, ou .doc) en réalisant un **`knit`** du .Rmd. Cette action : - Interprète les métadonnées du document (YAML) - Transforme la syntaxe Markdown dans un balisage interprété par le fichier de sortie désiré. - Exécute les `chunks` (lire, afficher, exécuter ou non le code inclut dans le .Rmd). ] .pull-right-c[ ![](data:image/png;base64,#fig/knit.PNG) .leg-fig[ Réaliser un `Knit` du R Markdown dans R Studio. ] ] --- ## "Tricoter" son R Markdown .pull-left-c[ Le R Markdown est exporté en .HTML (ou .pdf, ou .doc) en réalisant un **`knit`** du .Rmd. Cette action : - Interprète les métadonnées du document (YAML) - Transforme la syntaxe Markdown dans un balisage interprété par le fichier de sortie désiré. - Exécute les `chunks` (lire, afficher, exécuter ou non le code inclut dans le .Rmd). ] .pull-right-c[ Ceci... ![](data:image/png;base64,#fig/rmadkown_document_input.png) ] --- ## "Tricoter" son R Markdown .pull-left-c[ Le R Markdown est exporté en .HTML (ou .pdf, ou .doc) en réalisant un **`knit`** du .Rmd. Cette action : - Interprète les métadonnées du document (YAML) - Transforme la syntaxe Markdown dans un balisage interprété par le fichier de sortie désiré. - Exécute les `chunks` (lire, afficher, exécuter ou non le code inclut dans le .Rmd). ] .pull-right-c[ Génère cela ![](data:image/png;base64,#fig/rmardown_out.PNG) ] --- class: action ## A vous de jouer ! .pull-left-c[ ###Débutant **Créez un document R Markdown depuis un modèle** - Créer un dossier pour l'atelier. - Créez un document R Markdown (*file > New File > R Markdown > Document*). - Enregistrez le fichier .Rmd dans ce dossier. - Renseignez les métadonnées du .Rmd (nom, date). - Knitez le document. - Testez plusieurs thèmes en modifiant les métadonnées (`cerulean`, `cosmo`, `flatly`, `journal`, `lumen`, `paper`, `readable`, `sandstone`) ```yaml --- title: Un R Markdown formidable en gestation author: Un auteur qui semble maitriser cette technologie date: 27 juin 2021 output: html_document: * theme: united toc: true number_sections: true --- ``` ] .pull-right-c[ ###Confirmé **Préparez un espace de travail reproductible pour l'analyse** - Téléchargez et décompressez les données associées à l'exercice : [bit.ly/2U0KppL](https://bit.ly/2U0KppL) - Choisissez un modèle de document issu du package `rmdformats`. - Nommez le .Rmd **index**, le placer à la racine du dossier précédemment téléchargé. - Renseignez les métadonnées du .Rmd (YAML), et jouez avec les [options](https://bookdown.org/yihui/rmarkdown/html-document.html) ]
10
:
00
--- name: part3 class: inverse, center, middle # Partie 3. La syntaxe Markdown --- ## Markdown Un langage de balisage léger largement utilisé dans les blogs, forum, outils collaboratifs (OpenStreetMap ou GitHub utilisent des dérivés du [Markdown](https://www.markdownguide.org/tools/) pour faciliter les échanges entre les utilisateurs, par exemple). <p align="center"><img src="data:image/png;base64,#fig/markdown.PNG" height="400"/></p> --- ## En-têtes Le signe **`#`** introduit les niveaux de titres (jusqu'à 5 niveaux). .pull-left[ .inline-c[#Europe] devient .out-t[ # Europe ] .inline-c[## France] devient .out-t[ ## France ] ] .pull-right[ .inline-c[### Nouvelle-Aquitaine] devient .out-t[ ### Nouvelle-Aquitaine ] .inline-c[#### Charentes-Maritimes] devient .out-t[ #### Charentes-Maritimes ] .inline-c[##### Saint-Pierre d'Oléron] devient .out-t[ ##### Saint-Pierre d'Oléron ] ] --- ## Accentuations Les signes **`*`** et **`_`** gèrent les accentuations. <span style="background-color: #e5e5e5; border-radius: 3px; padding: 4px; font-family: 'Source Code Pro', 'Lucida Console', Monaco, monospace;">**Un mot important**</span> devient .out-t[**Un mot important**] <span style="background-color: #e5e5e5; border-radius: 3px; padding: 4px; font-family: 'Source Code Pro', 'Lucida Console', Monaco, monospace;">*Une citation*</span> devient .out-t[*Une citation*] <span style="background-color: #e5e5e5; border-radius: 3px; padding: 4px; font-family: 'Source Code Pro', 'Lucida Console', Monaco, monospace;">***Une citation importante***</span> devient .out-t[***Une citation importante***] --- ## Listes Les lignes introduites par **`*`**, **`+`** ou **`-`** génèrent des listes. ```r - books - articles - reports ``` .out-t[ - books - articles - reports ] --- ## Tables Créer des tables (syntaxe simple) <br> .pull-left[ ```r Centered Right-Aligned ---------------- ---------------- First cell First cell Second cell Second cell Third cell Third cell * : A hand-made table with R Markdown * ``` ] .pull-right[ <center>Table 1: A hand-made table with R Markdown</center> <br> | Centered | Right-Aligned | |:----------------------------------------------: | --------------------------------------------------: | | First cell | First cell | | Second cell| Second cell | | Third cell | Third cell | ] --- ## Tables [Tables Generator](https://www.tablesgenerator.com/) est utile pour mettre en forme sa table et la transformer en diverses syntaxes de balisage, dont Markdown. <p align="center"><img src="data:image/png;base64,#fig/table_generator.PNG" height="400"/></p> --- ## Liens Associer du texte à des URL <span style="background-color: #e5e5e5; border-radius: 3px; padding: 4px; font-family: 'Source Code Pro', 'Lucida Console', Monaco, monospace;">[La Vieille Perrotine](https://www.caes.cnrs.fr/sejours/la-vieille-perrotine/)</span> devient .out-t[[La Vieille Perrotine](https://www.caes.cnrs.fr/sejours/la-vieille-perrotine/)] <span style="background-color: #e5e5e5; border-radius: 3px; padding: 4px; font-family: 'Source Code Pro', 'Lucida Console', Monaco, monospace;"><https://www.caes.cnrs.fr/sejours/la-vieille-perrotine/></span> devient .out-t[<https://www.caes.cnrs.fr/sejours/la-vieille-perrotine/>] aussi -- Associer une adresse mail <span style="background-color: #e5e5e5; border-radius: 3px; padding: 4px; font-family: 'Source Code Pro', 'Lucida Console', Monaco, monospace;">[me contacter](mailto:ronan.ysebaert@cnrs.fr)</span><sup></sup> devient .out-t[[me contacter](mailto:ronan.ysebaert@cnrs.fr)] <span style="background-color: #e5e5e5; border-radius: 3px; padding: 4px; font-family: 'Source Code Pro', 'Lucida Console', Monaco, monospace;"><ronan.ysebaert@cnrs.fr></span> devient .out-t[<ronan.ysebaert@cnrs.fr>] --- ## Image `![](fig/boyard.jpg)` ![](data:image/png;base64,#fig/boyard.jpg) --- ## Limites de Markdown Il est parfois nécessaire d'introduire du code html pour dimensionner des éléments graphiques sur mesure. `<p align="center"><img src="data:image/png;base64,#fig/boyard.jpg" height="60%" width="60%"/></p>` <p align="center"><img src="data:image/png;base64,#fig/boyard.jpg" height="60%" width="60%"/></p> --- class: action ## A vous de jouer ! **Enrichissez le .Rmd précédemment généré avec de la syntaxe Markdown** .pull-left[ ### Débutant - **Titres**. Rajouter 3 titres de niveau 2 : *Description du jeu de données*, *Résumé statistique*, *Représentation graphique* - **Contenu**. Rappeler dans la première partie (syntaxe Markdown) l'origine du jeu de données : *Proposé par McNeil en 1977, ce jeu de données délivre la vitesse d'une voiture et la distance requise pour s'arrêter dans les années 1920*. - Un élément de texte en gras, un élément en italique. ] .pull-right[ ###Confirmé - **Titres**. 4 titres de niveau 2 : *Sources*, *Import des données*, *La population dans les environs*, *Session info*. - **Figures **. Incorporez l'image du centre CNRS choisi (dossier fig), adaptez sa taille. - **Table**. Créez une table dans la première partie (Sources) rappelant les sources mobilisées dans l'exercice (data-sources.png) ]
10
:
00
--- name: part4 class: inverse, center, middle # Partie 4. Bonnes pratiques (code) --- ## Un code exécutable et lisible Un code **propre** et **fonctionnel** peut être lu et amélioré par un autre auteur (ou par soi-même) longtemps après. **Un code fonctionnel** - S'assurer au préalable que son code fonctionne sans erreur. - N'est pas redondant : pour des opérations répétitives, créer des fonctions ou des boucles. Un code [bien écrit](https://dl.leneveu.fr/public/Coder_Proprement.pdf) est : - [Bien structuré](https://www.r-bloggers.com/2018/09/r-code-best-practices/). - Facile à lire, par soi-même et par les autres (indentation, noms d'objets) - Organisé de façon logique (simplicité). - Explicite et montre les intentions du développeur (commentaires). - A jour (utiliser la dernière version des packages, si ce n'est pas le cas, l'expliquer). --- ## Un code clair et lisible .pull-left[ Une carte de la population communale 30 km autour du centre CNRS de Saint-Pierre d'Oléron. <img src="data:image/png;base64,#index_files/figure-html/unnamed-chunk-6-1.png" style="display: block; margin: auto;" /> ] -- .pull-left[ Et le code R qui a permis de générer cette carte. Envie de le reproduire ? ```r # Voici mon bloc de code qui fait une carte en cercles proportionnels en utilisant le package mapsf. Les valeurs sont ordonnées afin de faire apparaître les cinq premières valeurs sur la carte en tant que label. library(sf); library(mapsf); library(dplyr) communespopulation2019<-st_read(dsn="data/oleron.gpkg",layer="com",quiet=TRUE) communes30kmautour<-st_read(dsn="data/oleron.gpkg",layer="cnrsBuf",quiet=TRUE) mf_map(communes30kmautour,col="lightblue",border=NA);mf_map(communespopulation2019,col="white",add=TRUE) mf_map(communespopulation2019,type="prop",var="POP_2019",leg_pos="topleft",col="grey34",border="white",leg_title="Population 2019") communespopulation2019<-arrange(communespopulation2019,desc(POP_2019)) mf_label(x=communespopulation2019[1:5,],var="LAU_NAME",halo=TRUE,overlap=FALSE,lines=FALSE,bg="white") mf_map(communes30kmautour,col=NA,lwd=2,add=TRUE) mf_layout(title=paste0(round(sum(communespopulation2019$POP_2019),-2)," habitants dans les bourgs des environs"),credits="Ecole Thématique SIG-R, RIATE,2021\n,Source : Eurostat - GISCO, 2021",arrow=FALSE) ``` ] --- ## Indentation et espace Respecter l'indentation, la hiérarchie entre les instructions. Une instruction par ligne (de longueur limitée). ```r # Voici mon bloc de code qui fait une carte en cercles proportionnels en utilisant le package mapsf. Les valeurs sont ordonnées afin de faire apparaître les cinq premières valeurs sur la carte en tant que label. *library(sf); library(mapsf); library(dplyr) *communespopulation2019<-st_read(dsn="data/oleron.gpkg",layer="com",quiet=TRUE) *communes30kmautour<-st_read(dsn="data/oleron.gpkg",layer="cnrsBuf",quiet=TRUE) *mf_map(communes30kmautour,col="lightblue",border=NA);mf_map(communespopulation2019,col="white",add=TRUE) *mf_map(communespopulation2019,type="prop",var="POP_2019",leg_pos="topleft",col="grey34",border="white",leg_title="Population 2019") *communespopulation2019<-arrange(communespopulation2019,desc(POP_2019)) *mf_label(x=communespopulation2019[1:5,],var="LAU_NAME",halo=TRUE,overlap=FALSE,lines=FALSE,bg="white") *mf_map(communes30kmautour,col=NA,lwd=2,add=TRUE) *mf_layout(title=paste0(round(sum(communespopulation2019$POP_2019),-2)," habitants dans les bourgs des environs"),credits="Ecole Thématique SIG-R, RIATE,2021\n,Source : Eurostat - GISCO, 2021",arrow=FALSE) ``` --- ## Indentation et espace Respecter l'indentation, la hiérarchie entre les instructions. Une instruction par ligne (de longueur limitée). ```r # Voici mon bloc de code qui fait une carte en cercles proportionnels en utilisant le package mapsf. Les valeurs sont ordonnées afin de faire apparaître les cinq premières valeurs sur la carte en tant que label. library(sf) library(mapsf) library(dplyr) communespopulation2019 <- st_read(dsn = "data/oleron.gpkg", layer = "com", quiet = TRUE) communes30kmautour <- st_read(dsn = "data/oleron.gpkg", layer = "cnrsBuf", quiet = TRUE) mf_map(communes30kmautour, col = "lightblue", border = NA) mf_map(communespopulation2019, col = "white", add = TRUE) mf_map(communespopulation2019, type = "prop", var = "POP_2019", leg_pos = "topleft", col = "grey34", border = "white", leg_title = "Population 2019") communespopulation2019 <- arrange(communespopulation2019, desc(POP_2019)) mf_label(x = communespopulation2019[1:5,], var = "LAU_NAME", halo = TRUE, overlap = FALSE, lines = FALSE, bg = "white") mf_map(communes30kmautour, col = NA, lwd = 2, add = TRUE) mf_layout(title = paste0(round(sum(communespopulation2019$POP_2019),-2), " habitants dans les bourgs des environs"), credits = "Ecole Thématique SIG-R, RIATE,2021\n,Source : Eurostat - GISCO, 2021", arrow = FALSE) ``` --- ## Organiser ses commentaires Étape après étape, apporte une indication sur le choix de conception, court et explicite. ```r *# Voici mon bloc de code qui fait une carte en cercles proportionnels en utilisant le package mapsf. Les valeurs sont ordonnées afin de faire apparaître les cinq premières *valeurs sur la carte en tant que label. library(sf) library(mapsf) library(dplyr) communespopulation2019 <- st_read(dsn = "data/oleron.gpkg", layer = "com", quiet = TRUE) communes30kmautour <- st_read(dsn = "data/oleron.gpkg", layer = "cnrsBuf", quiet = TRUE) mf_map(communes30kmautour, col = "lightblue", border = NA) mf_map(communespopulation2019, col = "white", add = TRUE) mf_map(communespopulation2019, type = "prop", var = "POP_2019", leg_pos = "topleft", col = "grey34", border = "white", leg_title = "Population 2019") communespopulation2019 <- arrange(communespopulation2019, desc(POP_2019)) mf_label(x = communespopulation2019[1:5,], var = "LAU_NAME", halo = TRUE, overlap = FALSE, lines = FALSE, bg = "white") mf_map(communes30kmautour, col = NA, lwd = 2, add = TRUE) mf_layout(title = paste0(round(sum(communespopulation2019$POP_2019),-2), " habitants dans les bourgs des environs"), credits = "Ecole Thématique SIG-R, RIATE,2021\n,Source : Eurostat - GISCO, 2021", arrow = FALSE) ``` --- ## Organiser ses commentaires Étape après étape, apporte une indication sur le choix de conception, court et explicite. ```r *# Librairies utilisées library(sf) library(mapsf) library(dplyr) *# Import des données communespopulation2019 <- st_read(dsn = "data/oleron.gpkg", layer = "com", quiet = TRUE) communes30kmautour <- st_read(dsn = "data/oleron.gpkg", layer = "cnrsBuf", quiet = TRUE) *# Cartographie - Population communale mf_map(communes30kmautour, col = "lightblue",border = NA) mf_map(communespopulation2019, col = "white", add = TRUE) mf_map(communespopulation2019, type = "prop", var = "POP_2019",leg_pos = "topleft", col="grey34", border = "white", leg_title = "Population 2019") *# Ordonner les valeurs les plus élevées et les afficher communespopulation2019 <- arrange(communespopulation2019, desc(POP_2019)) mf_label(x = communespopulation2019[1:5,], var = "LAU_NAME", halo = TRUE, overlap = FALSE, lines = FALSE, bg = "white") mf_map(communes30kmautour, col = NA, lwd = 2, add = TRUE) *# Habillage cartographique mf_layout(title = paste0(round(sum(communespopulation2019$POP_2019),-2), " habitants dans les bourgs des environs"), credits = "Ecole Thématique SIG-R, RIATE,2021\n,Source : Eurostat - GISCO, 2021", arrow = FALSE) ``` --- ## Optimiser les noms d'objets Des noms prononçables et révélateurs des intentions, plutôt en anglais. Veiller à ne pas utiliser des mots "réservés" par le langage de programmation (plot, sum...) ```r # Librairies utilisées library(sf) library(mapsf) library(dplyr) # Import des données *communespopulation2019 <- st_read(dsn = "data/oleron.gpkg", layer = "com", quiet = TRUE) *communes30kmautour <- st_read(dsn = "data/oleron.gpkg", layer = "cnrsBuf", quiet = TRUE) # Cartographie - Population communale *mf_map(communes30kmautour, col = "lightblue",border = NA) *mf_map(communespopulation2019, col = "white", add = TRUE) *mf_map(communespopulation2019, type = "prop",var="POP_2019",leg_pos = "topleft", col="grey34", border = "white", leg_title = "Population 2019") # Ordonner les valeurs les plus élevées et les afficher *communespopulation2019 <- arrange(communespopulation2019, desc(POP_2019)) *mf_label(x = communespopulation2019[1:5,], var = "LAU_NAME", halo = TRUE, overlap = FALSE, lines = FALSE, bg = "white") *mf_map(communes30kmautour, col = NA, lwd = 2, add = TRUE) # Habillage cartographique *mf_layout(title = paste0(round(sum(communespopulation2019$POP_2019),-2), " habitants dans les bourgs des environs"), credits = "Ecole Thématique SIG-R, RIATE,2021\n,Source : Eurostat - GISCO, 2021", arrow = FALSE) ``` --- ## Optimiser les noms d'objets Des noms prononçables et révélateurs des intentions, plutôt en anglais. Veiller à ne pas utiliser des mots "réservés" par le langage de programmation (plot, sum...) ```r # Librairies utilisées library(sf) library(mapsf) library(dplyr) # Import des données *com <- st_read(dsn = "data/oleron.gpkg", layer = "com", quiet = TRUE) *buf <- st_read(dsn = "data/oleron.gpkg", layer = "cnrsBuf", quiet = TRUE) # Cartographie - Population communale *mf_map(buf, col="lightblue",border = NA) *mf_map(com, col = "white", add = TRUE) *mf_map(com, type = "prop",var="POP_2019",leg_pos = "topleft", col = "grey34", border = "white", leg_title = "Population 2019") # Ordonner les valeurs les plus élevées et les afficher *com <- arrange(com, desc(POP_2019)) *mf_label(x = com[1:5,], var="LAU_NAME", halo=TRUE, overlap=FALSE, lines = FALSE, bg = "white") *mf_map(com, col = NA, lwd = 2, add = TRUE) # Habillage cartographique *mf_layout(title = paste0(round(sum(com$POP_2019),-2), " habitants dans les bourgs des environs"), credits = "Ecole Thématique SIG-R, RIATE,2021\n,Source : Eurostat - GISCO, 2021", arrow = FALSE) ``` --- ## Limiter les dépendances Mieux vaut supprimer l'appel de librairies additionnelles si c'est juste pour une instruction basique. ```r # Librairies utilisées library(sf) library(mapsf) *library(dplyr) # Import des données com <- st_read(dsn = "data/oleron.gpkg", layer = "com", quiet = TRUE) buf <- st_read(dsn = "data/oleron.gpkg", layer = "cnrsBuf", quiet = TRUE) # Cartographie - Population communale mf_map(buf, col="lightblue",border = NA) mf_map(com, col = "white", add = TRUE) mf_map(com, type = "prop",var="POP_2019",leg_pos = "topleft", col = "grey34", border = "white", leg_title = "Population 2019") # Ordonner les valeurs les plus élevées et les afficher *com <- arrange(com, desc(POP_2019)) mf_label(x = com[1:5,], var="LAU_NAME", halo=TRUE, overlap=FALSE, lines = FALSE, bg = "white") mf_map(com, col = NA, lwd = 2, add = TRUE) # Habillage cartographique mf_layout(title = paste0(round(sum(com$POP_2019),-2), " habitants dans les bourgs des environs"), credits = "Ecole Thématique SIG-R, RIATE,2021\n,Source : Eurostat - GISCO, 2021", arrow = FALSE) ``` --- ## Limiter les dépendances Mieux vaut supprimer l'appel de librairies additionnelles si c'est juste pour une instruction basique. ```r # Librairies utilisées library(sf) library(mapsf) # Import des données com <- st_read(dsn = "data/oleron.gpkg", layer = "com", quiet = TRUE) buf <- st_read(dsn = "data/oleron.gpkg", layer = "cnrsBuf", quiet = TRUE) # Cartographie - Population communale mf_map(buf, col="lightblue",border = NA) mf_map(com, col = "white", add = TRUE) mf_map(com, type = "prop",var="POP_2019",leg_pos = "topleft", col = "grey34", border = "white", leg_title = "Population 2019") # Ordonner les valeurs les plus élevées et les afficher *com <- com[order(com$POP_2019, decreasing = TRUE),] # Au lieu de arrange de dplyr mf_label(x = com[1:5,], var="LAU_NAME", halo=TRUE, overlap=FALSE, lines = FALSE, bg = "white") mf_map(com, col = NA, lwd = 2, add = TRUE) # Habillage cartographique mf_layout(title = paste0(round(sum(com$POP_2019),-2), " habitants dans les bourgs des environs"), credits = "Ecole Thématique SIG-R, RIATE,2021\n,Source : Eurostat - GISCO, 2021", arrow = FALSE) ``` --- ## En anglais ! Pour une large diffusion, préférez l'anglais (dépôt GitHub). ```r # Import libraries library(sf) library(mapsf) # Data import com <- st_read(dsn = paste0("data/oleron.gpkg"), layer = "com", quiet = TRUE) buf <- st_read(dsn = paste0("data/oleron.gpkg"), layer = "cnrsBuf", quiet = TRUE) # Cartography - Municipal population mf_map(buf, col = "lightblue", border = NA) # Analysis perimeter mf_map(com, col = "white", add = TRUE) # Display muncipalities mf_map(com, type = "prop", var = "POP_2019", leg_pos = "topleft", col = "grey34", border = "white", leg_title = "Population 2019") # Map mf_map(buf, col = NA, lwd = 2, add = TRUE) # Analysis perimeter contour # Order higher values and display them com <- com[order(com$POP_2019, decreasing = TRUE),] mf_label(x = com[1:5,], var = "LAU_NAME", halo = TRUE, overlap = FALSE, lines = FALSE, bg = "white") # Label des 5 communes les plus peuplées # Map layout mf_layout(title = paste0(round(sum(com$POP_2019),-2), " habitants dans les bourgs des environs"), credits = paste0("Ecole Thématique SIG-R, RIATE, 2021\n", "Source : Eurostat - GISCO, 2021"), arrow = FALSE) ``` --- class: action ## A vous de jouer ! .pull-left[ ###Débutant **Créez un script R (File > New File > R Script) et embellissez le code suivant :** ```r #Mon bloc de code qui transforme les valeurs du jeu de données #d'exemple en km/h et mètres, réalise la moyenne des deux #variables et une régression linéaire data(cars) cars$speed_kilometreheure<-cars$speed*1.60934 cars$dist_metres<-cars$dist*0.3048; summary(cars) plot(x=cars$speed_kilometreheure,y=cars$dist_metres, ylab="Distance nécessaire à l'arrêt (m)", clab="Vitesse (km/h)") abline(lm(cars$dist_metres~cars$speed_kilometreheure), lty=2,lwd=1,col="red") ``` ] .pull-right[ ###Confirmé **Ouvrez le fichier script.R et améliorez cette section de code** ```r # Voici mon bloc de code qui fait une carte en cercles #proportionnels en utilisant le package mapsf. Les valeurs #sont ordonnées afin de faire apparaître les cinq premières #valeurs sur la carte en tant que label. library(sf); library(mapsf); library(dplyr) communespopulation2019<-st_read(dsn="data/oleron.gpkg", layer="com",quiet=TRUE) communes30kmautour<-st_read(dsn="data/oleron.gpkg", layer="cnrsBuf",quiet=TRUE) mf_map(communes30kmautour,col="lightblue",border=NA) mf_map(communespopulation2019,col="white",add=TRUE) mf_map(communespopulation2019,type="prop",var="POP_2019", leg_pos="topleft",col="grey34",border="white", leg_title="Population 2019") communespopulation2019<-arrange(communespopulation2019,desc(POP_2019)) mf_label(x=communespopulation2019[1:5,],var="LAU_NAME", halo=TRUE,overlap=FALSE,lines=FALSE,bg="white") mf_map(communes30kmautour,col=NA,lwd=2,add=TRUE) mf_layout(title=paste0(round(sum(communespopulation2019$POP_2019),-2), " habitants dans les bourgs des environs"), credits="Ecole Thématique SIG-R, RIATE,2021\n,Source : Eurostat - GISCO, 2021", arrow=FALSE) ``` ]
10
:
00
--- name: part5 class: inverse, center, middle # Partie 5. Jouer du code dans du R Markdown --- ## Chunks Le code est à placer dans des `chunks` (tronçons), délimités par des triples *backticks* (Code > Insert Chunk dans R Studio) ````markdown '''{r, library_import, warning = FALSE, message = FALSE} # Import des librairies utiles à l'atelier library(sf) # Manipulation de données spatiales library(mapsf) # Représentations cartographiques library(potential) # Calcul de potentiel ''' ```` - `r` est une option du chunk, qui indique la nature du langage à jouer. - `library_import` : Chaque chunk peut être nommé (utile pour un document comprenant de nombreux chunks). - `warning = FALSE, message = FALSE` : Chaque chunk est paramétrable (chunk options). <br> > Un chunk peut être placé à n'importe quel endroit du Rmd. > Préférez plusieurs chunks bien paramétrés et documentés à un seul (long) bloc de code. > Bien différencier les commentaires inclus dans le chunk *(#)*, destinés à décrire succinctement l'exécution du code étape après étape; et ceux rédigés dans le document principal en Markdown, destinés à expliquer l'intention régissant l'ensemble du chunk. --- ## Options de chunks Ces chunks sont paramétrés par défaut (TRUE / FALSE) - eval = TRUE : Exécuter le code à la compilation. - echo = TRUE : Afficher le code. - warning = TRUE : Afficher les avertissements. - message = TRUE : Afficher les messages. - error = FALSE : Afficher les messages d'erreur. - cache = FALSE : Placer en cache le code joué lors du premier knit. - fig.width = 7 : Largeur des sorties graphiques en pouce. - fig.height = 7 : Hauteur des sorties graphiques en pouces. La présentation précise des paramètres est rappelée dans la [documentation de knitr](https://yihui.org/knitr/options/), et synthétisée dans les [cheatsheet de RMarkdown](https://www.rstudio.com/wp-content/uploads/2015/02/rmarkdown-cheatsheet.pdf). --- ###{r eval = FALSE, echo = TRUE} Afficher le code, sans jouer les résultats. ```r # Librairies utiles library(sf) library(mapsf) # centre CNRS cent <- read.csv(file = "data/cnrs.csv") com <- st_read(dsn = "data/LAU_RG_01M_2019_4326.shp", quiet = TRUE) # Créer un buffer autour du centre cnrs <- cent[cent$file == "aussois",] cnrs <- st_as_sf(cnrs, coords = c("longitude", "latitude"), crs = 4326) cnrs <- st_transform(cnrs, 2154) buf <- st_buffer(cnrs, dist = 30000) # Les données originelles prenaient l'Europe entière com <- st_transform(com, 2154) com <- st_intersection(com, buf) # Cartography - Municipal population mf_map(com, col = "white") # Display muncipalities mf_map(com, type = "prop", var = "POP_2019", leg_pos = "topleft", col = "grey34", border = "white", leg_title = "Population 2019") # Map mf_map(buf, col = NA, lwd = 2, add = TRUE) # Analysis perimeter contour mf_map(cnrs, pch = 17, col = "darkred", cex = 2, add = TRUE) # Location CNRS mf_label(x = cnrs, var = "centre", halo = TRUE, cex = 0.9, pos = 1, overlap = FALSE, lines = FALSE, r = 0.15) # Label CNRS mf_layout(title = paste0(round(sum(com$POP_2019),-2), # Layout " habitants dans les bourgs des environs"), credits = "Ecole Thématique SIG-R, RIATE, 2021\nSource : Eurostat - GISCO, 2021", arrow = FALSE) ``` --- ###{r eval = TRUE, echo = FALSE} Jouer uniquement le code, sans afficher le code. ``` ## Warning: attribute variables are assumed to be spatially constant throughout all ## geometries ``` <img src="data:image/png;base64,#index_files/figure-html/unnamed-chunk-20-1.png" style="display: block; margin: auto;" /> --- ###{r eval = TRUE, echo = FALSE, warning = FALSE} Retirer le message d'avertissement (lié à une opération SIG de `sf` dans ce cas). <img src="data:image/png;base64,#index_files/figure-html/unnamed-chunk-21-1.png" style="display: block; margin: auto;" /> --- ###{r eval = TRUE, echo = FALSE, warning = FALSE, fig.align='center', fig.width= 9, fig.height = 6} Paramétrer les sorties graphiques. <img src="data:image/png;base64,#index_files/figure-html/unnamed-chunk-22-1.png" style="display: block; margin: auto;" /> --- ## Setup chunk Il est d'usage d'incorporer en début de Markdown un chunk qui introduit l'analyse. Il prend généralement en compte : - Les options de chunk personnalisées avec `knitr::opts_chunk$set()` - L'import des librairies requises pour jouer le code. - L'import des données associées au document. ````markdown ``{r, setup, include = FALSE} # Options de chunk (ensemble du document) knitr::opts_chunk$set(echo = FALSE, message = FALSE, fig.align='center', fig.width= 9, fig.height= 8) # Import des librairies library(sf) # Manipulation de données spatiales library(mapsf) # Représentations cartographiques library(potential) # Calcul de potentiel ``` --- ## Afficher une table avec knitr Une table mise en forme (10 communes les plus peuplées autour du centre CNRS d'Aussois) ```r # Sélectionner des colonnes d'intérêt, ordonner sur la population, retirer les géométries com <- com[order(com$POP_2019, decreasing = TRUE),] com <- com[1:10,c("GISCO_ID", "LAU_NAME", "POP_2019", "AREA_KM2")] row.names(com) <- NULL com <- st_set_geometry(com, NULL) # Options de chunk (ensemble du document) knitr::kable(head(com, 10), row.names = F, digits = 1) ``` <table> <thead> <tr> <th style="text-align:left;"> GISCO_ID </th> <th style="text-align:left;"> LAU_NAME </th> <th style="text-align:right;"> POP_2019 </th> <th style="text-align:right;"> AREA_KM2 </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> FR_73248 </td> <td style="text-align:left;"> Saint-Jean-de-Maurienne </td> <td style="text-align:right;"> 7794 </td> <td style="text-align:right;"> 11.5 </td> </tr> <tr> <td style="text-align:left;"> IT_001270 </td> <td style="text-align:left;"> Susa </td> <td style="text-align:right;"> 6256 </td> <td style="text-align:right;"> 11.0 </td> </tr> <tr> <td style="text-align:left;"> IT_001044 </td> <td style="text-align:left;"> Bussoleno </td> <td style="text-align:right;"> 5941 </td> <td style="text-align:right;"> 37.1 </td> </tr> <tr> <td style="text-align:left;"> FR_73006 </td> <td style="text-align:left;"> Aime-la-Plagne </td> <td style="text-align:right;"> 4431 </td> <td style="text-align:right;"> 94.2 </td> </tr> <tr> <td style="text-align:left;"> FR_73150 </td> <td style="text-align:left;"> Plagne Tarentaise </td> <td style="text-align:right;"> 3660 </td> <td style="text-align:right;"> 94.7 </td> </tr> <tr> <td style="text-align:left;"> IT_001175 </td> <td style="text-align:left;"> Oulx </td> <td style="text-align:right;"> 3371 </td> <td style="text-align:right;"> 99.8 </td> </tr> <tr> <td style="text-align:left;"> IT_001022 </td> <td style="text-align:left;"> Bardonecchia </td> <td style="text-align:right;"> 3149 </td> <td style="text-align:right;"> 132.1 </td> </tr> <tr> <td style="text-align:left;"> FR_73157 </td> <td style="text-align:left;"> Modane </td> <td style="text-align:right;"> 3120 </td> <td style="text-align:right;"> 74.6 </td> </tr> <tr> <td style="text-align:left;"> FR_73257 </td> <td style="text-align:left;"> Belleville </td> <td style="text-align:right;"> 2952 </td> <td style="text-align:right;"> 168.4 </td> </tr> <tr> <td style="text-align:left;"> FR_73261 </td> <td style="text-align:left;"> Saint-Michel-de-Maurienne </td> <td style="text-align:right;"> 2456 </td> <td style="text-align:right;"> 36.3 </td> </tr> </tbody> </table> --- ## Afficher une table avec kableExtra et formattable Des packages utiles pour des [mises en page stylisées et interactives de tables](https://cran.r-project.org/web/packages/kableExtra/vignettes/awesome_table_in_html.html). .pull-left[ ```r library(kableExtra) library(formattable) # Paramétrer le tableau com$AREA_KM2 <- color_tile("white", "orange")(com$AREA_KM2) com$POP_2019 <- color_bar("lightgreen")(com$POP_2019) # Tableau kbl(com, escape = F) %>% kable_paper("hover", full_width = F) %>% column_spec(3, width = "3cm") %>% kable_styling(font_size = 10) %>% add_header_above(c("Communes" = 2, "Population et surface" = 2)) ``` ] .pull-right[ <table class=" lightable-paper lightable-hover table" style='font-family: "Arial Narrow", arial, helvetica, sans-serif; width: auto !important; margin-left: auto; margin-right: auto; font-size: 10px; margin-left: auto; margin-right: auto;'> <thead> <tr> <th style="padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; " colspan="2"><div style="TRUE">Communes</div></th> <th style="padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; " colspan="2"><div style="TRUE">Population et surface</div></th> </tr> <tr> <th style="text-align:left;"> GISCO_ID </th> <th style="text-align:left;"> LAU_NAME </th> <th style="text-align:left;"> POP_2019 </th> <th style="text-align:left;"> AREA_KM2 </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> FR_73248 </td> <td style="text-align:left;"> Saint-Jean-de-Maurienne </td> <td style="text-align:left;width: 3cm; "> <span style="display: inline-block; direction: rtl; unicode-bidi: plaintext; border-radius: 4px; padding-right: 2px; background-color: lightgreen; width: 100.00%">7794</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #fffefe">11.51834</span> </td> </tr> <tr> <td style="text-align:left;"> IT_001270 </td> <td style="text-align:left;"> Susa </td> <td style="text-align:left;width: 3cm; "> <span style="display: inline-block; direction: rtl; unicode-bidi: plaintext; border-radius: 4px; padding-right: 2px; background-color: lightgreen; width: 80.27%">6256</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffffff">10.99237</span> </td> </tr> <tr> <td style="text-align:left;"> IT_001044 </td> <td style="text-align:left;"> Bussoleno </td> <td style="text-align:left;width: 3cm; "> <span style="display: inline-block; direction: rtl; unicode-bidi: plaintext; border-radius: 4px; padding-right: 2px; background-color: lightgreen; width: 76.23%">5941</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #fff0d4">37.07883</span> </td> </tr> <tr> <td style="text-align:left;"> FR_73006 </td> <td style="text-align:left;"> Aime-la-Plagne </td> <td style="text-align:left;width: 3cm; "> <span style="display: inline-block; direction: rtl; unicode-bidi: plaintext; border-radius: 4px; padding-right: 2px; background-color: lightgreen; width: 56.85%">4431</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffcf78">94.15291</span> </td> </tr> <tr> <td style="text-align:left;"> FR_73150 </td> <td style="text-align:left;"> Plagne Tarentaise </td> <td style="text-align:left;width: 3cm; "> <span style="display: inline-block; direction: rtl; unicode-bidi: plaintext; border-radius: 4px; padding-right: 2px; background-color: lightgreen; width: 46.96%">3660</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffcf77">94.66052</span> </td> </tr> <tr> <td style="text-align:left;"> IT_001175 </td> <td style="text-align:left;"> Oulx </td> <td style="text-align:left;width: 3cm; "> <span style="display: inline-block; direction: rtl; unicode-bidi: plaintext; border-radius: 4px; padding-right: 2px; background-color: lightgreen; width: 43.25%">3371</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffcc6f">99.77026</span> </td> </tr> <tr> <td style="text-align:left;"> IT_001022 </td> <td style="text-align:left;"> Bardonecchia </td> <td style="text-align:left;width: 3cm; "> <span style="display: inline-block; direction: rtl; unicode-bidi: plaintext; border-radius: 4px; padding-right: 2px; background-color: lightgreen; width: 40.40%">3149</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffb93a">132.14841</span> </td> </tr> <tr> <td style="text-align:left;"> FR_73157 </td> <td style="text-align:left;"> Modane </td> <td style="text-align:left;width: 3cm; "> <span style="display: inline-block; direction: rtl; unicode-bidi: plaintext; border-radius: 4px; padding-right: 2px; background-color: lightgreen; width: 40.03%">3120</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffda98">74.56397</span> </td> </tr> <tr> <td style="text-align:left;"> FR_73257 </td> <td style="text-align:left;"> Belleville </td> <td style="text-align:left;width: 3cm; "> <span style="display: inline-block; direction: rtl; unicode-bidi: plaintext; border-radius: 4px; padding-right: 2px; background-color: lightgreen; width: 37.88%">2952</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffa500">168.39485</span> </td> </tr> <tr> <td style="text-align:left;"> FR_73261 </td> <td style="text-align:left;"> Saint-Michel-de-Maurienne </td> <td style="text-align:left;width: 3cm; "> <span style="display: inline-block; direction: rtl; unicode-bidi: plaintext; border-radius: 4px; padding-right: 2px; background-color: lightgreen; width: 31.51%">2456</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #fff0d6">36.25239</span> </td> </tr> </tbody> </table> ] --- ## Documenter son environnement de travail `SessionInfo()` permet d'obtenir des informations sur la session et partager son environnement de production. .pull-left[ ```r sessionInfo() ``` ``` ## R version 4.1.0 (2021-05-18) ## Platform: x86_64-w64-mingw32/x64 (64-bit) ## Running under: Windows 10 x64 (build 19042) ## ## Matrix products: default ## ## locale: ## [1] LC_COLLATE=French_France.1252 LC_CTYPE=French_France.1252 ## [3] LC_MONETARY=French_France.1252 LC_NUMERIC=C ## [5] LC_TIME=French_France.1252 ## ## attached base packages: ## [1] stats graphics grDevices utils datasets methods base ## ## other attached packages: ## [1] formattable_0.2.1 kableExtra_1.3.4 cranlogs_2.1.1 purrr_0.3.4 ## [5] stringr_1.4.0 dplyr_1.0.6 mapsf_0.2.0 sf_1.0-0 ## [9] icons_0.2.0 countdown_0.3.5 ## ## loaded via a namespace (and not attached): ## [1] tidyselect_1.1.1 xfun_0.23 colorspace_2.0-1 vctrs_0.3.8 ## [5] generics_0.1.0 viridisLite_0.4.0 htmltools_0.5.1.1 yaml_2.2.1 ## [9] utf8_1.2.1 rlang_0.4.11 e1071_1.7-7 pillar_1.6.1 ## [13] glue_1.4.2 DBI_1.1.1 rappdirs_0.3.3 lifecycle_1.0.0 ## [17] munsell_0.5.0 rvest_1.0.0 htmlwidgets_1.5.3 codetools_0.2-18 ## [21] evaluate_0.14 knitr_1.33 callr_3.7.0 ps_1.6.0 ## [25] class_7.3-19 fansi_0.5.0 Rcpp_1.0.6 KernSmooth_2.23-20 ## [29] scales_1.1.1 classInt_0.4-3 webshot_0.5.2 jsonlite_1.7.2 ## [33] systemfonts_1.0.2 digest_0.6.27 stringi_1.6.2 xaringan_0.21 ## [37] processx_3.5.2 grid_4.1.0 cli_2.5.0 tools_4.1.0 ## [41] magrittr_2.0.1 proxy_0.4-26 tibble_3.1.2 crayon_1.4.1 ## [45] whisker_0.4 pkgconfig_2.0.3 ellipsis_0.3.2 xml2_1.3.2 ## [49] svglite_2.0.0 assertthat_0.2.1 rmarkdown_2.8 httr_1.4.2 ## [53] rstudioapi_0.13 R6_2.5.0 units_0.7-2 compiler_4.1.0 ``` ] .pull-right[ - La version de R utilisée - Le système d'exploitation (*platform*) - Packages de base attachés (*attached base packages*) - Packages additionnels à charger pour reproduire la documentation et son code. ] --- ## Documenter son environnement de travail Certains packages proposent une visualisation plus synthétique de `sessionInfo()` ```r sessioninfo::session_info() ``` ``` ## - Session info --------------------------------------------------------------- ## setting value ## version R version 4.1.0 (2021-05-18) ## os Windows 10 x64 ## system x86_64, mingw32 ## ui RTerm ## language (EN) ## collate French_France.1252 ## ctype French_France.1252 ## tz Europe/Paris ## date 2021-06-24 ## ## - Packages ------------------------------------------------------------------- ## package * version date lib source ## assertthat 0.2.1 2019-03-21 [1] CRAN (R 4.1.0) ## callr 3.7.0 2021-04-20 [1] CRAN (R 4.1.0) ## class 7.3-19 2021-05-03 [2] CRAN (R 4.1.0) ## classInt 0.4-3 2020-04-07 [1] CRAN (R 4.1.0) ## cli 2.5.0 2021-04-26 [1] CRAN (R 4.1.0) ## codetools 0.2-18 2020-11-04 [2] CRAN (R 4.1.0) ## colorspace 2.0-1 2021-05-04 [1] CRAN (R 4.1.0) ## countdown * 0.3.5 2021-06-10 [1] Github (gadenbuie/countdown@a544fa4) ## cranlogs * 2.1.1 2019-04-29 [1] CRAN (R 4.1.0) ## crayon 1.4.1 2021-02-08 [1] CRAN (R 4.1.0) ## DBI 1.1.1 2021-01-15 [1] CRAN (R 4.1.0) ## digest 0.6.27 2020-10-24 [1] CRAN (R 4.1.0) ## dplyr * 1.0.6 2021-05-05 [1] CRAN (R 4.1.0) ## e1071 1.7-7 2021-05-23 [1] CRAN (R 4.1.0) ## ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.1.0) ## evaluate 0.14 2019-05-28 [1] CRAN (R 4.1.0) ## fansi 0.5.0 2021-05-25 [1] CRAN (R 4.1.0) ## formattable * 0.2.1 2021-01-07 [1] CRAN (R 4.1.0) ## generics 0.1.0 2020-10-31 [1] CRAN (R 4.1.0) ## glue 1.4.2 2020-08-27 [1] CRAN (R 4.1.0) ## htmltools 0.5.1.1 2021-01-22 [1] CRAN (R 4.1.0) ## htmlwidgets 1.5.3 2020-12-10 [1] CRAN (R 4.1.0) ## httr 1.4.2 2020-07-20 [1] CRAN (R 4.1.0) ## icons * 0.2.0 2021-06-18 [1] Github (mitchelloharawild/icons@6e4dc37) ## jsonlite 1.7.2 2020-12-09 [1] CRAN (R 4.1.0) ## kableExtra * 1.3.4 2021-02-20 [1] CRAN (R 4.1.0) ## KernSmooth 2.23-20 2021-05-03 [2] CRAN (R 4.1.0) ## knitr 1.33 2021-04-24 [1] CRAN (R 4.1.0) ## lifecycle 1.0.0 2021-02-15 [1] CRAN (R 4.1.0) ## magrittr 2.0.1 2020-11-17 [1] CRAN (R 4.1.0) ## mapsf * 0.2.0 2021-04-29 [1] CRAN (R 4.1.0) ## munsell 0.5.0 2018-06-12 [1] CRAN (R 4.1.0) ## pillar 1.6.1 2021-05-16 [1] CRAN (R 4.1.0) ## pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.1.0) ## processx 3.5.2 2021-04-30 [1] CRAN (R 4.1.0) ## proxy 0.4-26 2021-06-07 [1] CRAN (R 4.1.0) ## ps 1.6.0 2021-02-28 [1] CRAN (R 4.1.0) ## purrr * 0.3.4 2020-04-17 [1] CRAN (R 4.1.0) ## R6 2.5.0 2020-10-28 [1] CRAN (R 4.1.0) ## rappdirs 0.3.3 2021-01-31 [1] CRAN (R 4.1.0) ## Rcpp 1.0.6 2021-01-15 [1] CRAN (R 4.1.0) ## rlang 0.4.11 2021-04-30 [1] CRAN (R 4.1.0) ## rmarkdown 2.8 2021-05-07 [1] CRAN (R 4.1.0) ## rstudioapi 0.13 2020-11-12 [1] CRAN (R 4.1.0) ## rvest 1.0.0 2021-03-09 [1] CRAN (R 4.1.0) ## scales 1.1.1 2020-05-11 [1] CRAN (R 4.1.0) ## sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 4.1.0) ## sf * 1.0-0 2021-06-09 [1] CRAN (R 4.1.0) ## stringi 1.6.2 2021-05-17 [1] CRAN (R 4.1.0) ## stringr * 1.4.0 2019-02-10 [1] CRAN (R 4.1.0) ## svglite 2.0.0 2021-02-20 [1] CRAN (R 4.1.0) ## systemfonts 1.0.2 2021-05-11 [1] CRAN (R 4.1.0) ## tibble 3.1.2 2021-05-16 [1] CRAN (R 4.1.0) ## tidyselect 1.1.1 2021-04-30 [1] CRAN (R 4.1.0) ## units 0.7-2 2021-06-08 [1] CRAN (R 4.1.0) ## utf8 1.2.1 2021-03-12 [1] CRAN (R 4.1.0) ## vctrs 0.3.8 2021-04-29 [1] CRAN (R 4.1.0) ## viridisLite 0.4.0 2021-04-13 [1] CRAN (R 4.1.0) ## webshot 0.5.2 2019-11-22 [1] CRAN (R 4.1.0) ## whisker 0.4 2019-08-28 [1] CRAN (R 4.1.0) ## withr 2.4.2 2021-04-18 [1] CRAN (R 4.1.0) ## xaringan 0.21 2021-05-19 [1] CRAN (R 4.1.0) ## xfun 0.23 2021-05-15 [1] CRAN (R 4.1.0) ## xml2 1.3.2 2020-04-23 [1] CRAN (R 4.1.0) ## yaml 2.2.1 2020-02-01 [1] CRAN (R 4.1.0) ## ## [1] C:/Users/Ronan YSEBAERT/Documents/R/win-library/4.1 ## [2] C:/Program Files/R/R-4.1.0/library ``` --- class: action # A vous de jouer ! **Adaptez votre R Markdown avec le code mobilisé / proposé durant l'atelier**. .pull-left[ ### Débutant - Insérez votre script précédent dans 3 chunks. - Paramétrez ces chunks différemment. - Rajoutez une `sessionInfo()` en fin de document. ] .pull-right[ ### Confirmé - Choisissez au minium un centre CNRS et une visualisation contenu dans le fichier script.R - Insérez ce script de façon cohérente dans votre R Markdown - Rajoutez une `sessionInfo()` en fin de document. ]
10
:
00
--- name: part6 class: inverse, center, middle # La Vieille Perrotine, au top ? --- ## Un document html utilisant le template `Robobook` .pull-left[ - Une [possible analyse](https://sigr2021.github.io/mardown_data/) suivant les principes de programmation lettrée des données mobilisées dans l'atelier. - Le [R Markdown](https://github.com/sigr2021/mardown/blob/main/index.Rmd) associé. ] .pull-right[ ![](data:image/png;base64,#fig/output_atelier.PNG) ] --- ## Et permet notamment... De comparer les centres de vacances CNRS sur les critères d'analyse proposés ! <table class=" lightable-paper lightable-hover table" style='font-family: "Arial Narrow", arial, helvetica, sans-serif; margin-left: auto; margin-right: auto; font-size: 12px; margin-left: auto; margin-right: auto;'> <thead> <tr> <th style="padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; " colspan="1"><div style="TRUE">Centre</div></th> <th style="padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; " colspan="2"><div style="TRUE">Pop. et pollution lumineuse</div></th> <th style="padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; " colspan="5"><div style="TRUE">Point OpenStreetMap</div></th> </tr> <tr> <th style="text-align:left;"> cnrs </th> <th style="text-align:left;"> pop </th> <th style="text-align:left;"> night </th> <th style="text-align:left;"> museum </th> <th style="text-align:left;"> fort </th> <th style="text-align:left;"> viewpoint </th> <th style="text-align:left;"> artwork </th> <th style="text-align:left;"> monument </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> aussois </td> <td style="text-align:left;"> <span style="display: inline-block; direction: rtl; unicode-bidi: plaintext; border-radius: 4px; padding-right: 2px; background-color: lightgreen; width: 12.89%">85800</span> </td> <td style="text-align:left;"> <span style="display: inline-block; direction: rtl; unicode-bidi: plaintext; border-radius: 4px; padding-right: 2px; background-color: lightblue; width: 24.07%">0.13</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffffff">87</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffa500">1042</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffeccb">105</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffe8c0">42</span> </td> <td style="text-align:left;width: 4cm; "> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #fffbf4">35</span> </td> </tr> <tr> <td style="text-align:left;"> frejus </td> <td style="text-align:left;"> <span style="display: inline-block; direction: rtl; unicode-bidi: plaintext; border-radius: 4px; padding-right: 2px; background-color: lightgreen; width: 100.00%">665700</span> </td> <td style="text-align:left;"> <span style="display: inline-block; direction: rtl; unicode-bidi: plaintext; border-radius: 4px; padding-right: 2px; background-color: lightblue; width: 100.00%">0.54</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffa500">566</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #fffdfb">28</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffdb9a">160</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffb124">72</span> </td> <td style="text-align:left;width: 4cm; "> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffdfa4">59</span> </td> </tr> <tr> <td style="text-align:left;"> gerberal </td> <td style="text-align:left;"> <span style="display: inline-block; direction: rtl; unicode-bidi: plaintext; border-radius: 4px; padding-right: 2px; background-color: lightgreen; width: 51.28%">341400</span> </td> <td style="text-align:left;"> <span style="display: inline-block; direction: rtl; unicode-bidi: plaintext; border-radius: 4px; padding-right: 2px; background-color: lightblue; width: 38.89%">0.21</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffe0a9">247</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #fffdfb">29</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffa500">335</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffa500">79</span> </td> <td style="text-align:left;width: 4cm; "> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffa500">108</span> </td> </tr> <tr> <td style="text-align:left;"> oleron </td> <td style="text-align:left;"> <span style="display: inline-block; direction: rtl; unicode-bidi: plaintext; border-radius: 4px; padding-right: 2px; background-color: lightgreen; width: 45.82%">305000</span> </td> <td style="text-align:left;"> <span style="display: inline-block; direction: rtl; unicode-bidi: plaintext; border-radius: 4px; padding-right: 2px; background-color: lightblue; width: 44.44%">0.24</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffb01f">506</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffd78f">463</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffffff">47</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffe8c0">42</span> </td> <td style="text-align:left;width: 4cm; "> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffffff">32</span> </td> </tr> <tr> <td style="text-align:left;"> plantiers </td> <td style="text-align:left;"> <span style="display: inline-block; direction: rtl; unicode-bidi: plaintext; border-radius: 4px; padding-right: 2px; background-color: lightgreen; width: 21.50%">143100</span> </td> <td style="text-align:left;"> <span style="display: inline-block; direction: rtl; unicode-bidi: plaintext; border-radius: 4px; padding-right: 2px; background-color: lightblue; width: 18.52%">0.10</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #fffaf1">113</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffffff">14</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px">NA</span> </td> <td style="text-align:left;"> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffffff">30</span> </td> <td style="text-align:left;width: 4cm; "> <span style="display: block; padding: 0 4px; border-radius: 4px; background-color: #ffecc9">48</span> </td> </tr> </tbody> </table> Dans un rayon de 30 km autour du centre CNRS : - *pop* :Population communale 2019 (source : Eurostat - GISCO). - *night* : Intensité de pollution lumineuse moyenne 2015 (source : World Atlas of Artificial Night Sky Brightness V.1.1.) - *museum*, *fort*, *viewpoint*, *artwork*, *monument* : nombre de musées, forts, points de vue, centres d'art et moments en 2021 (source : OpenStreetMap et contributeurs). -- --- class: title-slide-final, middle background-size: 55px background-position: 9% 15% # Merci ! <br><br> Présentation réalisée avec [xaringan](https://github.com/yihui/xaringan) et [RMarkdown](https://rmarkdown.rstudio.com/) et le thème [css rutgers](https://github.com/jvcasillas/ru_xaringan), légèrement modifié. Credits: contenu et mise en forme s'inspirant de [@oliviergimenez](https://github.com/oliviergimenez), [State of the R](https://stateofther.github.io/), [R Views](https://rviews.rstudio.com/2018/03/08/cran-package-metadata/) et l'ensemble des manuels d'utilisation des packages associés à l'environnement R Markdown. <br><br><br> | | | | :--------------------------------------------------------------------------------------------------------- | :-------------------------------- | | <svg viewBox="0 0 512 512" style="height:1em;position:relative;display:inline-block;top:.1em;" xmlns="http://www.w3.org/2000/svg"> <path d="M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm0 48v40.805c-22.422 18.259-58.168 46.651-134.587 106.49-16.841 13.247-50.201 45.072-73.413 44.701-23.208.375-56.579-31.459-73.413-44.701C106.18 199.465 70.425 171.067 48 152.805V112h416zM48 400V214.398c22.914 18.251 55.409 43.862 104.938 82.646 21.857 17.205 60.134 55.186 103.062 54.955 42.717.231 80.509-37.199 103.053-54.947 49.528-38.783 82.032-64.401 104.947-82.653V400H48z"></path></svg> | ronan.ysebaert@cnrs.fr | | <svg viewBox="0 0 576 512" style="height:1em;position:relative;display:inline-block;top:.1em;" xmlns="http://www.w3.org/2000/svg"> <path d="M280.37 148.26L96 300.11V464a16 16 0 0 0 16 16l112.06-.29a16 16 0 0 0 15.92-16V368a16 16 0 0 1 16-16h64a16 16 0 0 1 16 16v95.64a16 16 0 0 0 16 16.05L464 480a16 16 0 0 0 16-16V300L295.67 148.26a12.19 12.19 0 0 0-15.3 0zM571.6 251.47L488 182.56V44.05a12 12 0 0 0-12-12h-56a12 12 0 0 0-12 12v72.61L318.47 43a48 48 0 0 0-61 0L4.34 251.47a12 12 0 0 0-1.6 16.9l25.5 31A12 12 0 0 0 45.15 301l235.22-193.74a12.19 12.19 0 0 1 15.3 0L530.9 301a12 12 0 0 0 16.9-1.6l25.5-31a12 12 0 0 0-1.7-16.93z"></path></svg> | [riate.cnrs.fr/](https://riate.cnrs.fr/) | | <svg viewBox="0 0 512 512" style="height:1em;position:relative;display:inline-block;top:.1em;" xmlns="http://www.w3.org/2000/svg"> <path d="M105.2 24.9c-3.1-8.9-15.7-8.9-18.9 0L29.8 199.7h132c-.1 0-56.6-174.8-56.6-174.8zM.9 287.7c-2.6 8 .3 16.9 7.1 22l247.9 184-226.2-294zm160.8-88l94.3 294 94.3-294zm349.4 88l-28.8-88-226.3 294 247.9-184c6.9-5.1 9.7-14 7.2-22zM425.7 24.9c-3.1-8.9-15.7-8.9-18.9 0l-56.6 174.8h132z"></path></svg> | [gitlab.huma-num.fr/rysebaert](https://gitlab.huma-num.fr/rysebaert) | | <svg viewBox="0 0 496 512" style="height:1em;position:relative;display:inline-block;top:.1em;" xmlns="http://www.w3.org/2000/svg"> <path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg> | [@rysebaert](https://github.com/rysebaert) | | <svg viewBox="0 0 384 512" style="height:1em;position:relative;display:inline-block;top:.1em;" xmlns="http://www.w3.org/2000/svg"> <path d="M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48zm72-60V236c0-6.6 5.4-12 12-12h69.2c36.7 0 62.8 27 62.8 66.3 0 74.3-68.7 66.5-95.5 66.5V404c0 6.6-5.4 12-12 12H132c-6.6 0-12-5.4-12-12zm48.5-87.4h23c7.9 0 13.9-2.4 18.1-7.2 8.5-9.8 8.4-28.5.1-37.8-4.1-4.6-9.9-7-17.4-7h-23.9v52z"></path></svg> | [sigr2021.github.io/mardown/](https://sigr2021.github.io/mardown/)