Introduction à la programmation, R et les Notebooks

GEO UNIV’R Tunisie 2024

Ronan Ysebaert, Nicolas Lambert, Elina Marvaux

2024-05-13

Pourquoi programmer ?

Polyvalence


Avant : Logiciels payants, ruptures logicielles dans les chaines de traitements, partage des méthodes non optimisé, univers “no-code”.

Polyvalence


Maintenant : Tout dans un seul environnement de programmation

Reproductibilité des méthodes



  • Automatiser ses traitements : moins de clic-bouton / erreurs de manipulation, gain de temps
  • Transparence & reproductibilité : pour soi-même, ses collègues, la communauté

Reproductibilité des méthodes



  • Automatiser ses traitements : moins de clic-bouton / erreurs de manipulation, gain de temps
  • Transparence & reproductibilité : pour soi-même, ses collègues, la communauté
  • Maturité de la communauté : IDE fonctionnels, aides, tutoriels, jeux de données d’exemple…

Extensibilité / transposabilité des analyses

library(sf)
library(mapsf)

# Sélection du gouvernorat d'intérêt
del <- "Sousse"

# Import géométries et données
deleg <- st_read("data/tun_admin.gpkg", layer = "delegation", 
                 quiet = TRUE)
deleg_df <- read.csv("data/don_del.csv", sep = ";", dec = ",")

# Jointure attributaire
deleg <- merge(deleg[,"del_code"], deleg_df, by = "del_code",
               all.x = TRUE)

# Paramètres (discrétisation, palette de couleur)
sel <- deleg[deleg$gou_nom == del,]
bks <- mf_get_breaks(x = sel$idr_2011, nbreaks = 5, 
                     breaks = "quantile")
pal <- hcl.colors(n = 5, palette = "Dark Mint", rev = TRUE)

# Cartographie
mf_map(sel, var = "idr_2011", type = "choro", breaks = bks,
       leg_pos = NA)

# Créer un histogramme dans la carte
mf_inset_on(fig = c(0.75, .95, 0.84, .99))
hist(sel$idr_2011, breaks = bks, col = pal, axes = FALSE, 
     labels = "", xlab = "", ylab = "", main = "")
axis(side = 1, at = round(bks, 2), las = 2, tick = FALSE, 
     line = -.9, cex.axis = .7)
mf_inset_off()

mf_title(paste0("Indice de Développement Régional à ",
         del, " (gouvernorat), 2011"))

Extensibilité / transposabilité des analyses

library(sf)
library(mapsf)

# Sélection du gouvernorat d'intérêt
del <- "Sfax"

# Import géométries et données
deleg <- st_read("data/tun_admin.gpkg", layer = "delegation", 
                 quiet = TRUE)
deleg_df <- read.csv("data/don_del.csv", sep = ";", dec = ",")

# Jointure attributaire
deleg <- merge(deleg[,"del_code"], deleg_df, by = "del_code",
               all.x = TRUE)

# Paramètres (discrétisation, palette de couleur)
sel <- deleg[deleg$gou_nom == del,]
bks <- mf_get_breaks(x = sel$idr_2011, nbreaks = 5, 
                     breaks = "quantile")
pal <- hcl.colors(n = 5, palette = "Dark Mint", rev = TRUE)

# Cartographie
mf_map(sel, var = "idr_2011", type = "choro", breaks = bks,
       leg_pos = NA)

# Créer un histogramme dans la carte
mf_inset_on(fig = c(0.75, .95, 0.84, .99))
hist(sel$idr_2011, breaks = bks, col = pal, axes = FALSE, 
     labels = "", xlab = "", ylab = "", main = "")
axis(side = 1, at = round(bks, 2), las = 2, tick = FALSE, 
     line = -.9, cex.axis = .7)
mf_inset_off()

mf_title(paste0("Indice de Développement Régional à ",
         del, " (gouvernorat), 2011"))

Progresser !




