Chapitre 6 Formattage des données
6.1 Noms de colonnes
Une étape essentielle lors du nettoyage des données consiste à uniformiser les noms de colonnes afin de rendre le jeu de données plus lisible, cohérent, et compatible avec la syntaxe tidyverse. Les bonnes pratiques de formattage des noms de colonnes sont les suivantes :
Utiliser uniquement des caractères alphanumériques : Les accents, espaces, et symboles spéciaux doivent être supprimés ou remplacés.
Remplacer les espaces par des underscores (
_).Utiliser des noms en minuscules pour assurer une uniformité.
Rendre les noms explicites et descriptifs, sans abréviations inutiles.
6.1.1 Exemple de formattage
Prenons un exemple simplifié de jeu de données où les noms de colonnes ne respectent pas encore ces bonnes pratiques.
# Jeu de données avant formattage
BD <- data.frame(
`N° RSVL (Alpha)` = 1:5,
`Nom du lac` = c("Lac Beauport", "Lac Tourbillon", "Lac Sergent", "Lac Bleu", "Lac Jaune"),
`LCE: Latitude` = c(47, 47, 46.9, 46.9, 46.1),
`LCE: Longitude` = c(-71.3, -71.2, -71.7, -72, -73.6),
`CHLO-A` = c(2.51, 2.81, 5.75, 3.45, 3.06),
`P-T-TRA` = c(5.19, 8.87, 8.43, 8.09, 6.66),
`Profondeur moyenne` = c(4.1, 1.7, NA, 18.2, 11.5)
)
# Visualisation des noms de colonnes
colnames(BD)## [1] "N..RSVL..Alpha." "Nom.du.lac" "LCE..Latitude"
## [4] "LCE..Longitude" "CHLO.A" "P.T.TRA"
## [7] "Profondeur.moyenne"
6.1.2 Transformation avec janitor::clean_names()
Pour appliquer les bonnes pratiques de formattage, nous utilisons la fonction clean_names() du package janitor. Elle permet de reformater automatiquement les noms de colonnes selon la norme snake_case, qui est largement adoptée dans la syntaxe tidyverse.
# Chargement de la bibliothèque janitor
library(janitor)
# Nettoyage des noms de colonnes
BD_clean <- BD %>% clean_names()
# Visualisation des nouveaux noms de colonnes
colnames(BD_clean)## [1] "n_rsvl_alpha" "nom_du_lac" "lce_latitude"
## [4] "lce_longitude" "chlo_a" "p_t_tra"
## [7] "profondeur_moyenne"
6.1.3 Résultat après formattage
Le jeu de données transformé respecte désormais les bonnes pratiques. Voici la correspondance entre les anciens noms et les nouveaux :
| Ancien nom | Nouveau nom |
|---|---|
| N° RSVL (Alpha) | n_rsvl_alpha |
| Nom du lac | nom_du_lac |
| LCE: Latitude | lce_latitude |
| LCE: Longitude | lce_longitude |
| CHLO-A | chlo_a |
| P-T-TRA | p_t_tra |
| Profondeur moyenne | profondeur_moyenne |
Accents et caractères spéciaux : Les accents (
N°) ont été transformés (n).Espaces et symboles : Les espaces ont été remplacés par des underscores (
_), et les symboles comme:ou-ont été retirés.Minuscules : Les lettres majuscules ont été converties en minuscules.
Cette approche garantit des noms de colonnes cohérents et conformes à la syntaxe tidyverse, facilitant l’utilisation dans des pipelines de manipulation de données avec {dplyr}, {ggplot2}, etc.
6.2 Utilisation de labelled pour ajouter des étiquettes aux variables
En plus de bien nommer les colonnes, il est souvent utile d’ajouter des étiquettes (ou labels) aux variables afin de fournir des descriptions plus détaillées des colonnes dans un jeu de données. Cela est particulièrement utile lors du partage de données avec d’autres analystes ou pour la documentation.
Le package labelled permet d’ajouter des étiquettes aux colonnes de manière efficace.
6.2.1 Pourquoi utiliser des étiquettes de variables ?
Clarté : Les noms de colonnes peuvent être courts et concis, tandis que les étiquettes fournissent des descriptions complètes et explicites des variables.
Documentation : L’ajout d’étiquettes aide à documenter chaque colonne, facilitant la compréhension du jeu de données, surtout lorsqu’il est partagé.
6.2.2 Exemple d’utilisation avec labelled
Imaginons que vous souhaitez ajouter des étiquettes descriptives à certaines colonnes de votre jeu de données :
# Chargement du package labelled
library(labelled)
# Jeu de données exemple
BD <- data.frame(
no_rsvl_alpha = 1:5,
nom_du_lac = c("Lac Beauport", "Lac Tourbillon", "Lac Sergent", "Lac Bleu", "Lac Jaune"),
lce_latitude = c(47, 47, 46.9, 46.9, 46.1),
lce_longitude = c(-71.3, -71.2, -71.7, -72, -73.6),
chlo_a = c(2.51, 2.81, 5.75, 3.45, 3.06)
)
# Ajout d'étiquettes aux variables
BD_labelled <- BD %>%
set_variable_labels(
no_rsvl_alpha = "Numéro RSVL du lac",
nom_du_lac = "Nom du lac",
lce_latitude = "Latitude du lac selon le LCE",
lce_longitude = "Longitude du lac selon le LCE",
chlo_a = "Concentration de chlorophylle-A"
)
# Visualisation des étiquettes des variables
var_label(BD_labelled)## $no_rsvl_alpha
## [1] "Numéro RSVL du lac"
##
## $nom_du_lac
## [1] "Nom du lac"
##
## $lce_latitude
## [1] "Latitude du lac selon le LCE"
##
## $lce_longitude
## [1] "Longitude du lac selon le LCE"
##
## $chlo_a
## [1] "Concentration de chlorophylle-A"
6.2.3 Explication
set_variable_labels(): Cette fonction permet d’ajouter des descriptions aux colonnes du jeu de données. Les étiquettes ne changent pas le nom des colonnes mais fournissent des informations supplémentaires.Consultation des étiquettes : Pour vérifier ou afficher les étiquettes d’un jeu de données, vous pouvez utiliser la fonction
var_label().
6.2.4 Visualisation des étiquettes
Vous pouvez également afficher les étiquettes dans un rapport ou un script de documentation. Par exemple, en utilisant la fonction var_label(), voici les étiquettes des variables :
| Colonne | Étiquette |
|---|---|
| n_rsvl_alpha | Numéro RSVL du lac |
| nom_du_lac | Nom du lac |
| lce_latitude | Latitude du lac selon le LCE |
| lce_longitude | Longitude du lac selon le LCE |
| chlo_a | Concentration de chlorophylle-A |
6.2.5 Intégration des étiquettes dans un workflow d’analyse
L’ajout d’étiquettes est utile non seulement pour la documentation, mais aussi pour les analyses descriptives ou la production de rapports. Par exemple, ces étiquettes peuvent être utilisées lors de l’exportation des données ou lors de la génération de rapports avec des packages comme {gt}, {flextable}, ou {rmarkdown}.
6.3 Gestion des données manquantes
Dans un jeu de données, il est courant de rencontrer des valeurs manquantes sous différentes formes : NA, NaN, des cases vides ("", " "), ou des espaces vides (" "). Le tidyverse propose plusieurs approches pour détecter, traiter et remplacer ces valeurs manquantes afin de garantir la qualité de vos analyses.
6.3.1 Détection des données manquantes
Avant de traiter les valeurs manquantes, il est important de pouvoir les identifier. Voici quelques méthodes pour détecter les différentes formes de valeurs manquantes :
library(dplyr)
# Exemple de jeu de données avec différentes valeurs manquantes
BD <- data.frame(
nom_du_lac = c("Lac Beauport", "Lac Tourbillon", "", " ", NA),
profondeur_moyenne = c(4.1, NaN, NA, 18.2, 11.5),
chlo_a = c(2.51, 2.81, NA, 3.45, "")
)
# Identifier les valeurs manquantes (NA, NaN, "", " ")
BD_clean <- BD %>%
mutate(across(everything(), ~ ifelse(. %in% c("", " ", NA, NaN), NA, .)))
# Visualiser le jeu de données après nettoyage
BD_clean## nom_du_lac profondeur_moyenne chlo_a
## 1 Lac Beauport 4.1 2.51
## 2 Lac Tourbillon NA 2.81
## 3 <NA> NA <NA>
## 4 <NA> 18.2 3.45
## 5 <NA> 11.5 <NA>
6.3.2 Explication
mutate(across()): Utiliseacross()pour appliquer une transformation à toutes les colonnes. Cette approche permet de détecter et remplacer différentes formes de valeurs manquantes (NA,NaN,""," ").ifelse(): Pour chaque colonne, nous remplaçons les valeurs""," ",NA, etNaNparNA, ce qui facilite la gestion homogène des valeurs manquantes dans le jeu de données.
6.3.3 Remplacer ou supprimer les valeurs manquantes
Selon le contexte, vous pouvez choisir de :
Remplacer les valeurs manquantes par une valeur spécifique (par exemple, 0 pour des variables numériques).
Supprimer les lignes contenant des valeurs manquantes si ces données sont inutilisables.
6.3.3.1 Remplacer les valeurs manquantes
# Charger la librairie tidyr
library(tidyr)
# Remplacer les valeurs manquantes par 0 pour les colonnes numériques
BD_clean <- BD_clean %>%
mutate(across(where(is.numeric), ~ replace_na(., 0)))
# Remplacer les valeurs manquantes par "Inconnu" pour les colonnes non numériques
BD_clean <- BD_clean %>%
mutate(across(where(is.character), ~ replace_na(., "Inconnu")))
# Visualiser le jeu de données après remplacement
BD_clean## nom_du_lac profondeur_moyenne chlo_a
## 1 Lac Beauport 4.1 2.51
## 2 Lac Tourbillon 0.0 2.81
## 3 Inconnu 0.0 Inconnu
## 4 Inconnu 18.2 3.45
## 5 Inconnu 11.5 Inconnu
6.3.3.2 Supprimer les lignes avec des valeurs manquantes
# Supprimer les lignes avec des valeurs manquantes dans n'importe quelle colonne
BD_clean <- BD_clean %>%
drop_na()
# Visualiser le jeu de données après suppression
BD_clean## nom_du_lac profondeur_moyenne chlo_a
## 1 Lac Beauport 4.1 2.51
## 2 Lac Tourbillon 0.0 2.81
## 3 Inconnu 0.0 Inconnu
## 4 Inconnu 18.2 3.45
## 5 Inconnu 11.5 Inconnu
6.3.4 Stratégies de gestion des données manquantes
Remplacement : Vous pouvez choisir de remplacer les valeurs manquantes par une valeur par défaut (comme 0 ou “Inconnu”). Cela peut être utile pour éviter la perte de données.
Suppression : Lorsque les valeurs manquantes sont trop nombreuses ou lorsque ces données sont essentielles à l’analyse, il est parfois préférable de supprimer les lignes ou colonnes affectées.
Imputation : Dans certains cas, vous pourriez envisager d’imputer les valeurs manquantes avec une méthode statistique, comme la moyenne ou la médiane. Ce processus n’est pas couvert dans cette section mais peut être exploré dans des contextes avancés.
6.3.5 Résumé
Il est essentiel de détecter, nettoyer, et traiter les données manquantes de manière cohérente pour assurer la robustesse de vos analyses. Les fonctions du tidyverse telles que replace_na(), drop_na(), et mutate(across()) fournissent un moyen efficace de gérer les valeurs manquantes, quelles que soient leur forme.