Accessibility Tools

- Le blog participatif de bioinformatique francophone depuis 2012 -

Logo officiel du langage de programmation Python |Tous droits réservés
Logo officiel du langage de programmation Python |Tous droits réservés

Dans notre domaine si vaste, il existe de nombreuses bases de données (cf. Bases de données, notions par nahoy), et parmi ces bases, un certain nombre d'entre elles propose un service web pour accéder à leurs données à partir d'un script. Le problème principal qui peut nous freiner, ou nous faire peur, lorsque l'on se lance dans cette quête, c'est le nombre de services web dont nous devrons connaître la technologie. Ne serait-​il pas plus simple pour nous de pouvoir interroger tous ces services sans avoir à devenir des experts en services web, d'autant plus si nous sommes pris par le temps dans nos projets ?

Bioservices est un module Python se proposant de nous permettre d’accéder aux services web de nombreuses banques de données de façon programmatique.

Présentation du module Bioservices

BioServices se propose de vous permettre d'interroger les bases de données majeures en bioinformatique. Souvent ces bases de données sont accessibles via des services pouvant être basés sur les protocoles SOAP/​WSDL, ou REST. Grâce à ce module, vous pourrez vous passer, au moins en partie, de l'apprentissage de la syntaxe d'interrogation de chaque banque.

BioServices vous propose ainsi d'accèder à près de 24 bases de données. Parmi les banques qu'il est possible d'interroger vous pourrez trouver :

Exemples d'utilisations

Installation

L'installation se fait facilement depuis les dépôts de Python. Vous avez donc le choix de la commande à utiliser, sous GNU/​Linux, pour installer le module.

pip install bioservices

Ou bien vous pouvez télécharger l'archive du module depuis les dépôts et l'installer avec la commande suivante, une fois l'archive décompressée :

python setup.py install

Récupérer la liste des protéines UniProtKB avec QuickGO

QuickGO est un service web proposé par l'EBI permettant de récupérer des informations sur les Gene Ontology.

Il est possible que vous ayez un message d'avertissement vous indiquant que le module pandas n'est pas installé, vous pouvez choisir de l'installer ou non. Pour cet exemple j'ai eu le résultat escompté.

# -*- coding: utf-8 -*-

import re, sys
from bioservices import QuickGO

s = QuickGO(verbose=False)

# récupére les annotations pour l'apoptose
res = s.Annotation(goid="GO:0006915", format="tsv", \
            col="proteinDB,proteinID,goID,goName", \
            tax=9606)

# découpage dans un array
res = re.split("\n", res)

print len(res)
# 10002
# le premier élément contient l'entête
# le dernier élément est vide

proteins = []
for r in res:
    cols = re.split("\t", r)
    # afficher les lignes pour UniProtKB
    if re.match('UniProtKB', cols[0]):
        proteins.append(cols[1])
        print r

print len(proteins)
# 10000 protéines UniProtKB

sys.exit(0)

Dans cet exemple, je souhaite récupérer un tableau de 4 colonnes contenant, dans l'ordre :

  • la base de données de protéines ;
  • l'identifiant de la protéine tel qu'il est fourni par la base de données ;
  • l'identifiant GO auquel est associé la protéine ;
  • le nom du terme GO auquel est associé la protéine.

Pour chaque ligne récupérée, je ne veux garder que les protéines issues de la banque UniProtKB. Pour cela, je regarde la première colonne de chaque ligne et je n'affiche que les lignes qui m'intéressent.

Récupérer la liste des gènes d'un pathway KEGG

Dans cet exemple, je vais vous présenter comment récupérer la liste des identifiants de gènes d'un pathway KEGG et les traduire en symbole en utilisant les services KEGG et HGNC.

# -*- coding: utf-8 -*-

import sys
from bioservices import KeggParser

s = KeggParser(verbose=False)

# récupére le pathway
path = s.get("path:hsa05217")

# récupére un dictionnaire
dic = s.parse(path)

# récupére les identifiants GeneID (NCBI Gene)
genes = [x for x in dic['gene']]

# connection avec HGNC
from bioservices import HGNC
h = HGNC(verbose=False)

# pour chaque gene, afficher son symbol officiel
for g in genes:
    datas = h.mapping("EntrezGene:"+g)
    print datas[0]['xlink:title']

sys.exit(0)

Dans un premier temps, j'utilise KeggParser pour découper les informations du pathway pour récupérer la liste des identifiants des gènes.

Dans un second temps, j'utilise la méthode mapping du module HGNC pour récupérer les informations sur le gène et afficher le symbole du gène.

Récupérer des références à d'autres banques de données avec HGNC

