Auteur·rice
Affiliation

Michaël Delorme

SSP/DéMéSIS

Date de publication

7 février 2025

Modifié

6 février 2025

Exercices de la formation R perfectionnement, module Quarto, des formations à R dispensées au MASA.

Pour bénéficier de la version la plus récente de Quarto, vous pouvez travailler –pour cette formation– sur la version de pré-production de CERISE.

# ces paquets seront nécessaires pour la suite
library(readr)   # lecture des données
library(dplyr)   # manipulation des données
                 # et d'autres au fur et à mesure...

1 Découvrir l’interface

  • Fichier > Nouveau projet > Nouveau répertoire > Projet Quarto >
  • choisir un répertoire, par exemple : formation dans ~
  • moteur knitr

ou, dans un projet existant :

  • Fichier > Nouveau fichier > R Quarto document

Basculer successivement sur l’éditeur texte brut / WYSIWYM1

Tricoter le document

2 Produire un document simple

2.1 Formater du texte

  • Nouveau document Quarto
  • Insérer du texte
  • Insérer des titres de différent niveau
  • Passer en gras, italique
  • Insérer une image
  • Faire une liste

Tricoter le document.

3 Code

3.1 Présentation des données

Utilisation d’un extrait randomisé du RA 2020. Ouvrir le fichier dans donnees/ra_2020.rds.

Code
ra <- read_rds("donnees/ra_2020.rds") 
Rows: 1,000
Columns: 11
$ siege_code_com <chr> "97128", "37178", "89436", "89143", "97103", "84087", "…
$ siege_lib_com  <chr> "LESCURE D ALBIGEOIS", "MARCOLES", "VALREAS", "RIOTORD"…
$ siege_dep      <chr> "51", "57", "11", "95", "34", "37", "971", "22", "16", …
$ siege_lib_dep  <chr> "VENDEE", "PAS DE CALAIS", "PYRENEES ATLANTIQUES", "PYR…
$ siege_reg      <chr> "52", "76", "53", "53", "32", "53", "44", "75", "03", "…
$ siege_lib_reg  <chr> "BOURGOGNE FRANCHE COMTE", "OCCITANIE", "NOUVELLE AQUIT…
$ geo_lct        <chr> "FR_CRS3035RES1000mN2888000E3883000", "FR_CRS3035RES100…
$ pbstot_coef17  <dbl> 2359.20, 3857.20, 478411.23, 15800.00, 213106.09, 14000…
$ otefda_coef17  <chr> "4600", "4600", "6184", "6184", "1516", "2829", "3500",…
$ sau_tot        <dbl> 108.99, 220.06, 0.00, 131.35, 275.92, 73.96, 94.03, 2.3…
$ ugbag_tot      <dbl> 0.00, 0.00, 167.28, 0.00, 0.00, 8.00, 40.62, 273.17, 3.…

3.2 Utiliser les résultats de calculs

  • Insérer un code R chargeant les paquets nécessaires, ouvrant les données du RA et calculant la SAU totale
  • Exécuter (sortie dans la console)
  • Tricoter (aperçu HTML)
Code
ra |> 
  summarise(sau_tot_ha = sum(sau_tot, na.rm = TRUE))
# A tibble: 1 × 1
  sau_tot_ha
       <dbl>
1     64986.
  • Reprendre le code précédent, sauver le résultat dans une variable.
  • Afficher le résultat au sein d’une phrase
Code
sau_tot_ha <- ra |> 
  summarise(sau_tot_ha = sum(sau_tot, na.rm = TRUE)) |> 
  pull(1)

La SAU totale vaut 6.498577^{4} ha.

  • Formater le résultat (arrondi, séparateur décimal, séparateur de milliers)

La SAU totale vaut 64 985,8 ha.

  • Utiliser des options() ou des knitr::knit_hooks() pour ne pas formater chaque sortie
Code
options(OutDec = ",",
        digits = 1,
        scipen = 1e3)

# ou par exemple
knitr::knit_hooks$set(inline = function(x) {
  if (!is.numeric(x)) { 
    x
  } else {
    prettyNum(x, big.mark = " ")
  }
})