Plein de petits succès gratifiants à vivre…

  1. Copier/coller du code, ça marche !
  2. Comprendre et gérer les messages d’erreur / débugger son code
  3. Optimiser son code / tester de nouveaux packages
  4. Créer / adapter de nouvelles méthodes (fonctions)
  5. Mettre à disposition des ressources / soumettre des bugs
  6. Contribuer à la communauté (packages)

Pourquoi R ?

Liberté et maturité


  • R est un logiciel/langage libre (open source)
  • R est multi-plateforme : Windows, MacOS, Linux, etc.


30 années de recherche & développement

  • 1970’s - Mise en oeuvre par John M. Chambers et une équipe de chercheurs du langage S dédié à la “programmation avec des données”
  • 1990’s - R. Gentleman et R. Ihaka mettent en oeuvre R, un langage inspiré par le S, qui a progressivement perdu en influence
  • 1993 - Première version binaire de R publiée sur Statlib
  • 1999 - Création du site web de R (r-project.org) . Première réunion physique de la R core team
  • 2000 - R 1.0.0 est publié. John Chambers (créateur du langage S), rejoint la R Core team
  • 2004: Première conférence UseR! (Vienne)
  • 2009 - Première édition du R Journal
  • 2011 - Première version de RStudio, développé par Joseph Allaire.
  • 2016 - Version 1.0 de RStudio, qui intègre la possibilité d’écrire des notebooks.
  • 2024 - R 4.4.0

R-base et packages




  • Plus de 3000 fonctions de traitement de données et d’analyse statistique (r-base)
  • À ce socle commun s’ajoute de nombreux packages, mis à disposition sur le CRAN (Comprehensive R Archive Network)
  • +/- 40 familles de packages sont identifiés par les CRAN Task Views: statistique (Bayesian, MachineLearning, TimeSeries, …), manipulation de données (MissingData), disciplinaire (Agriculture, Finance, SportsAnalytics, Hydrology, Spatial)
Évolution du nombre de packages accessibles sur le CRAN

Un seul environnement pour toutes les étapes de traitement !

Une large communauté et des ressources


  • Toujours plus d’utilisateur.ice.s dans le monde académique, les organismes publics, les ONG ou chez les analystes (data journalism, etc.)

  • Documentation abondante et structurée :

    • Harmonisation de la documentation des packages et fonctions disponibles, associé à des exemples reproductibles
    • Des sites Web associés aux packages, “cheatsheet
    • Des initiatives comme Rzine pour diffuser la pratique de R dans les SHS
    • Des forums, comme Stack Overflow pour répondre aux questions / réponses
Rzine, encourager la production et favoriser la diffusion de documentation sur la pratique de R en Sciences Humaines et Sociales

Un IDE qui facilite la pratique de R : RStudio


Posit développe et publie des logiciels et des services basés sur le langage R. C’est l’acteur privé le plus important de la communauté R

Posit a développé plusieurs packages de référence :

  • shiny (application web)
  • ggplot2 (représentation graphique)
  • dplyr & tidyr (manipulation de tableau)
  • stringr (manipulation de chaîne de caractères)

Mais aussi… Un Environnement de Développement Intégré (IDE) : RStudio

Interface rudimentaire de R

Interface de R sur Windows

Pas d’interface sur Linux (terminal)


IDE Rstudio

IDE Rstudio

Points forts de RStudio

  • Création de projet : chemins relatifs, très importants pour le partage de vos scripts !
  • Fonctionnalités clic-bouton : exporter un plot, installer un package, visualiser une table, etc.
  • Auto-complétion (CNTRL + Espace) : variables créées dans le code, arguments des fonctions, chemins, etc.
  • Raccourcis clavier
  • Correcteur d’orthographe
  • Création de notebooks

Parce que c’est simple, complet et en constante évolution

Utilisez l’environnement RStudio!

