library(tidyverse)Guide de travail : modules 1 à 4
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.
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.