La SAU totale vaut 64 986 ha.

3.3 Déboguer

  • Exécuter chunk par chunk
  • Utiliser “Exécuter tous les chunks au-dessus”.

4 Afficher des tableaux

Afficher les premières lignes du data.frame ra.

4.1 Tibble brut

Code
ra
Tableau 1
# A tibble: 1.000 × 11
   siege_code_com siege_lib_com  siege_dep siege_lib_dep siege_reg siege_lib_reg
   <chr>          <chr>          <chr>     <chr>         <chr>     <chr>        
 1 97128          LESCURE D ALB… 51        VENDEE        52        BOURGOGNE FR…
 2 37178          MARCOLES       57        PAS DE CALAIS 76        OCCITANIE    
 3 89436          VALREAS        11        PYRENEES ATL… 53        NOUVELLE AQU…
 4 89143          RIOTORD        95        PYRENEES ATL… 53        OCCITANIE    
 5 97103          CAUMONT        34        HAUTE CORSE   32        AUVERGNE RHO…
 6 84087          AZY LE VIF     37        HAUTE SAVOIE  53        NOUVELLE AQU…
 7 40317          SOINGS EN SOL… 971       VIENNE        44        NORMANDIE    
 8 12120          BONNAT         22        AVEYRON       75        AUVERGNE RHO…
 9 33389          MONTASTRUC LA… 16        CALVADOS      03        NOUVELLE AQU…
10 28111          OYRE           87        MAINE ET LOI… 76        BOURGOGNE FR…
# ℹ 990 more rows
# ℹ 5 more variables: geo_lct <chr>, pbstot_coef17 <dbl>, otefda_coef17 <chr>,
#   sau_tot <dbl>, ugbag_tot <dbl>

4.2 HTML mis en forme

Afficher les premières lignes du data.frame ra avec une mise en forme plus élaborée, avec {gt} ou knitr::kable().

Code
library(gt) # tableaux

ra |> 
  slice_head(n = 5) |> 
  gt()
siege_code_com siege_lib_com siege_dep siege_lib_dep siege_reg siege_lib_reg geo_lct pbstot_coef17 otefda_coef17 sau_tot ugbag_tot
97128 LESCURE D ALBIGEOIS 51 VENDEE 52 BOURGOGNE FRANCHE COMTE FR_CRS3035RES1000mN2888000E3883000 2359 4600 109 0
37178 MARCOLES 57 PAS DE CALAIS 76 OCCITANIE FR_CRS3035RES1000mN2316000E3389000 3857 4600 220 0
89436 VALREAS 11 PYRENEES ATLANTIQUES 53 NOUVELLE AQUITAINE FR_CRS3035RES1000mN2316000E3562000 478411 6184 0 167
89143 RIOTORD 95 PYRENEES ATLANTIQUES 53 OCCITANIE FR_CRS3035RES1000mN2372000E4045000 15800 6184 131 0
97103 CAUMONT 34 HAUTE CORSE 32 AUVERGNE RHONE ALPES FR_CRS3035RES1000mN2540000E3823000 213106 1516 276 0
Code
library(knitr) # moteur de transfo markdown

ra |> 
  slice_head(n = 5) |> 
  kable()
siege_code_com siege_lib_com siege_dep siege_lib_dep siege_reg siege_lib_reg geo_lct pbstot_coef17 otefda_coef17 sau_tot ugbag_tot
97128 LESCURE D ALBIGEOIS 51 VENDEE 52 BOURGOGNE FRANCHE COMTE FR_CRS3035RES1000mN2888000E3883000 2359 4600 109 0
37178 MARCOLES 57 PAS DE CALAIS 76 OCCITANIE FR_CRS3035RES1000mN2316000E3389000 3857 4600 220 0
89436 VALREAS 11 PYRENEES ATLANTIQUES 53 NOUVELLE AQUITAINE FR_CRS3035RES1000mN2316000E3562000 478411 6184 0 167
89143 RIOTORD 95 PYRENEES ATLANTIQUES 53 OCCITANIE FR_CRS3035RES1000mN2372000E4045000 15800 6184 131 0
97103 CAUMONT 34 HAUTE CORSE 32 AUVERGNE RHONE ALPES FR_CRS3035RES1000mN2540000E3823000 213106 1516 276 0