Quelques conseils pour l’apprentissage de R



  • Y consacrer du temps : l’apprentissage d’un langage de programmation reste coûteux (surtout quand c’est le premier)
  • Lire la documentation : nature des objets R attendus par les fonction, possibilités offertes par une fonction (arguments)
  • Jouer les exemples / tutoriels (copier/coller code)
  • Rester serein face à un warning ou une error, généralement liés à des erreurs de syntaxe (virgule, casse, “orthographe”)
  • Consulter les forums (copier/coller messages d’erreur).
  • Préférer les recherches en anglais = importance vocabulaire.

Bonnes pratiques pour écrire et documenter son code


Un code propre et fonctionnel peut être lu et amélioré par un autre auteur (ou par soi-même) longtemps après


Fonctionnel

  • Pas d’erreurs
  • Pas redondant : pour des opérations répétitives, créer des fonctions ou des boucles
  • À jour (utiliser la dernière version des packages, si ce n’est pas le cas, l’expliquer)

Bien écrit

  • Connaître les bonnes pratiques
  • 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)

Bonnes pratiques pour écrire et documenter son code

Voici un graphique interactif réalisé avec plotly

Bonnes pratiques pour écrire et documenter son code

… Et son code associé. Un commentaire ?


library(plotly)
monjeudedonnees<-read.csv("data/don_del.csv",sep=";", dec=",")
monjeudedonnees$part_ordi_2014<-monjeudedonnees$porta_2014/monjeudedonnees$popto_2014*100
slope<-0.02;monjeudedonnees$size <- sqrt(monjeudedonnees$popco_2014 * slope)
fig<-plot_ly(monjeudedonnees, x = ~part_ordi_2014, y = ~idr_2011, type = 'scatter', mode = 'markers', size = ~size, color =~reg_nom, colors = 'Paired', sizes = c(min(monjeudedonnees$size), max(monjeudedonnees$size)),marker=list(opacity=0.5, sizemode='diameter',line=list(width=1, color='#FFFFFF')),
        text=~paste('Délégation:', del_nom_fr, '/', del_nom_ar, '<br>IDR 2011 :', idr_2011, '<br>Ordi:',
                      part_ordi_2014, '<br>Pop.:', popto_2014))
fig<-fig %>% layout(title = 'IDR et équipement en ordinateurs dans les délégations tunisiennes',xaxis=list(title="Part de la population équipée d'ordinateur 2014 (%)",range=c(15, 35)),yaxis =list(title="Indice de développement régional 2011",range=c(0, 1)))
fig

Bonnes pratiques pour écrire et documenter son code

Mise en forme du code : indentation, une instruction par ligne, espaces entre les caractères
library(plotly)

monjeudedonnees <- read.csv("data/don_del.csv", sep = ";", dec = ",")

monjeudedonnees$part_ordi_2014 <- monjeudedonnees$porta_2014 / monjeudedonnees$popto_2014 * 100

slope <- 0.02
monjeudedonnees$size <- sqrt(monjeudedonnees$popco_2014 * slope)

fig <- plot_ly(monjeudedonnees,
               x = ~part_ordi_2014, y = ~idr_2011, size = ~size, color = ~reg_nom, 
               type = 'scatter', 
               mode = 'markers', 
               colors = 'Paired', 
               sizes = c(min(monjeudedonnees$size), max(monjeudedonnees$size)),
               marker = list(opacity = 0.5, 
                             sizemode = 'diameter',
                             line = list(width = 1, color = '#FFFFFF')),
               text = ~paste('Délégation:', del_nom_fr, '/', del_nom_ar, '<br>IDR 2011 :', 
                             idr_2011, '<br>Ordi:', part_ordi_2014, '<br>Pop.:', popto_2014))

fig <- fig %>% layout(title = 'IDR et équipement en ordinateurs dans les délégations tunisiennes',
                      xaxis = list(title = "Part de la population équipée d'ordinateur 2014 (%)",
                                   range = c(15, 35)),
                      yaxis = list(title="Indice de développement régional 2011",
                                  range = c(0, 1)))
fig

Bonnes pratiques pour écrire et documenter son code

