- Le blog participatif de bioinformatique francophone depuis 2012 -

Bioconvert — simplifier les conversions de formats

Bioconvert

Qui n'a jamais eu à conver­tir un fichier de don­nées bio­lo­giques dans un autre for­mat ? Il y a bien sur le clas­sique fastq vers fas­ta, pour lequel nombre d'entre nous ont codé un conver­tis­seur "mai­son", pas for­cé­ment opti­mal. D'autres for­mats sont par­fois plus pro­blé­ma­tiques, par exemple la conver­sion vers et depuis GFF2/​GFF3. De ces dif­fé­rents constats − conver­tis­seurs "mai­son" (donc pas tou­jours par­faits), grande diver­si­té de for­mats (par­fois très com­plexes et peu docu­men­tés) nou­veaux for­mats ou for­mats obso­lètes, etc − est née l'idée de créer un outil de conver­sion dédié aux for­mats uti­li­sés en bio­in­for­ma­tique : Bio­con­vert.

Dis­po­nible via pip (pip3 ins­tall bio­con­vert avec Python 3.5 ou 3.6), cet outil offre une inter­face com­mune pour conver­tir des don­nées bio­lo­giques depuis une mul­ti­tude de for­mats vers d'autres.

Bio­con­vert est un pro­jet col­la­bo­ra­tif qui a démar­ré fin 2017. À ce jour, nous sommes quinze contri­bu­teurs à par­ti­ci­per au pro­jet, dont le code est libre­ment dis­po­nible sur Github sous licence GPL v3. Plu­sieurs for­mats de fichiers sont actuel­le­ment mani­pu­lés à par­tir d'outils externes (sam­tools, bed­tools, etc) ou de biblio­thèques Python (Bio­py­thon par exemple). Nous sou­hai­tons pro­gres­si­ve­ment nous pas­ser d'un grand nombre de ces outils externes afin de limi­ter les dépen­dances et les aléas qu'ils peuvent poser, et gagner en rapi­di­té d’exécution.

De nom­breux outils de conver­sion existent déjà mais ne prennent géné­ra­le­ment en charge que quelques for­mats spé­ci­fiques. Ils peuvent en outre se révé­ler dif­fi­ciles à ins­tal­ler ("il me manque la librai­rie bidule en ver­sion 4.12.8, mais appa­rem­ment elle ne marche que sur les pro­ces­seurs 32 bits") et ne sont pas tou­jours opti­mi­sés et main­te­nus. Avec Bio­con­vert, nous sou­hai­tons cou­vrir un large spectre de conver­sions entre for­mats. Ain­si, nous réuti­li­sons les outils exis­tants quand cela est pos­sible et offrons un bench­mar­king auto­ma­tique des dif­fé­rentes méthodes pour une même conver­sion. Lorsque les per­for­mances d'un conver­tis­seur sont médiocres, nous implé­men­tons une ver­sion amé­lio­rée et l’intégrons à Bio­con­vert. Je revien­drai sur le bench­mar­king un peu plus tard, car pour une fois c'est syno­nyme de truc fun !

Conversions de Bioconvert
Conver­sions pos­sibles dans Bio­con­vert

Mais bon, concrè­te­ment, com­ment fait-on pour conver­tir un fichier ? Et bien, pour conver­tir un fichier fas­ta vers un gen­bank par exemple, il suf­fit à l'utilisateur de lan­cer cette com­mande :

Aide pour les développeurs

Nous allons créer un conver­tis­seur du for­mat fas­ta vers un nou­veau for­mat de fichier (magni­fique) se nom­mant pwet. La par­ti­cu­la­ri­té de ce for­mat sera d'être écrit sur une seule colonne. Pour cela, un retour à la ligne va être ajou­té der­rière chaque carac­tère (vous l'aurez com­pris, c'est juste pour l'exemple).

Pour ajou­ter un nou­veau conver­tis­seur, il faut com­men­cer par créer le tem­plate. Tout est auto­ma­ti­sé et il suf­fit de ren­trer dans l'invite de com­mandes :

C'est en édi­tant ce fichier que nous crée­rons notre propre conver­tis­seur. Ici, comme dit pré­cé­dem­ment, il s'agit sim­ple­ment de rajou­ter un \n à la fin de chaque carac­tère et il suf­fit donc de modi­fier la méthode par défaut de

Fonctionnement interne

