Open Refine

 Un grand coup de balai

Le net­toyage de don­nées est un défi en bio­in­for­ma­tique. Entre les per­sonnes qui veulent réin­ven­ter les stan­dards et les per­sonnes qui ne savent pas les suivre, nous nous trou­vons sou­vent en train de net­toyer, de for­ma­ter et de chan­ger la struc­ture de nos don­nées pour qu'elles soient conformes à une cer­taine norme ou com­pré­hen­sibles par nos pro­grammes.

Balais | CCby Ruth Hart­nup

Il existe une grande varié­té de types de don­nés, et l'un des plus cou­ram­ment uti­li­sés est le for­mat TSV (Tabu­la­tion-Sepa­ra­ted Value): il per­met de struc­tu­rer assez faci­le­ment les don­nées et reste com­pa­tible avec la plu­part des outils bio­in­for­ma­tiques. Ce for­mat est très répan­du car il res­semble un peu à celui d'Excel pour les non bio­in­for­ma­ti­ciens : un tableau avec des lignes et des colonnes 😉 . Il existe d'ailleurs une fonc­tion per­met­tant d'importer ou d'exporter en TSV via Excel et cela res­tant assez trans­pa­rent pour des uti­li­sa­teurs non aver­tis.

NB : vous avez peut être ren­con­tré le for­mat CSV (Com­ma-Sepa­ra­ted Value), simi­laire au TSV mais où on rem­place le carac­tère de sépa­ra­tion '\t' par un ',' (vir­gule par tabu­la­tion).

Un problème aléatoire

Vous tra­vaillez pour une équipe de recherche et une per­sonne du labo a recueilli les don­nées démo­gra­phiques de vos patients, à savoir leurs noms et natio­na­li­tés ain­si que quelques autres don­nées les concer­nant. Elle a regrou­pé tout cela dans un fichier TSV.

Vous vou­lez construire une base de don­nées de ces patients pour pou­voir y atta­cher les don­nées expé­ri­men­tales de votre équipe. Cela per­met­tra à votre labo­ra­toire d'être plus effi­cace pour recher­cher les résul­tats de vos expé­riences et cer­taines infor­ma­tions rat­ta­chées à chaque per­sonne.

Jetons alors un œil au ficher TSV :

 

NB : les don­nées sont géné­rées par ce script qui uti­lise python-faker, un géné­ra­teur de don­nées aléa­toires.

Les données

On peut tout de suite remar­quer que les don­nées sont incons­tantes. Par exemple, pour la colonne "gen­der", il y a au moins 6 façons de noter que le patient est une femme : "Women", "women", "w", "female", "Female" et "F".

Je dis au moins, car le fichier est assez impor­tant, et nous ne vou­lons pas pas­ser une après-midi à réper­to­rier toutes les façons dont ont été repré­sen­tées les "Femmes".

Ce pro­blème ici fic­tif est assez cou­rant quand les don­nées pro­viennent de plu­sieurs loca­li­tés dif­fé­rentes, bien que cela puisse aus­si arri­ver au sein d'un même groupe : plu­sieurs per­sonnes tra­vaillent sur le même fichier et ont des façons de noter les mêmes choses dif­fé­rem­ment, sans comp­ter les fautes de frappes. Cela ne nous pose pas vrai­ment de pro­blèmes à nous "humains", nous pou­vons rapi­de­ment dis­tin­guer une femme d'un homme avec ce ficher, un seul petit coup d'oeil suf­fit. Mais pour un ordi­na­teur, F et Female sont aus­si dif­fé­rents que F et Male.

 

La solution du barbu

C'est par­ti, on uti­lise la ligne de com­mande pour ana­ly­ser notre fichier et repé­rer les erreurs. Cela peut être long et fas­ti­dieux, mais grâce à quelques astuces, on peut vite trou­ver les dif­fé­rentes valeurs pour la colonne "gen­der":

Ok donc 8 façons de dire : "Femme", SU-PER !!! Oui c'est plu­tôt iro­nique, et les per­sonnes ayant déjà fait du net­toyage de don­nées savent que c'est assez cou­rant et com­ment dire, éner­vant :p