Commenter son code : choix de conception, courts et explicites
# Package utilisé
library(plotly)

# Import des données
monjeudedonnees <- read.csv("data/don_del.csv",sep=";", dec=",")

# Création indicateur
monjeudedonnees$part_ordi_2014 <- monjeudedonnees$porta_2014 / monjeudedonnees$popto_2014 * 100

# Paramétrage taille des cercles
slope <- 0.02
monjeudedonnees$size <- sqrt(monjeudedonnees$popco_2014 * slope)

# Création plot interactif
fig <- plot_ly(monjeudedonnees, # Jeu de données
               x = ~part_ordi_2014, y = ~idr_2011, size = ~size, color = ~reg_nom, # Variables
               type = 'scatter', 
               mode = 'markers', 
               colors = 'Paired', 
               sizes = c(min(monjeudedonnees$size), max(monjeudedonnees$size)),
               marker = list(opacity = 0.5, 
                             sizemode = 'diameter',
                             line = list(width = 1, color = '#FFFFFF')),
               text = ~paste('Délégation:', del_nom_fr, '/', del_nom_ar, '<br>IDR 2011 :', 
                             idr_2011, '<br>Ordi:', part_ordi_2014, '<br>Pop.:', popto_2014))

# Labels (titre, axes)
fig <- fig %>% layout(title = 'IDR et équipement en ordinateurs dans les délégations tunisiennes',
                      xaxis = list(title = "Part de la population équipée d'ordinateur 2014 (%)",
                                   range = c(15, 35)),
                      yaxis = list(title="Indice de développement régional 2011",
                                  range = c(0, 1)))
fig

Bonnes pratiques pour écrire et documenter son code

Optimiser les noms d’objet : courts. Ne pas utiliser des mots “réservés” (plot, sum…)
# Package utilisé
library(plotly)

# Import des données
del <- read.csv("data/don_del.csv", sep=";", dec=",")

# Création indicateur
del$part_ordi_2014 <- del$porta_2014 / del$popto_2014 * 100

# Paramétrage taille des cercles
slope <- 0.02
del$size <- sqrt(del$popco_2014 * slope)

# Création plot interactif
fig <- plot_ly(del, # Jeu de données
               x = ~part_ordi_2014, y = ~idr_2011, size = ~size, color = ~reg_nom, # Variables
               type = 'scatter', 
               mode = 'markers', 
               colors = 'Paired', 
               sizes = c(min(del$size), max(del$size)),
               marker = list(opacity = 0.5, 
                             sizemode = 'diameter',
                             line = list(width = 1, color = '#FFFFFF')),
               text = ~paste('Délégation:', del_nom_fr, '/', del_nom_ar, '<br>IDR 2011 :', 
                             idr_2011, '<br>Ordi:', part_ordi_2014, '<br>Pop.:', popto_2014))

# Labels (titre, axes)
fig <- fig %>% layout(title = 'IDR et équipement en ordinateurs dans les délégations tunisiennes',
                      xaxis = list(title = "Part de la population équipée d'ordinateur 2014 (%)",
                                   range = c(15, 35)),
                      yaxis = list(title="Indice de développement régional 2011",
                                  range = c(0, 1)))
fig

Quarto et les notebooks

La réplication en question

  • Où sont stockées les données ?
  • Sur quoi reposent ces protocoles méthodologiques ?
  • Comment les documenter ?
  • Comment les restituer / mettre à jour / adapter ?
Qui pour reprendre ces programmes ?


Qui pour comprendre ce code et ses intentions ?

Recherche reproductible

Ouverture des protocoles de recherche dans l’objectif de confirmer et rendre répétable des résultats de recherche :

  • Mise à disposition des données et du code, exécutable
  • Documentation de l’environnement logiciel nécessaire à son exécution
  • Transparence dans la collecte de données, ses traitements, analyses et sorties graphiques
  • Réutilisable par d’autres : documentation du code, de ce qu’il produit et dans quel but
  • Ouvert aux retours, commentaires, suggestions, critiques, révisions

