Guide de travail : modules 1 à 4

Accueil des références

Les exemples de ce guide utilisent six ateliers fictifs. Une ligne est répétée et une durée manquante est codée ND. Les effectifs de 2024 et de 2025 sont aussi fictifs; ils permettent de pratiquer les calculs de proportions et de variations.

Ouvrir un projet et charger les packages

Ouvrez pratique.Rproj. Les chemins du rapport partent de ce dossier. Dans RStudio, utilisez le bouton Render pour exécuter le document complet dans une nouvelle session.

library(tidyverse)

Une aide locale est disponible, par exemple avec ?read_csv, ?summarise ou ?geom_histogram. Les installations de packages se font avant l’examen.

Importer et vérifier

Lisez d’abord les noms et les types. Ici, ND désigne une durée manquante et le séparateur est une virgule.

ateliers_bruts <- read_csv(
  "data/ateliers-fictifs.csv",
  na = c("", "NA", "ND"),
  col_types = cols(
    id = col_character(),
    seance = col_character(),
    site = col_character(),
    duree_min = col_double(),
    presents_2024 = col_double(),
    presents_2025 = col_double()
  )
)
dim(ateliers_bruts)
[1] 7 6
glimpse(ateliers_bruts)
Rows: 7
Columns: 6
$ id            <chr> "1", "2", "3", "4", "5", "6", "3"
$ seance        <chr> "Matin", "Après-midi", "Matin", "Après-midi", "Matin", "…
$ site          <chr> "nord", "NORD", "Centre", "centre", "Sud", "SUD", "Centr…
$ duree_min     <dbl> 18, 24, 30, NA, 45, 12, 30
$ presents_2024 <dbl> 12, 18, 10, 16, 20, 15, 10
$ presents_2025 <dbl> 15, 20, 14, 18, 24, 17, 14
colSums(is.na(ateliers_bruts))
           id        seance          site     duree_min presents_2024 
            0             0             0             1             0 
presents_2025 
            0 

Pour un autre format, retrouvez les exemples CSV, Excel et JSON du module 4. Le choix de read_csv(), read_delim(), read_excel() ou fromJSON() dépend du fichier fourni.

Nettoyer et documenter

Le même atelier apparaît deux fois à l’identique. Dans cet exemple, on conserve une seule copie de cette ligne. Une valeur extrême ne suffit pas à justifier une suppression.

ateliers <- ateliers_bruts |>
  distinct() |>
  mutate(
    site = str_to_title(str_squish(site)),
    site = factor(site),
    seance = factor(
      seance,
      levels = c("Matin", "Après-midi"),
      ordered = TRUE
    )
  )
nrow(ateliers)
[1] 6
levels(ateliers$site)
[1] "Centre" "Nord"   "Sud"   

site est nominal. seance possède ici un ordre chronologique explicite. Conservez la durée manquante : elle reste inconnue après nettoyage.

Filtrer, transformer et résumer

ateliers_nord <- ateliers |>
  filter(site == "Nord") |>
  select(id, seance, duree_min)

resume_durees <- ateliers |>
  group_by(site) |>
  summarise(
    n_ateliers = n(),
    n_durees = sum(!is.na(duree_min)),
    moyenne_min = mean(duree_min, na.rm = TRUE),
    mediane_min = median(duree_min, na.rm = TRUE),
    .groups = "drop"
  )
resume_durees
# A tibble: 3 × 5
  site   n_ateliers n_durees moyenne_min mediane_min
  <fct>       <int>    <int>       <dbl>       <dbl>
1 Centre          2        1        30          30  
2 Nord            2        2        21          21  
3 Sud             2        2        28.5        28.5

Le nombre d’ateliers et le nombre de durées disponibles répondent à deux questions différentes. Indiquez lesquels servent au calcul. Si un groupe ne contient aucune valeur disponible, sa moyenne n’est pas définie.

Compter et calculer une proportion

frequences_sites <- ateliers |>
  count(site, name = "n_ateliers") |>
  mutate(proportion = n_ateliers / sum(n_ateliers))
frequences_sites
# A tibble: 3 × 3
  site   n_ateliers proportion
  <fct>       <int>      <dbl>
1 Centre          2      0.333
2 Nord            2      0.333
3 Sud             2      0.333

