Apprendre R avec les LLMs
3 décembre 2025
Production attendue : Rapport automatisé fonctionnel au format PDF/HTML
Automatiser pour gagner du temps
Situation réelle :
Vous avez analysé les ventes de janvier…
Maintenant on vous demande d’analyser janvier, février, mars, avril, mai, juin…
Problème
Copier-coller votre code 12 fois ? Non ! Il faut automatiser.
Au lieu de :
On fait :
Comment lister tous les fichiers CSV d’un dossier en R ?
Solutions possibles :
Testez avec vos propres fichiers !
Créez un script qui traite plusieurs fichiers :
# Lister les fichiers
fichiers <- list.files(path = "donnees/", pattern = "\\.csv$",
full.names = TRUE)
# Créer une liste pour stocker les résultats
resultats <- list()
# Boucle sur chaque fichier
for (fichier in fichiers) {
# Lire le fichier
donnees <- read.csv(fichier)
# Calculer des statistiques
stats <- data.frame(
fichier = basename(fichier),
n_lignes = nrow(donnees),
moyenne = mean(donnees$valeur, na.rm = TRUE)
)
# Stocker le résultat
resultats[[fichier]] <- stats
}
# Combiner tous les résultats
resultats_final <- do.call(rbind, resultats)Créez une fonction réutilisable :
analyser_dossier <- function(chemin, pattern = "\\.csv$") {
# Lister les fichiers
fichiers <- list.files(path = chemin, pattern = pattern,
full.names = TRUE)
if (length(fichiers) == 0) {
stop("Aucun fichier trouvé !")
}
# Analyser chaque fichier
resultats <- lapply(fichiers, function(f) {
donnees <- read.csv(f)
data.frame(
fichier = basename(f),
n_lignes = nrow(donnees),
n_colonnes = ncol(donnees),
moyenne_valeur = mean(donnees$valeur, na.rm = TRUE)
)
})
# Combiner et retourner
do.call(rbind, resultats)
}
# Utilisation
resultats <- analyser_dossier("donnees/ventes/")Problème : Un fichier corrompu plante tout !
# Mauvais : tout plante au premier problème
for (fichier in fichiers) {
donnees <- read.csv(fichier) # Erreur ici = tout s'arrête
analyser(donnees)
}
# Bon : gérer les erreurs
for (fichier in fichiers) {
resultat <- tryCatch({
donnees <- read.csv(fichier)
analyser(donnees)
}, error = function(e) {
message("Erreur avec ", fichier, ": ", e$message)
NULL # Retourner NULL en cas d'erreur
})
}Essayez d’expliquer ce que signifie tryCatch().
Quarto permet de créer des documents qui mélangent :
Formats de sortie :
Avantages :
Important
Si vos données changent, votre rapport se met à jour automatiquement !
Un fichier .qmd contient :
Créez un nouveau fichier Quarto :
Observez :
---)```{r} )Cherchez la syntaxe de base de Markdown (titres, listes, gras, italique)
On peut contrôler ce qui apparaît dans le rapport :
```{r}
#| echo: true
#| eval: true
# montrer et exécuter le code
x <- 1:10
mean(x)
```
```{r}
#| echo: false
#| eval: true
# cacher le code, montrer seulement le résultat
plot(x, x^2)
```
```{r}
#| eval: false
# montrer le code mais ne pas l'exécuter
# Utile pour montrer des exemples
install.packages("monpackage")
```Autres options utiles :
message: false : cacher les messageswarning: false : cacher les avertissementsfig-width: 8, fig-height: 5 : taille des graphiquesCréez un rapport Quarto qui :
head())Structure suggérée :
Syntaxe de base :
Toutes les options de formatages en Quarto sont disponibles ici : https://quarto.org/docs/authoring/markdown-basics.html
Problème : Vous voulez le même rapport pour différents datasets
Solution : Créer un template paramétrable
Créez un rapport avec paramètres :
---
title: "Analyse automatisée"
format: html
params:
dataset: "data.csv"
variable: "valeur"
titre_graphique: "Distribution des valeurs"
---
# Analyse de `r params$variable`
```{r}
donnees <- read.csv(params$dataset)
variable_data <- donnees[[params$variable]]
# Statistiques
cat("Moyenne:", mean(variable_data, na.rm = TRUE), "\n")
cat("Médiane:", median(variable_data, na.rm = TRUE), "\n")
# Graphique
hist(variable_data, main = params$titre_graphique)
```Vous pouvez générer des rapports depuis R :
library(quarto)
# Générer un rapport avec des paramètres spécifiques
quarto_render("template.qmd",
execute_params = list(
dataset = "ventes_janvier.csv",
variable = "montant",
titre_graphique = "Ventes de janvier"
),
output_file = "rapport_janvier.html")
# Boucle pour générer plusieurs rapports
fichiers <- c("ventes_janvier.csv", "ventes_fevrier.csv", "ventes_mars.csv")
for (f in fichiers) {
mois <- tools::file_path_sans_ext(basename(f))
quarto_render("template.qmd",
execute_params = list(
dataset = f,
variable = "montant",
titre_graphique = paste("Ventes de", mois)
),
output_file = paste0("rapport_", mois, ".html"))
}Créez une fonction qui génère des rapports automatiquement :
generer_rapport <- function(fichier_donnees, output_dir = "rapports/") {
# Extraire le nom du fichier sans extension
nom_base <- tools::file_path_sans_ext(basename(fichier_donnees))
# Créer le dossier de sortie si nécessaire
if (!dir.exists(output_dir)) {
dir.create(output_dir, recursive = TRUE)
}
# Générer le rapport
output_file <- file.path(output_dir, paste0("rapport_", nom_base, ".html"))
quarto::quarto_render(
"template_analyse.qmd",
execute_params = list(
dataset = fichier_donnees,
titre = paste("Analyse de", nom_base)
),
output_file = output_file
)
message("Rapport généré : ", output_file)
return(output_file)
}
# Utilisation
fichiers <- list.files("donnees/", pattern = "\\.csv$", full.names = TRUE)
rapports <- lapply(fichiers, generer_rapport)Quarto peut générer différents formats :
Objectif : Transformer votre rapport précédent en un rapport Quarto
Utilisez tout ce que vous avez appris
Fonctions, dplyr, ggplot2, gestion d’erreurs, Quarto !
Documentez :
tryCatch()Automatisation :
list.files() : lister des fichiersfor et lapply() sur plusieurs fichierstryCatch() : gestion des erreursQuarto :
echo, eval, message, warning (avec syntaxe #|)quarto_render() : générer des rapports par programmeParamètres :
params dans le YAMLparams$nom_parametreQuels retours vous avez à faire sur le cours ?
Séance 7 - Automatisation et rapports