Je pense que vous voyez l’intérêt de l'infrastructure : vous pou­vez vrai­ment vous concen­trer sur le code métier et oublier tous les détails d'intégration de votre code. Mais atten­tion, cela ne vous prive pas de coder pro­pre­ment et d'écrire vos classes de tests ! Tous les tests sont dans le dos­sier tests  et je ne ren­tre­rai pas dans les détails ici, mais c'est aus­si très simple de tes­ter cor­rec­te­ment son conver­tis­seur (tout est expli­qué sur le Read­The­Docs, voir les liens en fin d'article).

Si tout le fra­me­work est codé en python, rien ne vous oblige à uti­li­ser ce lan­gage pour ajou­ter un conver­tis­seur. Comme on vient de le voir, un conver­tis­seur, du point du vue du déve­lop­peur, peut se résu­mer à une fonc­tion. Dès lors, rien ne vous inter­dit dans cette fonc­tion de lan­cer une com­mande sys­tème : c'est même pré­vu et sim­pli­fié par le fra­me­work, et il suf­fit d'utiliser la fonc­tion self.execute(commande)  ! Ain­si, tous les lan­gages sont les bien­ve­nus pour conver­tir effi­ca­ce­ment. En pous­sant plus loin, vous com­pre­nez aus­si que tous les logi­ciels /​ biblio­thèques fai­sant de la conver­sion peuvent être uti­li­sés direc­te­ment dans Bio­con­vert, et c'est d'ailleurs ce méca­nisme que l'on uti­lise déjà pour cer­tains for­mats de fichiers.

Benchmark intégré

Afin de faci­le­ment com­pa­rer les dif­fé­rentes méthodes dis­po­nible pour une même conver­sion, nous avons mis au point une struc­ture de bench­mar­king très simple à uti­li­ser. Basi­que­ment, il suf­fit de lui indi­quer quelles méthodes on sou­haite bench­mar­ker, la quan­ti­té de séquences à trai­ter et le logi­ciel se charge de géné­rer les séquences, lan­cer les dif­fé­rentes méthodes et affi­cher les résul­tats sous forme gra­phique.

Comme vous le voyez, on a fait un petit concours de bits sur qui ferait le conver­tis­seur fastq vers fas­ta le plus rapide. Quand je vous dis que le bench­mar­king peut deve­nir fun 🙂 .

Et la suite ?

Nous conti­nuons de mettre au point des méca­nismes pour sim­pli­fier la vie des déve­lop­peurs et des uti­li­sa­teurs, par exemple le méca­nisme de conver­sion mul­tiple pour com­bler un conver­tis­seur man­quant (l'histoire du A vers D comme expli­qué pré­cé­dem­ment). De plus, une ver­sion en ligne sur une machine vir­tuelle dédiée est en cours de déve­lop­pe­ment, avec une inter­face qui devrait sim­pli­fier gran­de­ment l'utilisation de Bio­con­vert.

Tout le code est bien évi­de­ment ouvert (GPL v3) et nous recher­chons main­te­nant des gens vou­lant nous aider. Nombre d'entre vous ont for­cé­ment codé des conver­tis­seurs, peut-être pour des for­mats un peu spé­ciaux. C'est le bon moment pour vous de dépous­sié­rer ces mor­ceaux de code et de les inclure dans Bio­con­vert, non ? Donc si l'aventure vous tente, n'hésitez pas à venir jouer avec nous. Au pas­sage, pen­sez-vous arri­ver à coder un fastq vers fas­ta plus rapide que les nôtres ? 😀

Liens utiles :

Le pro­jet sur GitHub

La (magni­fique) doc

Bio­con­vert sur Pypi

L'intégration conti­nue

Pour dis­cu­ter avec nous

Le pos­ter de Jobim 2018

Un grand mer­ci à Jnsll, Lins` et M. Blum pour les relec­tures et à Yoann M pour la moti­va­tion !

Vous avez aimé ? Dites-le nous !

Moyenne : 0 /​ 5. Nb de votes : 0

Pas encore de vote pour cet article.

Partagez cet article :




Commentaires

4 réponses à “Bioconvert — simplifier les conversions de formats”

  1. Avatar de Pierre Poulain
    Pierre Poulain

    Super outil ! Bra­vo !
    Par contre, il serait à mon avis utile de pré­ci­ser que l'outil conver­ti une séquence (et non pas un fichier) du for­mat fas­ta vers le for­mat gen­bank, car un fichier gen­bank peu conte­nir beau­coup d'informations (autre que la séquence).
    Par ailleurs, je ne com­prends pas l'utilité du bench­mark. Si toutes ces méthodes sont implé­men­tées dans bio­con­vert, laquelle est réel­le­ment uti­li­sée pour effec­tuer la conver­sion ? Est-ce que l'utilisateur peut déci­der laquelle uti­li­ser ?

    1. Nico M.

      Mer­ci 🙂
      Concer­nant Gen­bank, si le fichier en entrée est un mul­ti-fas­ta, la sor­tie sera un mul­ti-Gen­bank. Et en effet, il contien­dra les mêmes infos que celle du fas­ta, pas plus (enfin si, la taille de la séquence en plus). Mais ça reste bien un fichier fas­ta conver­ti vers un fichier Gen­bank.

      Pour le bench­mark, il est utile pour nous per­mettre de tes­ter faci­le­ment les per­for­mances, par exemple, d'une fonc­tion de conver­sion mai­son contre une fonc­tion d'un outil déjà exis­tant. Ou deux fonc­tions écrites dans des lan­gages dif­fé­rents, etc.
      La fonc­tion "la meilleure", géné­ra­le­ment la plus rapide, est celle uti­li­sée par défaut, mais l'utilisateur peut choi­sir la fonc­tion à uti­li­ser avec l'option ‑c.

  2. Avatar de Alice C.

    Mer­ci pour cet outil très très utile !!
    Pour moi il manque un conver­tis­seur impor­tant c'est VCF2TSV (ou CSV ou XLS).
    Les codes existent déjà. Je vais voir pour les ajou­ter.

    1. Nico M.

      De rien, on est très content de voir que l'outil est uti­li­sé 🙂

      N'hésite pas à rajou­ter la fonc­tion sur le GitHub si tout roule !

Laisser un commentaire