Accueil > Généralités techniques > Préparer un jeu de données
Préparer un jeu de données
mercredi 15 décembre 2021, par
Les données qu’on vous confie sont TOUJOURS mal ficelées, avec des aberrations dans la présentation, du texte dans les données numériques etc. Voici quelques conseils en vrac (enfin à peu prêt dans l’ordre où vous allez en avoir besoin) pour gagner du temps ensuite. Cela va sans dire mais ça fait toujours du bien de le rappeler : faites des sauvegardes. De tout. Tout le temps. Sur plusieurs supports. Pour les thésards qui remplissent leur tableau Excel : lisez bien la première partie de l’article, ça évitera de me mettre de mauvaise humeur.
Voire aussices quelques conseils pour avoir un fichier sur un tableur utilisable.
Avant tout
Quand on vous envoie un fichier à traiter, le plus souvent un tableur, il faut avoir avec une liste des variables avec :
- le nom (ex : age, satisfaction) en caractères simples, sans accent. Sinon il est toujours possible de nettoyer les noms avec le package Janitor
- Ce qu’elle représente (âge du patient, ressenti du patient face à l’accueil dans le service...)
- le type de variable (numérique, catégorielle...)
- les valeurs possibles ( 18 à 120, très content, un peu content, pas content, très mécontent)
- La variable discriminante pour la question principale & éventuellement quelques questions secondaires avec chacune sa variable, celle qui va servir pour les tests, par exemple vivant/mort mais c’est rare.
- Les variables à étudier en priorité & celles qu’on peut oublier. Tant que vous n’avez pas ces informations, ne faites rien.
Dans un monde idéal, chaque variable doit avoir trois intitulés :
- Son code "age"
- Son nom vrai, celui qui apparaîtra dans le tableau final "Âge du patient"
- La question du formulaire de recueil ’Quel est votre âge (en années) ?"
Dans votre tableur
Les premières vérifications sont à faire dans votre tableur préféré. Tout peut se faire dans R mais c’est plus simple comme ça. De plus vous pouvez toujours renvoyer le fichier corrigé à un correspondant, il pourra le lire. Pour commencer, mettez de coté une copie du fichier original, une erreur est vite arrivée. Colonne par colonne, il faut contrôler les données (pour mémoire les cas sont toujours en ligne, les variables en colonne). La fonction "[*AutoFiltre*]" permet d’avoir facilement la liste des valeurs contenues dans la variable. Par exemple la variable "age" (sans accent !) ne doit contenir que des chiffres allant de 0 à 120. S’il traine dedans un "1254" ou "oui"...
Homogénéisez les réponses
Par exemple les mélanges de "Oui", "oui", "OUI" sont très fréquents. sans parler du "oui " avec une espace... Il y a souvent des cases vides dans le tableau (et à mon avis après quelques heures à corriger des erreurs flagrantes, il n’y a pas que le tableau qui a des cases de vide !). Remplacez-les par des NA, plus lisibles (sauf opposition de l’auteur). De plus ça vous permettra de voir facilement les cellules remplies par une espace, cause d’erreur très fréquente. Reste ensuite le problème des questions à réponse ouverte. Si il y a visiblement deux ou trois réponses qui reviennent souvent, auquel cas il me parait légitime de ne garder que celles ci & de regrouper les autres sous un un intitulé "autres". Dans tous les cas il faut voir avec l’investigateur ce qu’il faut faire. Ne prenez pas de décision qui conduisent à transformer les données sans avoir l’accord de votre correspondant. De toute façon, une fois les corrections purement mécaniques effectuées il vous faudra voir l’investigateur pour savoir :
- Quelle est la variable discriminante (bon courage, il me faut à chaque fois plusieurs jours pour avoir une réponse) etc. (voir plus haut)
- Que faire des réponses ouvertes.
- Lui montrer les données qui paraissent aberrantes, s’il y a une correction possible (un poids de naissance de 430 g peut correspondre à un grand prématuré ou à une faute de frappe).
- Que faire des cas très mal remplis, pleins de données absentes. Il est parfois plus simple de les supprimer,
- Se faire payer un café.
Quand tout vous semble correct, faire une importation dans R et tester la data.frame via [*str(nomfichier)*] ou [*summary(monfichier)*]. Vous allez alors découvrir encore de nombreuses erreurs donc retour au tableur. et ainsi de suite. Tout est bon : il est temps de simplifier votre tableau. Créez une copie et sur cette dernière enlevez toutes les variables inutiles en particulier le nom etc. Il faut garder ces variables le plus longtemps possible car elle peuvent servir pour corriger une donnée, discuter de tel ou tel cas avec l’investigateur... Mais une fois le tableau correct ça va vous faire du bruit, des données inutiles. Donc on supprime mais il vous reste une version complète du tableau quelque part. Gardez quand même la variable d’index (classiquement nommée [*ID*]) tout du long du travail, ça peut toujours être utile. Dés que c’est correct, faite une copie du fichier (en .csv c’est le plus simple) & sauvegardez.
Noms de variables
mon_dataframe %>% clean_names()
Types de variables
Il est temps de reprendre toutes les variables & de vérifier leur type. Je m’explique : la variable age doit être numérique, ça semble évident mais certaines données chiffrées doivent être traitées comme des données factorielles ordonnées. C’est la cas par exemple de beaucoup de scores qui vont de 1 à 5 (au hasard) mais pour lesquels une moyenne n’a pas beaucoup de sens. De plus garder ces données en numérique sous entend qu’il y a autant de différence entre 2 et 3 qu’entre 3 et 4 ce qui n’est pas toujours vrai pour un score (Exemple pour les médecins : un Glasgow qui passe de 6 à 7 n’a que peu de sens clinique, de 7 à 8 ça change tout). Par contre dire il y a x cas avec un score de 1 et y cas ont un score de 2 etc. peut avoir plus de sens.
Une transformation rapide s’impose alors par :
monfichier$score <- as.factor(monfichier$score)
Pour les variables factorielles, vérifier l’ordre des facteurs. Par défaut, R classe les niveaux par ordre alphabétique ce qui n’est pas toujours pertinent. Une variable oui/non sera classé non, oui ce qu’on peut vérifier simplement :
levels(monfichier$content) [1] "non" "oui"
Or il est souvent plus simple & plus parlant d’avoir les oui en premier dans un graphique par exemple. On va donc corriger l’ordre des variables en transformant une variable factorielle simple en variable ordonnée. Un petit exemple pour la variable content :
Quand votre jeu de données est correct, sauvegardez le .csv et allez prendre un café, vous l’avez bien mérité. Plus de la moitié du travail est faite.
Une petite aide : ma fonction debutph qui importe un csv, transforme les variables
Le document que je donne à mes étudiants pour qu’ils me fassent de beaux tableaux,faciles à utiliser (on peut toujours rêver)