Exploration des données
Objectifs
- Explorer rapidement un jeu de données après son importation dans R
- Produire des tableaux d’effectifs univariés
Setup
Prérequis: ce tutoriel part du principe que vous avez suivi les sessions introduction à R et R studio, et importation de données.
Pour cette session, nous travaillerons avec les données non nettoyées de la liste linéaire rougeole dans la région de Mandoul (Tchad), qui peut être téléchargée ici :
Assurez-vous qu’elle est correctement enregistrée dans le dossier data/raw de votre projet. Ensuite, créez un nouveau script appelé data-exploration.R, et chargez les paquets {here}, {rio} et {dplyr}. Enfin, importez les données dans R sous la forme d’un objet appelé df_linelist.
Introduction
Il est très important d’inspecter les données que l’on vient d’importer dans R. Lorsque l’on parle d’exploration de données, on veut généralement faire plusieurs choses telles que :
- Examiner les dimensions des données (le nombre de lignes et de colonnes)
- Examiner les noms des colonnes
- Inspecter les premières ou les dernières lignes
- Déterminer le type des variables
- Déterminer la plage de valeurs des variables continues (min et max)
- Inspecter les valeurs possibles de chaque variable catégorielle
Ce processus est crucial et nous permet de nous familiariser avec nos données et d’identifier les problèmes qui seront traités lors de l’étape de nettoyage.
Exploration basique
La première chose à déterminer est la taille du jeu de données, c’est-à-dire son nombre de lignes et son nombre de colonnes. Il existe plusieurs façons d’obtenir ces informations dans R :
- Inspecter le data frame dans le volet environnement de RStudio : le nombre à côté (
5230x25) nous indique qu’il fait5230lignes et25colonnes. - Utilisez
dim()sur vos données pour renvoyer un vecteur avec le nombre de lignes et le nombre de colonnes. - Utilisez
ncol()etnrow()pour obtenir le nombre de colonnes et de lignes respectivement.
Gardez ces nombres en tête afin de pouvoir repérer rapidement tout changement inattendu dans vos données au cours de votre analyse (augmentation ou diminution imprévue du nombre de lignes, ou de colonnes).
En utilisant la méthode de votre choix, obtenez les dimensions de du data frame df_linelist.
Noms de variables
Explorons les noms des variables que nous allons utiliser en permanence lors de l’analyse, et identifions ceux qui pourraient être améliorés. La fonction names() renvoie un vecteur de tous les noms de colonnes d’un data frame :
names(df_linelist) [1] "id" "nom_complet" "sexe"
[4] "age" "unite_age" "region"
[7] "sous_prefecture" "village_commune" "date_debut"
[10] "date_consultation" "hospitalisation" "date_admission"
[13] "nom_structure_sante" "tdr_paludisme" "fievre"
[16] "eruption" "toux" "yeux_rouges"
[19] "pneumonie" "encephalite" "pb"
[22] "statut_vaccinal" "doses_vaccin" "issue"
[25] "date_issue"
Que pensez-vous des noms de votre jeu de données ? Pouvez-vous déjà repérer des variables que vous aimeriez renommer ?
Inspecter vos données
Il est également important d’inspecter vos données, cela peut vous permettre de repérer certaines incohérences, des variables avec beaucoup de valeurs manquantes, et cela vous permettra de voir à quelles valeurs s’attendre pour chacune d’entre elles. Vous pouvez afficher vos données dans la console en :
- exécutant l’objet
df_linelistseul (à éviter si le jeu de données est grand). - utilisant la fonction
head()pour voir les 6 premières lignes (vous pouvez augmenter ce nombre en utilisant l’argumentn) - utilisant la fonction
tail()pour voir les 6 dernières lignes (vous pouvez aussi augmenter ce nombre en utilisant l’argumentn)
Ces méthodes n’afficheront que les 40 premières lignes de vos données au maximum, car c’est la limite de votre console. Une alternative est d’utiliser la fonction View() (avec un V majuscule !) pour voir vos données sous forme de tableur. Cela ouvrira un nouvel onglet avec vos données affichées comme dans une feuille de calcul Excel. Notez que cette commande ne fait qu’afficher les données, elle ne vous permet pas de les modifier !
Soyez prudent avec View() sur un grand jeu de données car cela peut faire planter votre session RStudio. Pour éviter cela, vous pouvez afficher la sortie dans la console.
Affichez les 15 premières lignes de vos données. Que se passe-t-il lorsque vous modifiez la largeur de votre fenêtre de console et que vous exécutez à nouveau la commande ?
Types des variables
Nous voulons maintenant vérifier le type des différentes variables. C’est important car une partie du nettoyage des données consiste à s’assurer que les variables numériques sont de type numeric, les dates de type Date, et les variables catégoriques de type factor ou character. Vous avez déjà vu la fonction class(), qui permet de vérifier le type d’un vecteur. Dans R, chaque variable d’un data frame est un vecteur. Nous pouvons extraire toutes les valeurs de ce vecteur en utilisant l’opérateur $, et les passer à la fonction class() :
class(df_linelist$age)[1] "numeric"
Essayez d’extraire toutes les valeurs de la variable sexe. Quel est le type de cette variable ?
Vous pouvez également utiliser str() sur votre data frame pour vérifier le type de toutes les variables d’un coup :
str(df_linelist)Utilisez str() pour vérifier le type de données de chaque colonne. Y a-t-il quelque chose d’étrange ? Rappelez-vous que vous pouvez aussi utiliser des fonctions comme is.character() et is.numeric() si vous voulez tester le type d’une colonne en particulier.
Exploration des variables
Variables continues
Lors de l’exploration des variables continues, nous pouvons vouloir vérifier les valeurs les plus extrêmes ou calculer des statistiques descriptives. Base R fournit de nombreuses fonctions pratiques :
| Fonction | Description | Exemple | Retours |
|---|---|---|---|
min() |
Valeur minimale | min(x) |
Valeur minimale unique |
max() |
Valeur maximale | max(x) |
Valeur maximale unique |
mean() |
Moyenne arithmétique | mean(x) |
Valeur moyenne |
median() |
Valeur médiane | median(x) |
Valeur médiane |
range() |
Min et max | range(x) |
Vecteur de (min, max) |
IQR() |
Q3 - Q1 | IQR(x) |
Q3 - Q1 |
quantile() |
Quantiles spécifiés | quantile(x, probs = c(0.25, 0.75)) |
Quantiles demandés |
sd() |
Ecart-type | sd(x) |
Ecart-type |
var() |
Variance | var(x) |
Variance |
sum() |
Somme | sum(x) |
Somme |
Ces fonctions exigent que vous supprimiez explicitement les valeurs manquantes (NA) en utilisant l’argument na.rm = TRUE
Vous pouvez extraire les valeurs d’une variable en utilisant $, et les passer à n’importe laquelle de ces fonctions.
Utilisez la syntaxe $ pour obtenir :
- La valeur minimale de
age - Le
pbmaximum
Est-ce que tout semble normal ?
Variables catégoriques
Enfin, examinons les valeurs de nos variables catégoriques à l’aide de tables d’effectifs qui nous permettent de voir rapidement :
- les valeurs uniques d’une variable catégorique (i.e. les catégories/modalités/niveaux/classes/groupes… les noms sont nombreux)
- le nombre d’observations pour chacune de ces catégories
Pour ce faire, on utilise la fonction count() du paquet {dplyr}, qui accepte un data frame et le nom d’une ou plusieurs colonnes en tant qu’arguments, et renvoi le nombre d’observations de chaque élément unique dans cette colonne. Par exemple, affichons les valeurs possibles de la variable sexe et leurs effectifs :
count(df_linelist, sexe) sexe n
1 f 2083
2 female 270
3 femme 253
4 h 2106
5 homme 257
6 male 261
Le résultat est un nouveau data frame, plus petit, contenant le nombre de patients observés, stratifié par sexe. Il semble que cette variable nécessite un recodage… Nous le ferons dans une prochaine session.
Examinez les valeurs de la variable issue de la liste linéaire. Que pensez-vous des catégories ?
Maintenant, essayez d’ajouter l’argument sort = TRUE à la fonction count(). Que fait cet argument ?
C’est fini !
Bravo pour ce premier contact avec vos données !