Jon Claerbout (sismologue, Univ. Stanford). Il utilise avec son groupe pour la première fois le terme de “recherche reproductible” lors du congrès de la Society of Exploration Geophysics en 1992

Programmation lettrée et notebooks

Paradigme de programmation qui consiste à associer code source (pour les ordinateurs) et documentation (pour les humains) :

  • Donner les informations suffisantes pour répliquer l’expérimentation, à la manière d’un essai
  • Vérifier que les conclusions sont valides
  • Améliorer les programmes / rendre les mauvaises décisions de conception plus évidentes
  • Utile pour reprendre les programmes ultérieurement
  • Transmettre et partager les connaissances sous des formes appropriées (tutoriels, manuels)

Un gain général en reproductibilité de la démarche et en ouverture des méthodes scientifiques.

Donald Knuth (mathématicien, Univ. Stanford). Pose les bases de la programmation lettrée dans un premier environnement de literate programming : le WEB qui combine du Pascal et du TeX, appliqué aux nombres premiers (1984)

Notebooks : Principes fondamentaux

Le Notebook est une solution opérationnelle et adaptée pour arriver à ces fins

Source : Pecout, 2022

Les Notebooks du moment en SHS

Source : Pecout, 2022

Quarto : un des derniers nés des notebooks (2022)


  • Une solution de référence dans l’univers RStudio : Maintenu par Posit, accessible dans RStudio, en développement actif (prise en main ++).
  • Permet d’exécuter différents langages de programmation : R, Python, Julia ou JavaScript (interactivité ++)
  • Mises en page avancées (templates ++)
  • Fonctionnalités d’auto-complétion

Des sorties multiples




Restituer des analyses reproductibles / productions d’un projet

Exemple : Sortie (site Web) // Dépôt GitLab




Générer des présentations interactives (iframe, animations, slides interactifs) avec le format revealjs

Exemple : Sortie (Présentation) // Dépôt GitHub // Code








Créer des rapports interactifs / supports de cours combinant (éventuellement) plusieurs langages de programmation.

Exemple : Sortie (Rapport interactif) // Dépôt GitHub // Code (Quarto)




Produire des manuels ou des sections pédagogiques collaboratifs au format Book

Sortie (Book) // Dépôt GitHub






Soumettre des publications suivant les prérequis (modèle LaTeX) de plusieurs revues de référence (Public Library of Science, Elsevier, JSS, etc.)

Journal Articles (Quarto doc)

Initier et paramétrer son notebook dans RStudio

Squelette d’un notebook (Quarto)





Source : Pecout, 2022

Initier un document Quarto dans RStudio

RStudio propose plusieurs modèles pour initier aisément un notebook




Initier un document Quarto dans RStudio

Le document est généré en cliquant sur render

Paramétrer son document grâce au YAML



Le YAML permet de définir :

  • Le format de sortie désiré : HTML
---
title: "My document"
author: "Me"
format: html
---

Paramétrer son document grâce au YAML



Le YAML permet de définir :

  • Le format de document désiré : HTML, PDF (distribution TeX requise)


---
title: "My pdf document"
author: "Me"
format: pdf
---

Paramétrer son document grâce au YAML



Le YAML permet de définir :

  • Le format de document désiré : HTML, PDF (distribution TeX requise), docx (requiert Microsoft Office ou Libre/Open Office).



---
title: "My docx document"
author: "Me"
format: docx
---

Paramétrer son document grâce au YAML



Le YAML permet de définir :

  • Le format de document désiré : HTML, PDF (distribution TeX requise), docx (requiert Microsoft Office ou Libre/Open Office).

  • Le type de sortie souhaité : Document, Présentation (revealjs / beamer, PowerPoint)





---
title: "My presentation"
author: "Me"
format: revealjs / beamer / pptx
---

Paramétrer son document grâce au YAML

