Découverte :
Open Refine

 Un grand coup de balai

Le nettoyage de données est un défi en bioinformatique. Entre les personnes qui veulent réinventer les standards et les personnes qui ne savent pas les suivre, nous nous trouvons souvent en train de nettoyer, de formater et de changer la structure de nos données pour qu'elles soient conformes à une certaine norme ou compréhensibles par nos programmes.

Balais | CCby Ruth Hartnup

Il existe une grande variété de types de donnés, et l'un des plus couramment utilisés est le format TSV (Tabulation-Separated Value): il permet de structurer assez facilement les données et reste compatible avec la plupart des outils bioinformatiques. Ce format est très répandu car il ressemble un peu à celui d'Excel pour les non bioinformaticiens: un tableau avec des lignes et des colonnes 😉 . Il existe d'ailleurs une fonction permettant d'importer ou d'exporter en TSV via Excel et cela restant assez transparent pour des utilisateurs non avertis.

NB: vous avez peut être rencontré le format CSV (Comma-Separated Value), similaire au TSV mais où on remplace le caractère de séparation '\t' par un ',' (virgule par tabulation).

Un problème aléatoire

Vous travaillez pour une équipe de recherche et une personne du labo a recueilli les données démographiques de vos patients, à savoir leurs noms et nationalités ainsi que quelques autres données les concernant. Elle a regroupé tout cela dans un fichier TSV.

Vous voulez construire une base de données de ces patients pour pouvoir y attacher les données expérimentales de votre équipe. Cela permettra à votre laboratoire d'être plus efficace pour rechercher les résultats de vos expériences et certaines informations rattachées à chaque personne.

Jetons alors un œil au ficher TSV:

 

NB: les données sont générées par ce script qui utilise python-faker, un générateur de données aléatoires.

Les données

On peut tout de suite remarquer que les données sont inconstantes. Par exemple, pour la colonne "gender", 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 important, et nous ne voulons pas passer une après-midi à répertorier toutes les façons dont ont été représentées les "Femmes".

Ce problème ici fictif est assez courant quand les données proviennent de plusieurs localités différentes, bien que cela puisse aussi arriver au sein d'un même groupe : plusieurs personnes travaillent sur le même fichier et ont des façons de noter les mêmes choses différemment, sans compter les fautes de frappes. Cela ne nous pose pas vraiment de problèmes à nous "humains", nous pouvons rapidement distinguer une femme d'un homme avec ce ficher, un seul petit coup d'oeil suffit. Mais pour un ordinateur, F et Female sont aussi différents que F et Male.

 

La solution du barbu

C'est parti, on utilise la ligne de commande pour analyser notre fichier et repérer les erreurs. Cela peut être long et fastidieux, mais grâce à quelques astuces, on peut vite trouver les différentes valeurs pour la colonne "gender":

Ok donc 8 façons de dire : "Femme", SU-PER !!! Oui c'est plutôt ironique, et les personnes ayant déjà fait du nettoyage de données savent que c'est assez courant et comment dire, énervant :p

Il faut donc choisir une valeur et remplacer les autres. Au hasard, "f", c'est la valeur la plus utilisée. Pour remplacer "Female", très facile, on vérifie combien d’occurrences de Female se trouvent dans le fichier, car on ne voudrait pas remplacer d'autres champs par erreur, le nombre devrait correspondre à celui que nous avons trouvé au dessus, à savoir 29.

Bien, on va pouvoir remplacer facilement "Female", mais bon après on a aussi "F"

Beaucoup moins bien... il faut donc extraire la colonne dans un autre fichier, remplacer tous les "F", "Woman", ... et ré-injecter la colonne dans le fichier original... ou faire un programme un peu plus complexe. Pas bien dur en soi, c'est faisable... 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 paresseux...

La solution du pro

OpenRefine logo | CC

OpenRefine logo | CC

Développé à la base en open source par une entreprise (Metaweb) sous le nom de Freebase Gridworks. Racheté par Google sous le nom de google-refine. A la fin du support annoncé par Google, le code source a été transféré en open source et le projet s'appelle aujourd'hui Open Refine. C'est  le produit parfait pour travailler avec ce genre de données et de problèmes.

Une fois l'installation faite (assez facile d'ailleurs, des exécutables sont à votre disposition sur leur site), OR (Open Refine) ouvre une fenêtre de navigation dans votre navigateur web favori et il n'y a plus qu'à importer vos données. A savoir qu'OR supporte de nombreux type de données tels que TSV, JSON, RDF, XLS, XML ... mais ne nous égarons pas 😉 Allez hop, on reprend notre problématique:

Une fois nos données importées, on clique sur la colonne "gender" > Facet > text facet.

Dans la colonne de gauche, OR nous désigne les différentes manières de décrire "gender". On clique sur "edit" sur celles qu'on veut changer. Hop 30 secondes plus tard, on a tout édité et il ne nous reste plus que "m" et "f".

Il nous reste à faire la même chose pour les départements, les nationalités et notre fichier sera déjà plus cohérent...

A savoir que toutes les transformations appliquées sont enregistrées, et vous pourrez facilement revenir à une version antérieure. Il sera aussi possible d'appliquer ces transformations à un autre fichier, pratique si on vous fournit le même type de fichier.

Pour aller plus loin

OR offre beaucoup plus. Par exemple vous voulez filtrer vos patients de l'identifiant 10 000 à 15 000? Sélectionnez Facet > Numeric facet et vous aurez votre résultat. Vous pouvez aussi appliquer des transformations beaucoup plus complexes.

OR dispose de son propre langage, très proche du JavaScript, il vous permettra de scripter la sélection ou le remplacement des données. En supposant par exemple que vous voulez faire une suite d'études seulement sur les personnes d'origine française ou allemande, vous pouvez facilement ajouter une colonne qui se mettra à "Valid" si la colonne "Nationality" contient FR ou DE seulement. Les possibilités sont multiples et cela vous fera gagner du temps.

Je vous invite à regarder ces 3 tutoriels vidéos qui vous donneront un aperçu plus approfondi des possibilités d'OR.


YouTube


YouTube


YouTube

Merci aux relecteurs: Estel, Nisaea, Nicolas et Hedjour.

  • À propos de
  • Issu de la formation bioinformatique de Bordeaux 2, je suis co-fondateur de ce blog.

    Je travaille actuellement au LCSB au Luxembourg depuis maintenant 1 an et je me prétend un codeur fou.

    A bientôt sur bioinfo-fr !

Laisser un commentaire