Avec R, des données bien ordonnées

Dans le petit monde de la data science, on entend souvent que 80 % du travail du data analyst est consacré au nettoyage et à l’ordonnancement des données brutes, autrement appelées raw data dans la langue de Shakespeare. Et c’est un peu vrai — car il ne faut pas se le cacher, la plupart des datasets rencontrés dans la nature sont un brin sauvages, et avant de les analyser, il vous faudra les domestiquer et les ordonner.

Avoir des données ordonnées (en plus d’être une rime des plus efficaces) est une condition sine qua non de notre métier — c’est sous ce format seulement que nous pouvons les analyser correctement, tout en réduisant la marge d’erreur de manipulation. Mais alors, des données ordonnées, qu’est-ce que ça veut dire ?

Hadley Wickham & « Tidy Data »

Chief Scientist à RStudio et professeur adjoint de statistiques à l’Université d’Auckland, Mr Wickham est également l’une des pointures mondiales du traitement de données — et lui aussi, tout au long de sa carrière, s’est fait des cheveux blancs sur des datasets désordonnés à ranger proprement. Alors pour faciliter la tâche aux data scientists et surtout donner un cadre de travail commun, il publie en 2014 « Tidy Data », article de référence qui établit clairement ce qu’est un jeu de données « propre ».

Selon Wickham, un jeu de données est propre quand :
chaque variable se trouve dans une colonne
chaque observation compose une ligne
les éléments sont contenus dans le même dataset

Pourquoi rangé comme cela ? Parce que sous cette forme, vous travaillerez avec un contenu qui vous permet de faire référence aux variables et aux observations de manière cohérente tout au long de votre analyse — une ligne devient « un individu statistique ».

Pretty simple, isn’t it ? En théorie, oui, en pratique, un peu moins : les données brutes sont souvent désorganisées, et l’on rencontre régulièrement des jeux de données dans lesquels les colonnes sont des valeurs, plusieurs variables sont dans une seule colonne, ou encore des variables sont en lignes et en colonnes… Hadley Wickham l’illustre de façon très juste dans sa publication avec le principe d’Anna Karénine, issu du roman éponyme de Tolstoï : «Toutes les familles heureuses se ressemblent. Les familles malheureuses sont malheureuses chacune à leur manière.» Il n’y a qu’une seule façon d’être un jeu de données heureux, c’est d’être un jeu de données où chaque ligne est un individu statistique — même si se débrouiller pour construire ce tableau peut être un vrai casse-tête et donner du fil à retordre aux analystes de tous horizons.

Mettre la main à la pâte pour des données ordonnées

Au-delà de simplement nous fournir ces bonnes recommandations, Wickham a aussi développé deux packages qui permettent de manipuler et de ranger nos jeux de données : les bien connus tidyr et dplyr.

tidyr

Avec un nom explicite, tidyr est un package qui vous permet d’obtenir des « tidy data » dans R, autrement dit de « nettoyer » vos données avec votre logiciel favori. Ce package s’appuie sur un grammaire simple, basée sur trois verbes principaux (car oui, il y en a d’autres) : gather(), separate() et spread() — des fonctions qui font… exactement ce qu’elles disent !

Pour ceux d’entre vous qui ne maîtriseraient pas encore parfaitement l’anglais, gather() vient « rassembler », autrement dit fusionner des colonnes en une seule — idéal pour transformer vos jeux de données larges en format long. spread(), quant à elle, effectue l’opération inverse, en distribuant les lignes dans les colonnes. Enfin, separate(), vous l’aurez deviné, permet de séparer une colonne en plusieurs (son opposée existe, elle s’appelle unite(), et vous sera utile pour concaténer plusieurs colonnes en une seule).

dplyr

Avec un nom moins intuitif que son cousin tidyr, ce package est lui aussi indispensable à vos sessions de manipulation de données. Offrant une véritable grammar of data-manipulation, dplyr repose sur cinq verbes principaux : select() et filter(), pour sélectionner des colonnes et filtrer des lignes, arrange(), pour trier vos données, rename(), pour donner un nouveau nom aux colonnes de votre dataset, et enfin mutate(), pour créer une nouvelle variable.

Envie de vous entraîner à ordonner des données ? Nous avons ce qu’il vous faut : téléchargez ce dataset, et rangez-le pour qu’il ressemble exactement à celui-ci. Après ça, n’hésitez pas à nous envoyer votre script, ou à nous le dire sur Twitter !

Vous avez vécu des traumas terribles avec des jeux de données construits avec les pieds ? Dites-nous tout sur Twitter…vous trouverez chez ThinkR une oreille compatissante.

Et surtout, pour vous y retrouver dans ces deux packages, jetez un œil à notre cheatsheet en français sur la manipulation de données (et imprimez-là en grand, pour l’avoir toujours sous le coude).


À propos de l'auteur

Colin Fay

Colin Fay

Data scientist & R Hacker


Commentaires


À lire également