Chapitre 6 Réparer un jeu de données
Les jeux de données peuvent être désordonnés et incompatibles entre certains systèmes (Mac, Windows) ou entre ordinateurs.
Pratiquons-nous à réparer certains problèmes communs.
6.0.1 DÉFI: Réparer un jeu de données “endommagé”
Importez un jeu de données “endommagé” dans R et trouvez les problèmes.
<- read.csv("CO2_broken.csv") # On remplace l'ancien objet CO2 avec le contenu d'un nouveau jeu de données
CO2 head(CO2) # C'est le désordre!
CO2
- Vos données ressemblent probablement à ça !
- Réparez le jeu de données dans R
- Faites un essai avant de regarder la solution
- Entraidez-vous entre voisins et amusez-vous :)
Voici quelques fonctions qui peuvent vous aider :
read.csv()
head()
str()
class()
unique()
levels()
which()
droplevels()
Note : Vous devez mettre le nom de l’objet entre parenthèses pour
utiliser ces fonctions (i.e. head(CO2)
). Rappelez-vous que vous
pouvez obtenir de l’aide en utilisant “?” (e.g. ?str
).
Indice : Il y a quatre problèmes avec ce jeu de données!
Réponse #1 Problème #1 : On dirait que les données sont
contenues dans une seule colonne
Solution : Importez les données de nouveau, mais en
spécifiant comment chaque valeur est séparée. L’argument “sep”
indique à R quel type de caractère sépare les valeurs sur chaque ligne.
Ici, une tabulation sépare les valeurs au lieu d’une virgule.
<- read.csv("CO2_broken.csv", sep = "")
CO2 `?`(read.csv)
Réponse #2 Problème #2 : Les données ne commencent pas avant la troisième ligne. Les en-têtes de colonnes sont remplacés par des notes.
head(CO2) # La fonction head() permet de voir que les données n'ont pas été lues avec les bons en-têtes
Solution : Pour régler ce problème, vous devez indiquer à R de sauter les deux premières lignes avec l’argument “skip”.
<- read.csv("CO2_broken.csv", sep = "", skip = 2) # En ajoutant l'argument skip, R ignore les deux premières lignes.
CO2 head(CO2) # Le tableau a maintenant des en-têtes appropriés.
Réponse #3 Problème #3 : Les variables “conc” et “uptake” sont considérées commes des facteurs au lieu de nombres, car il y a du texte dans ces colonnes.
str(CO2) # La fonction str() montre que les colonnes 'conc' et 'uptake' sont considérées comme facteurs.
class(CO2$conc)
unique(CO2$conc) # En examinant les valeurs uniques de cette colonne,
# on voit que ces deux colonnes contiennent la valeur
# 'cannot_read_notes'.
unique(CO2$uptake)
`?`(unique)
Solution :
`?`(read.csv)
<- read.csv("CO2_broken.csv", sep = "", skip = 2, na.strings = c("NA",
CO2 "na", "cannot_read_notes"))
En identifiant “cannot_read_notes” comme valeur manquante (i.e. NA), R peut maintenant ces colonnes correctement. Rappelez-vous que NA signifie “Not available”.
head(CO2)
str(CO2) # La variable 'conc' est maintenant de type 'integer' (nombre entier) et la variable 'uptake' est maintenant de type numérique.
Réponse #4 Problème #4 : En réalité, il n’y a seulement que deux traitements (chilled & non chilled), mais des erreurs d’orthographe créent deux autres traitements.
str(CO2) # Vous voyez qu'il y a quatre niveaux de traitement
levels(CO2$Treatment)
unique(CO2$Treatment) # Les quatre différents traitements sont 'nonchilled', 'nnchilled', 'chilled' et 'chiled'
Solution :
# Vous pouvez utiliser la fonction which() afin de trouver
# les lignes avec l'erreur 'nnchilled'
which(CO2$Treatment == "nnchilled") # Cette commande nous indique que l'erreur se trouve à la ligne 10
# Vous pouvez corriger l'erreur par indexation (voir
# atelier 1) :
$Treatment[10] <- "nonchilled"
CO2# Vous pouvez faire ces deux étapes en une seule commande :
$Treatment[which(CO2$Treatment == "nnchilled")] <- "nonchilled"
CO2# Faisons la même chose pour 'chiled' :
$Treatment[which(CO2$Treatment == "chiled")] <- "chilled" CO2
Est-ce que les problèmes sont réglés ?
str(CO2) # La fonction str() identifie toujours quatre niveaux de facteur pour la variable traitement
unique(CO2$Treatment) # Cependant, la fonction unique() indique que seulement deux niveaux sont utilisés
<- droplevels(CO2) # La fonction droplevels() supprime les niveaux inutilisés de tous les facteurs du tableau de données
CO2 str(CO2) # C'est réparé !