Jouez sur ces paramètres pour créer des documents uniques
  • choix d’un thème
  • table des matières
  • numérotation des parties du document
  • gestion des couleurs
  • style de la typo : police, couleurs, taille.
  • affichage des blocs de code
  • dimensionnement des figures et tables
  • gestion des urls
  • ajout d’une bibliographie (BibTeX)
  • affichage des notes de bas de page
  • métadonnées associées au document
  • associer une feuille de style css

Exemple d’un modèle suivant les consignes éditoriales d’un projet européen…

Paramétrer son document grâce au YAML

Jouez sur ces paramètres pour créer des documents uniques
  • choix d’un thème
  • table des matières
  • numérotation des parties du document
  • gestion des couleurs
  • style de la typo : police, couleurs, taille.
  • affichage des blocs de code
  • dimensionnement des figures et tables
  • gestion des urls
  • ajout d’une bibliographie (BibTeX)
  • affichage des notes de bas de page
  • métadonnées associées au document
  • associer une feuille de style css

Consulter la documentation Quarto

… Et son YAML associé :

---
title: "OpenStreetMap data and associated routing engine to produce novel data on rural areas in Europe"
subtitle: "Review data and methods" 
author:
  - name: "Ronan Ysebaert, Marianne Guérois\n, Timothée Giraud, Nicolas Lambert, Matthieu Viry" 
    affiliation: UAR RIATE (CNRS,  Université Paris Cité) 
    affiliation-url: https://riate.cnrs.fr/
date: "2024-05-06"
description: "This review of the literature and data availability aims at providing an overview of possible solutions and limitations for creating accessibility indicators at European context. Whatever the solution retained, computing accessibility indicators requires relevant origins / destination pairs and routing engines for computing travel-time indicators. It is afterward possible to propose a large set of indicators derived from these measures. The first part of the document presents at European scale the policy context and the main initiatives developed so far for proposing harmonized indicators on accessibility. The second one reminds the main issues to be considered when calculating accessibility indicators (origin-destination pairs, routing engines, accessibility indicators computation). The third section makes an overview of existing databases and possibilities that could be considered in a European context for the selection of origins / destinations pairs. The fourth part highlights existing solutions for routing engines according to several transportation modes (road, cycle, transport-transit). Finally, the last section discusses on possibilities offered in term of indicator creation when the travel time matrix is calculated with a case-study on hospitals in France. This case-study could be extended in a cross-border context to test this framework within GRANULAR activities. At the end, this report aims at providing a general research framework on the activities that will be held on task 3.3.1 of the GRANULAR project: Crowd-sources data based on OpenStreetMap."
title-block-banner: "#27445C"
bibliography: bib.bib
format:
  html:
    theme: sandstone
    embed-resources: true
    smooth-scroll: true
    fontsize: 0.9em
    code-tools: true
    code-fold: true
    toc: true
    toc-title: Summary
    toc-depth: 2
    toc-location: left
    css: "styles.css"
    linkcolor: "#d52420"
---

Paramétrer son document grâce au YAML

Ajouter des références bibliographiques ?


Un fichier .bib avec les entrées bibliographiques au format BibTeX

Appelé dans le YAML et le corps du document avec @x (identifiant biblio)
Les références seront ajoutées en fin de document lors de la compilation

Décrire simplement son cheminement en markdown

Permet de gérer les blocs de textes entre les blocs de code dans les notebooks Quarto


  • Un langage de balisage léger basé sur une syntaxe simple largement utilisé dans les blogs, forums et outils collaboratifs

  • Permet de gérer le formatage du texte, des en-têtes, importer simplement des images ou des URL, gérer des énumérations, des tables, etc.

Se reporter au Markdown Guide ou à la synthèse proposée par Quarto pour en savoir plus

Markdown Syntax Output
 ### Titre de niveau 3

Titre de niveau 3

