Manipulation de données
Progression
#Manipulation de données avec le tidyverse et data.table
Les data frames sont le cœur de R. Cette séance apprend à les importer, à les nettoyer et à les transformer efficacement en s’appuyant d’abord sur le tidyverse
, puis sur data.table
pour les scénarios à forte volumétrie.
#1. Lire et explorer un jeu de données
Nous utilisons readr::read_csv
pour charger un fichier proprement typé. Les colonnes sont automatiquement converties (dates, facteurs, numériques) et les problèmes sont consignés dans une colonne problems()
.
1library(readr)2notes <- read_csv("notes.csv")3summary(notes)
Une fois le tableau en mémoire, dplyr
fournit les verbes de base (select
, filter
, mutate
, summarise
). Nous construisons une pipeline qui calcule la moyenne par filière et classe les résultats.
1library(dplyr)2notes |> 3 filter(!is.na(note)) |>4 group_by(filiere) |>5 summarise(moyenne = mean(note), effectif = n()) |>6 arrange(desc(moyenne))
Chaque transformation renvoie une tibble ; le pipe |>
facilite la lecture de gauche à droite.
#2. Aller plus loin avec data.table
Lorsque les jeux de données dépassent le million de lignes, data.table
offre une syntaxe plus concise et des performances supérieures. Nous réécrivons la requête précédente :
1library(data.table)2dt <- as.data.table(notes)3dt[!is.na(note), .(moyenne = mean(note), effectif = .N), by = filiere][order(-moyenne)]
Nous comparons les temps d’exécution sur un benchmark synthétique (microbenchmark::microbenchmark
) pour comprendre les différences et apprendre à choisir l’outil adapté.
#Atelier
- Construisez un indicateur glissant (moyenne mobile sur 30 jours) avec
dplyr
puis avecdata.table
. Comparez les performances sur un jeu simulé de 5 millions de lignes. - Écrivez une fonction
nettoyer_notes(df)
qui supprime les lignes invalides, standardise les libellés et renvoie un tibble prêt pour l’analyse. - Documentez le pipeline dans un notebook Quarto : insérez du texte explicatif, des graphiques intermédiaires (
ggplot2
) et exportez la synthèse au format HTML.