Trucs pour LaTeX & R

Préparer un jeu de données

dimanche 2 juillet 2017 par Philippe MICHEL

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.

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)
  • 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, Le plus simple est 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. Le tableau doit ressembler à :

Nom TypeValeursUsage
ID numérique 1-1000 aucun
Âge numérique 18-110
Sexe factoriel h f
Satisfaction factoriel ordonné pas du tout
un peu
Beaucoup
énormément
Sortie factoriel vivant
Mort
Variable discriminante

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 « tri automatique » permet d’avoir facilement la liste des valeurs contenues dans la variable. Par exemple la variable « âge » 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 vous êtes content de votre importation, faite une copie de votre data.frame (et sauvegardez).

Noms de variables

R est sensible à la casse : « Nom » est différent de « nom » ce qui peut être une source d’erreur & surtout de difficulté à la saisie.
Je vous conseille donc de passer tous vos noms de variables en minuscule grace à la fonction tolower du package epicalc :
> names(monfichier)<-tolower(names(monfichier))

Pour les utilisateurs d’Emacs + ESS, il reste à se débarrasser des accents (Rstudio n’ pas ce problème). Bon, d’accord, ça ne va plus être un français correct mais ça simplifie bien la vie pour une raison simple : ESS cafouille pour la complétion automatique dés qu’il y a un accent (ou alors j’ai loupé un truc). On peut y arriver par :

  1. >  names(monfichier) <- chartr("éàèêç","eaeec",names(monfichier))

Une autre contrainte est que R ne supporte pas les espaces dans les noms de variable. Mais R va se débrouiller tout seul en remplaçant les espaces par des points. Au final la variable Poids de naissance sera devenue poids.de.naissance.

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, un Glasgow à 7 ou à 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 :

  1. 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 :

  1.  levels(monfichier$content)
  2. [1] "non" "oui"

Télécharger

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 :

  1. > levels(monfichier$content))
  2. [1] "non" "oui"
  3. > monfichier$content) <- ordered(monfichier$content),c("oui","non"))
  4. > levels(monfichier$content))
  5. [1] "oui" "non"

Télécharger

Quand votre jeu de données (matérialisé en un data.frame) est correct, sauvegardez et allez prendre un café, vous l’avez bien mérité. Plus de la moitié du travail est faite.


Accueil | Contact | Plan du site | | Statistiques du site | Visiteurs : 74 / 127141

Suivre la vie du site fr  Suivre la vie du site R   ?    |    titre sites syndiques OPML   ?

Site réalisé avec SPIP 3.2.1 + AHUNTSIC

Creative Commons License