*italics* and **bold**
italics and bold
superscript^2^ / subscript~2~
superscript2 / subscript2
~~strikethrough~~
strikethrough
`verbatim code`
verbatim code
* unordered list
    + sub-item 1
    + sub-item 2
        - sub-sub-item 1
  • unordered list

    • sub-item 1

    • sub-item 2

      • sub-sub-item 1
 [named hyperlinks](url)
named hyperlinks

Décrire simplement son cheminement en markdown

Permet de gérer les blocs de textes entre les blocs de code dans les notebooks Quarto


  • Un langage de balisage léger basé sur une syntaxe simple largement utilisé dans les blogs, forums et outils collaboratifs

  • Permet de gérer le formatage du texte, des en-têtes, importer simplement des images ou des URL, gérer des énumérations, des tables, etc.

Se reporter au Markdown Guide ou à la synthèse proposée par Quarto pour en savoir plus

Markdown Syntax Output
![Named figure](url)
Figure 1

Décrire simplement son cheminement en markdown

Testons ensemble : https://hackmd.io/@Ronan/SJoG6ydbA/edit

Optimiser sa mise en page avec des classes préformatées



Ceci
::: columns

::: {.column width="40%"}

::: {.callout-tip}
## 5 types de callouts disponibles
`note`, `warning`, `important`, `tip`, and `caution`.
:::

::: {.callout-note appearance="simple"}
## Pay Attention

Using callouts is an effective way to highlight content that your reader give special consideration or attention.
:::

::: 

::: {.column width="60%"}
![](fig/callout.png)
:::

:::

Optimiser sa mise en page avec des classes préformatées



Rend cela

Note

Note that there are five types of callouts, including: note, warning, important, tip, and caution.

Pay Attention

Using callouts is an effective way to highlight content that your reader give special consideration or attention.

Tip with Title

This is an example of a callout with a title.

Expand To Learn About Collapse

This is an example of a ‘folded’ caution callout that can be expanded by the user. You can use collapse="true" to collapse it by default or collapse="false" to make a collapsible callout that is expanded by default.

Paramétrer ses blocs de code grâce aux chunks

Le code est à placer dans des chunks (tronçons), délimités par des triples backticks (Code > Insert Chunk dans RStudio).

Un même document Quarto peut combiner plusieurs langages de programmation :

Voici un graphique créé avec la librairie python matplotlib.

```{python}
import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.show()
```

Et un graphique avec le package ggplot de R…

```{r}
library(ggplot2)
ggplot(airquality, aes(Temp, Ozone)) + 
  geom_point() + 
  geom_smooth(method = "loess", se = FALSE)
```

Paramétrer ses blocs de code grâce aux chunks

En initiant le chunk par un hash pipe #| on peut paramétrer son exécution / affichage. Les arguments les plus usuels sont :

  • label: toto : nommer le chunk
  • eval: true/false : le bloc de code est joué ou non.
  • echo: true/false : le bloc de code s’affiche ou non dans le document de sortie.
  • cache: true/false : les résultats sont mis en cache et ne sont pas rejoués tant que le bloc de code reste inchangé.
  • warning: true/false : affiche les messages d’alerte ou non.
  • fig-height: 4 / fig-width: 6 : hauteur / largeur du plot de sortie, en pouces.
  • dpi: 150 : densité de pixels par pouce.

Paramétrer ses blocs de code grâce aux chunks


Ceci dans le .qmd


```{r}
plot(1:10)
```

Rendra cela dans le fichier de sortie


plot(1:10)

Paramétrer ses blocs de code grâce aux chunks


Ceci dans le .qmd



```{r}
#| eval: false
#| echo: false
plot(1:10)
```

Ne rendra rien dans le fichier de sortie…
Et c’est bien normal :)

Paramétrer ses blocs de code grâce aux chunks


Ceci dans le .qmd



```{r}
#| echo: false
plot(1:10)
```

Rendra cela dans le fichier de sortie


Paramétrer ses blocs de code grâce aux chunks


Ceci dans le .qmd



```{r}
#| fig-height: 4
#| fig-width: 3
#| fig-cap: Fig.1 - Un graphique très basique ! 
#| code-fold: true
plot(1:10)
```

