3 Nettoyage et validation
3.1 Les jeux de données en écologie
La donnée écologique est multidimensionnelle par sa nature. Cela implique, généralement, que la collecte des données est fragmentée en plusieurs entités et résulte en une multitude de fichiers de données à traiter pour obtenir l’information requise à notre étude. Par exemple, des inventaires ornithologiques par points d’écoute génèrent des données provenant de plusieurs localisations à plusieurs points dans le temps. Il peut y avoir plusieurs techniciens impliqués dans la collecte et un différent tableau de saisi des données peut être utilisé par chacun ou à chaque localisation. Voyez-vous comment la gestion de ces données peut rapidement devenir complexe ?
Bref, les données écologiques nécessaires à une étude sont généralement saisies dans une multitude de fichiers, par différentes personnes. Certaines tâches sont à ne pas négliger lors de la planification parce qu’elles exigent beaucoup de ressources :
- Le nettoyage
- La validation
- L’injection dans la base de données
Ce dernier point sera traité plus en détail dans le Chapitre 5.
3.2 Vérifier les données
Comme l’erreur est humaine, toute opération effectuée par un ou une technicienne, comme la saisie des données, est vouée à contenir des erreurs. Une importante étape dans la gestion des données est la validation de celles-ci, c’est-à-dire la vérification pour la présence d’erreurs communes, d’erreurs délétères pour le projet et pour la bonne structure de la donnée et du tableau. Il y a plusieurs vérifications à effectuer et ces vérifications sont spécifiques au projet et aux données collectées. Par exemple, des données de collecte d’occurrence d’espèces précaires au Québec doivent être associées à une localisation au Québec. Il est si facile de saisir une virgule au mauvais endroit et de se retrouver à l’autre bout du monde…
De plus, comme les données sont souvent réparties dans un grand nombre de fichiers, il est nécessaire de répéter ces vérifications sur l’ensemble des fichiers de données avant de les injecter pour l’entreposage. Il est important que les données entreposées soient valides !
Astuce : les vérifications doivent être insérées dans un processus qui peut être répété et réutilisé fréquemment. L’astuce est d’automatiser les vérifications pour qu’elles puissent être appliquées de la même façon à tous les fichiers. C’est là qu’il devient important de scripter ces vérifications !
Les vérifications gagnent à être enchâssées dans une fonction de façon à ce que cette fonction puisse être appliquée sur tous les jeux de données.
Définition et objectifs du nettoyage
Le nettoyage des données est un processus qui consiste à transformer des données brutes, incohérentes et désorganisées en un format structuré et adapté à l’analyse. Cette étape cruciale garantit que les jeux de données sont exempts d’erreurs, de valeurs manquantes et d’incohérences qui pourraient compromettre la validité de l’analyse ou les prédictions d’un modèle. Les principaux objectifs du nettoyage incluent :
- Éliminer les erreurs et les redondances
- Assurer l’exactitude et l’exhaustivité des données
- Normaliser les formats et les types de données
Caractéristiques des données propres
Les données propres sont structurées, complètes et exemptes d’erreurs ou de valeurs non pertinentes. Elles doivent présenter les caractéristiques suivantes :
- Aucune ligne ou valeur dupliquée
- Absence d’erreurs d’orthographe ou d’incohérences
- Types de données corrects et homogènes
- Aucun caractère spécial indésirable
- Valeurs aberrantes identifiées et traitées de manière appropriée
Signes de données désordonnées
Les données désordonnées nécessitent généralement des transformations ou des corrections avant leur utilisation. Les problèmes courants incluent :
- Présence de caractères spéciaux (par exemple, des virgules dans les nombres)
- Nombres stockés sous forme de texte
- Lignes dupliquées ou manquantes
- Incohérences orthographiques ou de formatage
- Espaces blancs superflus ou zéros utilisés au lieu de valeurs manquantes
Source : Data Cleaning in R
3.3 Validation des données et gestion des erreurs
Il peut y avoir des erreurs dans la saisie des données. Quant à savoir s’il faut corriger les erreurs, cela dépend de votre certitude de la valeur valide. S’il ne vous est pas possible de déterminer avec certitude la valeur correcte, mieux vaut ne pas y toucher.
Faut-il sauvegarder ces données quand même ? Je vous réfère au concept de “separation of concerns” qui suggère de séparer les tâches et besoins en blocs distincts. Ainsi, le stockage des données dans une base de données devrait être distinct de l’utilisation, puisque ces deux tâches répondent à des besoins différents. Heureusement, il existe de bonnes pratiques de correction et de gestion des données douteuses :
- Outils et méthodes de validation
- Certaines librairies R comme CoordinateCleaner aident à la validation https://docs.ropensci.org/CoordinateCleaner/
- Mettre en place un processus automatisé pour signaler et traiter ces erreurs (ex. une fonction qui applique ces vérifications)
- Documenter les critères de validation pour assurer la reproductibilité du nettoyage
- Marquage et stockage des observations incertaines
- C’est l’approche privilégiée par GBIF. Il définissent 50+ problèmes géospatiaux https://data-blog.gbif.org/post/issues-and-flags/
- A été recommandé par les guides et bonnes pratiques https://www.gbif.org/document/80528/ principles-and-methods-of-data-cleaning-primary-species-and-species-occurrence-data
- Ajouter une colonne certainty_status avec des valeurs comme :
valid→ Coordonnées validéescorrected→ Coordonnées corrigéessuspect→ Coordonnées douteusesunknown→ Information manquante
- Ajouter une colonne
original_coordinatespour conserver la donnée brute en cas de correction
Cette approche est à privilégier pour les données spatiales et peut être appliquée aux autres dimensions du jeu de données.
3.4 Ressources
gsub()
La fonction gsub() est très utile pour le nettoyage des données textuelles. Elle permet de remplacer toutes les occurrences d’un motif (pattern) par une chaîne de caractères spécifiée. Voici un exemple simple :
# Exemple d'utilisation de gsub() pour nettoyer des données textuelles
texte_brut <- c("Bonjour, monde!", "R est génial.", "Nettoyage des données.")
texte_nettoye <- gsub("[[:punct:]]", "", texte_brut)
print(texte_nettoye)
# [1] "Bonjour monde" "R est génial" "Nettoyage des données"distinct() dplyr
La fonction distinct() du package dplyr est utilisée pour supprimer les lignes dupliquées dans un data frame. Voici un exemple d’utilisation :
library(dplyr)
# Exemple d'utilisation de distinct() pour supprimer les lignes dupliquées
data <- data.frame(
id = c(1, 2, 2, 3, 4, 4),
valeur = c("A", "B", "B", "C", "D", "D")
)
data_sans_duplicata <- distinct(data)
print(data_sans_duplicata)
# id valeur
# 1 1 A
# 2 2 B
# 3 3 C
# 4 4 D
str()
La fonction str() est utilisée pour afficher la structure interne d’un objet R, ce qui est particulièrement utile pour comprendre la composition d’un data frame ou d’une liste. Voici un exemple :
# Exemple d'utilisation de str() pour afficher la structure d'un data frame
data <- data.frame(
id = c(1, 2, 3),
valeur = c("A", "B", "C"),
score = c(10.5, 20.3, 15.8)
)
str(data)
# 'data.frame': 3 obs. of 3 variables:
# $ id : num 1 2 3
# $ valeur: chr "A" "B" "C"
# $ score : num 10.5 20.3 15.8Ressources supplémentaires
Il est assumé que vous êtes en mesure de concevoir des fonctions dans le langage de programmation R suite à la réussite du cours BIO109. Toutefois, il s’agit d’un concept qui n’est pas trivial et qui demande de la pratique pour bien le saisir. Voici quelques références sur les fonctions :
Une introduction aux fonctions et à l’écriture de fonction de R for data scientists.
Une vidéo : A tutorial for writing functions in R