La proportion porte sur les six ateliers uniques. Pour une variation, le dénominateur est l’effectif initial, et le résultat n’est défini que si cet effectif est disponible et strictement positif.

ateliers <- ateliers |>
  mutate(
    variation_pct = if_else(
      !is.na(presents_2024) & presents_2024 > 0,
      100 * (presents_2025 - presents_2024) / presents_2024,
      NA_real_
    )
  )
ateliers |> select(id, presents_2024, presents_2025, variation_pct)
# A tibble: 6 × 4
  id    presents_2024 presents_2025 variation_pct
  <chr>         <dbl>         <dbl>         <dbl>
1 1                12            15          25  
2 2                18            20          11.1
3 3                10            14          40  
4 4                16            18          12.5
5 5                20            24          20  
6 6                15            17          13.3

La moyenne de plusieurs pourcentages et un pourcentage calculé à partir des sommes peuvent différer. Précisez toujours les nombres comparés et leurs unités.

Choisir un graphique et l’expliquer

Un diagramme à bandes convient à un effectif par catégorie. Un histogramme décrit la distribution d’une variable numérique; une boîte à moustaches compare des distributions; un nuage de points représente deux variables numériques.

ggplot(frequences_sites, aes(x = site, y = n_ateliers)) +
  geom_col(fill = "#236b87") +
  labs(x = "Site", y = "Nombre d'ateliers", title = "Ateliers par site") +
  theme_minimal()

ggplot(ateliers |> filter(!is.na(duree_min)), aes(x = duree_min)) +
  geom_histogram(binwidth = 10, boundary = 0, fill = "#236b87", color = "white") +
  labs(x = "Durée (minutes)", y = "Nombre d'ateliers", title = "Durées disponibles") +
  theme_minimal()

Ce petit exemple illustre la syntaxe. Interprétez un graphique avec le nombre d’observations, la forme, les unités et les valeurs manquantes. Une association entre deux variables ne suffit pas à établir une cause.

Passer du format large au format long

effectifs_longs <- ateliers |>
  select(id, site, presents_2024, presents_2025) |>
  pivot_longer(
    cols = starts_with("presents_"),
    names_to = "annee",
    names_prefix = "presents_",
    values_to = "presents"
  )
effectifs_longs
# A tibble: 12 × 4
   id    site   annee presents
   <chr> <fct>  <chr>    <dbl>
 1 1     Nord   2024        12
 2 1     Nord   2025        15
 3 2     Nord   2024        18
 4 2     Nord   2025        20
 5 3     Centre 2024        10
 6 3     Centre 2025        14
 7 4     Centre 2024        16
 8 4     Centre 2025        18
 9 5     Sud    2024        20
10 5     Sud    2025        24
11 6     Sud    2024        15
12 6     Sud    2025        17

Une ligne représente maintenant un atelier pour une année. L’identifiant id est conservé pour distinguer les ateliers. Retrouvez le passage inverse avec pivot_wider() dans le module 4.

Rendre et vérifier le rapport

Dans le YAML du rapport, utilisez embed-resources: true. Enregistrez le .qmd, redémarrez R, puis rendez le document complet et ouvrez le HTML. Les objets utilisés doivent être créés par le code; les chemins vers les données doivent être relatifs au projet.

Si le rendu échoue, lisez la première erreur : objet absent, package non chargé, chemin incorrect, nom de colonne ou syntaxe. Conservez votre source .qmd même si le HTML ne se produit pas.

S’entraîner avec les références

Ouvrez rapport-entrainement.qmd et reprenez l’exemple à partir des données brutes. Vous pouvez ensuite remplacer les données par un exercice du cours et adapter l’importation et l’analyse. Expliquez chaque choix avec vos mots.

Les modules 1 à 4, leurs exercices et leurs solutions déjà publiées sont regroupés dans ce dossier. Les aide-mémoires Posit complètent ce guide.

Sources : supports des modules 1 à 4 de STT-1100, version du 1er octobre 2026; R for Data Science, deuxième édition, Wickham, Çetinkaya-Rundel et Grolemund (2023); documentation Quarto. Les copies des chapitres et leurs attributions se trouvent dans la rubrique Lectures de l’accueil.