Rendra cela dans le fichier de sortie


Code
plot(1:10)

Fig.1 - Un graphique très basique !

Paramétrer ses blocs de code grâce aux chunks

À noter…

  • Générez (render) le document fréquemment pour veiller à la cohérence / bonne exécution de vos blocs de code.
  • Pour vous comme pour les autres, évitez les blocs de code trop volumineux ou longs.
  • Les paramètres des chunks peuvent aussi être spécifiés dans le YAML (setup chunk).
  • L’usage de Knitr rend disponible encore davantage d’options.
  • Ces paramètres peuvent légèrement changer si l’on compile le document avec Jupyter ou Observable JS.

Paramétrer ses blocs de code grâce aux chunks

À noter…

  • Générer (render) le document fréquemment pour veiller à la bonne exécution de son code
  • Éviter les blocs de code trop volumineux ou longs.
  • Les paramètres des chunks peuvent aussi être spécifiés dans le YAML (setup chunk).
  • Possibilité d’intégrer aisément des librairies JavaScript de visualisation interactive grâce aux Jupyter Widgets ou htmlwidgets pour R.
```{r}
#| out-width: "400px"
#| out-height: "400px"
library(leaflet)

leaflet(loc) |> 
  addTiles() |> 
  addMarkers(lng = 10.579, lat = 35.913, 
             popup="GEO UNIV’R Tunisie 2024") 
```

A vous de jouer !

Objectif : Créer et paramétrer son notebook

  1. Téléchargez les données de l’exercice : https://bit.ly/4b8BUvw
  2. Décompressez l’archive qui contient :
    • exo_proj : le fichier projet (chemins relatifs)
    • exo_script.R : un script R qui produit d’une carte interactive avec leaflet
    • exo_fig : un dossier qui contient une photo de l’hôtel
    • exo_bib.bib : un fichier BibTeX qui contient une référence bibliographique
  3. Ouvrez le fichier exo_proj puis créez un document Quarto sous RStudio. Enregistrez le dans le dossier que vous venez de décompresser.
  4. Adaptez le fichier :
    • YAML : Ajouter un titre, un sous-titre, un nom d’auteur, une table des matières, une bibliographie.
    • markdown : Ajouter des titres de niveau 2, mettre du texte en gras et en italique, ajouter une figure, un renvoi vers la bibliographie.
    • classes préformatées : une colonne pour la photo, une pour la carte.
    • code R / chunks : copier/coller le code R disponible dans le fichier script.R dans un chunk. Le paramétrer pour faire en sorte qu’on ne voit pas le code, les messages d’erreur. Faire en sorte que la photo et la carte interactive aient à peu près la même hauteur.

Solution

  1. Téléchargez les données de l’exercice : https://bit.ly/4b8BUvw
  2. Décompressez l’archive qui contient :
    • exo_proj : le fichier projet (chemins relatifs)
    • exo_script.R : un script R qui produit d’une carte interactive avec leaflet
    • exo_fig : un dossier qui contient une photo de l’hôtel
    • exo_bib.bib : un fichier BibTeX qui contient une référence bibliographique
  3. Ouvrez le fichier exo_proj puis créez un document Quarto sous RStudio. Enregistrez le dans le dossier que vous venez de décompresser.
  4. Adaptez le fichier :
    • YAML : Ajouter un titre, un sous-titre, un nom d’auteur, une table des matières, une bibliographie.
    • markdown : Ajouter des titres de niveau 2, mettre du texte en gras et en italique, ajouter une figure, un renvoi vers la bibliographie.
    • classes préformatées : une colonne pour la photo, une pour la carte.
    • code R / chunks : copier/coller le code R disponible dans le fichier script.R dans un chunk. Le paramétrer pour faire en sorte qu’on ne voit pas le code, les messages d’erreur. Faire en sorte que la photo et la carte interactive aient à peu près la même hauteur.