Il faut donc choi­sir une valeur et rem­pla­cer les autres. Au hasard, "f", c'est la valeur la plus uti­li­sée. Pour rem­pla­cer "Female", très facile, on véri­fie com­bien d’occurrences de Female se trouvent dans le fichier, car on ne vou­drait pas rem­pla­cer d'autres champs par erreur, le nombre devrait cor­res­pondre à celui que nous avons trou­vé au des­sus, à savoir 29.

Bien, on va pou­voir rem­pla­cer faci­le­ment "Female", mais bon après on a aus­si "F"

Beau­coup moins bien… il faut donc extraire la colonne dans un autre fichier, rem­pla­cer tous les "F", "Woman", … et ré-injec­ter la colonne dans le fichier ori­gi­nal… ou faire un pro­gramme un peu plus com­plexe. Pas bien dur en soi, c'est fai­sable… mais cela risque de prendre pas mal de temps, vu qu'il faut le faire pour toutes les colonnes et moi, ben je suis quelqu'un de pares­seux…

La solution du pro

OpenRefine logo | CC
Open­Re­fine logo | CC

Déve­lop­pé à la base en open source par une entre­prise (Meta­web) sous le nom de Free­base Grid­works. Rache­té par Google sous le nom de google-refine. A la fin du sup­port annon­cé par Google, le code source a été trans­fé­ré en open source et le pro­jet s'appelle aujourd'hui Open Refine. C'est  le pro­duit par­fait pour tra­vailler avec ce genre de don­nées et de pro­blèmes.

Une fois l'installation faite (assez facile d'ailleurs, des exé­cu­tables sont à votre dis­po­si­tion sur leur site), OR (Open Refine) ouvre une fenêtre de navi­ga­tion dans votre navi­ga­teur web favo­ri et il n'y a plus qu'à impor­ter vos don­nées. A savoir qu'OR sup­porte de nom­breux type de don­nées tels que TSV, JSON, RDF, XLS, XML … mais ne nous éga­rons pas 😉 Allez hop, on reprend notre pro­blé­ma­tique :

Une fois nos don­nées impor­tées, on clique sur la colonne "gen­der" > Facet > text facet.

Dans la colonne de gauche, OR nous désigne les dif­fé­rentes manières de décrire "gen­der". On clique sur "edit" sur celles qu'on veut chan­ger. Hop 30 secondes plus tard, on a tout édi­té et il ne nous reste plus que "m" et "f".

Il nous reste à faire la même chose pour les dépar­te­ments, les natio­na­li­tés et notre fichier sera déjà plus cohé­rent…

A savoir que toutes les trans­for­ma­tions appli­quées sont enre­gis­trées, et vous pour­rez faci­le­ment reve­nir à une ver­sion anté­rieure. Il sera aus­si pos­sible d'appliquer ces trans­for­ma­tions à un autre fichier, pra­tique si on vous four­nit le même type de fichier.

Pour aller plus loin

OR offre beau­coup plus. Par exemple vous vou­lez fil­trer vos patients de l'identifiant 10 000 à 15 000 ? Sélec­tion­nez Facet > Nume­ric facet et vous aurez votre résul­tat. Vous pou­vez aus­si appli­quer des trans­for­ma­tions beau­coup plus com­plexes.

OR dis­pose de son propre lan­gage, très proche du JavaS­cript, il vous per­met­tra de scrip­ter la sélec­tion ou le rem­pla­ce­ment des don­nées. En sup­po­sant par exemple que vous vou­lez faire une suite d'études seule­ment sur les per­sonnes d'origine fran­çaise ou alle­mande, vous pou­vez faci­le­ment ajou­ter une colonne qui se met­tra à "Valid" si la colonne "Natio­na­li­ty" contient FR ou DE seule­ment. Les pos­si­bi­li­tés sont mul­tiples et cela vous fera gagner du temps.

Je vous invite à regar­der ces 3 tuto­riels vidéos qui vous don­ne­ront un aper­çu plus appro­fon­di des pos­si­bi­li­tés d'OR.

Mer­ci aux relec­teurs : Estel, Nisaea, Nico­las et Hed­jour.




Commentaires

Laisser un commentaire