4.2.1 Interactif

Afficher les 100 premières ligne de ra dans un tableau interactif Javascript avec datatable (package {DT}).

Code
library(DT) # tableaux interactifs

ra |> 
  slice_head(n = 100) |> 
  datatable(
    options = list(
      language = list(
        url = "https://cdn.datatables.net/plug-ins/1.10.11/i18n/French.json")))
Tableau 2

5 Graphiques

  • Ajouter un graphique dans le document Quarto. Ex. : Top 10 des SAU départementales à partir de ra.
  • Préciser un titre de figure
Code
library(ggplot2) # graphiques
library(forcats) # facteurs

graph_sau <- ra |> 
  summarise(.by = c(siege_lib_dep),
          sau_dep_ha = sum(sau_tot, na.rm = TRUE),
          n = paste(n(), "exploit.")) |> 
  slice_max(sau_dep_ha, n = 10) |> 
  mutate(siege_lib_dep = fct_reorder(siege_lib_dep, sau_dep_ha)) |> 
  ggplot(aes(siege_lib_dep,
             sau_dep_ha,
             text = n)) +
  geom_col() +
  coord_flip() + 
  labs(title = "10 plus grandes SAU",
       x = "dép.",
       y = "surface (ha)")

graph_sau
Figure 1 –  SAU top 10

Ajouter une phrase dans votre texte indiquant que la figure 1 montre des résultats intéressants (insertion d’un renvoi).

5.1 Interactivité

  • Activer l’interactivité sur un graphique avec {ggiraph}
Code
library(plotly) # graphiques interactifs

graph_sau |> 
  ggplotly(tooltip = "n")
Figure 2 –  SAU top 10 (interactive)

5.2 Disposition

Il est possible de choisir l’emprise et l’emplacement des graphiques (disponible aussi pour d’autres éléments).

  • Placer un graphique en marge avec l’option column:.
Code
densite_sau <- ra |> 
  ggplot() +
  geom_density(aes(sau_tot), fill = "darkslategray3")

densite_sau
Figure 3 –  Distribution de la SAU

doc

Par exemple : densité ou histogramme de la sau_tot.

  • Disposer deux graphiques côte à côte avec l’option layout-ncol:.
    Il est possible d’ajouter des sous-légendes pour chaque graphique doc
Code
densite_sau
graph_sau
(a) Distribution
(b) Top 10
Figure 4 –  SAU

6 Cartes

Ouvrir la couche region du fichier ~/CERISE/03-Espace-de-Diffusion/000_Referentiels/0040_Geo/IGN/adminexpress/adminexpress_cog_simpl_000_2024.gpkg et l’afficher avec {leaflet}.

Code
library(sf)      # SIG
library(leaflet) # cartographie dynamique

"~/CERISE/03-Espace-de-Diffusion/000_Referentiels/0040_Geo/IGN/adminexpress/adminexpress_cog_simpl_000_2024.gpkg" |> 
  read_sf(layer = "region") |> 
  leaflet() |>
  addTiles() |> 
  addPolygons()
Figure 5 –  Carte

7 HTML avec éléments interactifs

// TODO

8 PDF

Sur CERISE en pré-prod uniquement (ou en prod fin février)

  • (Partir d’un nouveau document ou enlever les éléments interactifs {DT} ou {leaflet})
  • Changer le format dans l’en-tête (typst ou pdf)
  • Tricoter

9 Tableau de bord

// TODO

10 Rapports paramétrés

  • Faire un rapport régional donnant le nom de la région, la SAU, les UGB totaux.
  • Générer le rapport pour toutes les régions

Méta

Ce document est produit par :
C:/Users/michael.delorme/Documents/formations/formation_quarto/exercices/exercices_quarto.qmd

Dépôt Git

Notes de bas de page

  1. What You See Is What You Mean↩︎