La banque HGNC présente l'avantage de pouvoir trouver facilement des références avec des banques de données diverses et variées pour les gènes. Le module HGNC nous permet ainsi de pouvoir récupérer ces références croisées qui peuvent être utiles pour obtenir de plus amples informations.

# -*- coding: utf-8 -*-

import sys
from bioservices import HGNC

s = HGNC(verbose=False)

datas = s.get_xrefs("ORMDL3")

# parcours des clés
for key in datas.keys():
# affiche la clé et la liste des liens
    print key,":","\t".join(datas[key]["link"])

sys.exit(0)

Dans cet exemple, la clé affichée est le nom de la banque de données référencée. Pour chaque base de données, la liste des liens vers les fiches informatives est également affichée.

Interroger EUtils simplement en Python

Pour cet exemple, sachez que, par défaut, le résultat trouvé est au format XML. De plus, la documentation n'est pas encore finie pour ce module, qui est encore en cours d'implémentation.

Il s'agit d'exemples courts et simples que vous pouvez réadapter assez rapidement. Pour approfondir l'utilisation de ce module, je vous recommande vivement de lire la documentation des EUtils.

# -*- coding: utf-8 -*-

import sys
from bioservices import HGNC
h = HGNC(verbose=False)

geneid = h.get_xrefs("BRCA1")["EntrezGene"]["xkey"]
geneid = str(geneid)

from bioservices import EUtils

s = EUtils()

# récupération du résumé du gène BRCA1
ret = s.EFetch("gene", geneid, rettype="docsum")
print ret

# récupération du résumé du SNP 7535
ret = s.ESummary("snp", "7535", method="rest")
print ret

sys.exit(0)

Dans cet exemple j'utilise dans un premier temps le module HGNC pour trouver l'identifiant GeneID (NCBI EntrezGene) à partir de son symbole.

Ensuite il me suffit d'utiliser la méthode EFetch ou ESummary pour récupérer un résumé de mon gène d'intérêt.

La ligne 19 de cet exemple vous montre la syntaxe à utiliser pour récupérer un résumé au format XML en passant par le protocole REST.

Conclusion

BioServices est un module Python que j'ai découvert récemment mais qui me semble prometteur et je tenais à vous le faire découvrir également.

J'en suis encore à l'étape d'apprentissage, jonglant entre la documentation, le code source (la documentation n'est pas toujours suffisante) et mes essais, néanmoins je commence à m'amuser avec et à entrevoir différentes possibilités.

J'espère que ce billet vous aura donné envie d'essayer ce module qui mérite de se faire connaître !

Sources

Article : BioServices : a common Python package to access biological Web Services programmatically, Cokelaer et al, Bioinformatics (2013)

Documentation : vous pouvez trouver la documentation et les sources sur le site du module BioServices.


Merci à nahoy, waqueteu, Estel et nallias pour leur relecture et leurs commentaires.




Commentaires

3 réponses à “Bioservices, un module Python très utile”

  1. Merçi pour cette découverte ! Bioservices me sera d'une grande utilité !

  2. Merci pour les exemples. Just un petit mot pour mentionner qu'une des difficultés du dévelopement dans BioServices est de jongler entre les différents services et de trouver leurs documentations respectives. Nous avons essayer de fournir une documentation pertinente mais il est souvent impossible de couvrir toutes les possiblités offertes par chacun des services. Je note que la "documentation n'est pas toujours suffissante", et tacherai de la rendre plus clair. Merci encore pour le post.

    L'auteur 😉

    1. Bonjour et merci pour votre commentaire.

      J'ai pleinement conscience qu'il n'est pas facile de jongler entre les différents services, et encore moins de trouver leurs documentations ! C'est pour cela que j'ai été plus que ravie de découvrir votre module, module avec lequel je m'amuse de plus en plus sur QuickGO. Je vous remercie grandement pour ce module qui va nous faciliter la vie à n'en pas douter.
      Pour ce qui est de votre documentation, je vous souhaite un bon courage pour l'étoffer, c'est loin d'être facile et/​ou rapide à faire. Si je peux me permettre une suggestion, serait-​il possible de préciser quels modules sont utilisés lors de la récupération de certaines données ?
      En utilisant le module QuickGO pour la récupération des terms, j'ai pu remarquer que le format 'oboxml' ne retourne pas une chaîne de caractères mais un objet, j'ai d'ailleurs mis un moment à comprendre quel module était à utiliser pour manipuler cette classe.

      Je vous remercie de votre retour sur ce billet et je vous remercie également pour votre module 🙂 !

      Cordialement, Nolwenn.

Laisser un commentaire

Pour insérer du code dans vos commentaires, utilisez les balises <code> et <\code>.