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 :
- KEGG, la Kyoto Encyclopedia of Genes and Genomes, la référence pour les réseaux métaboliques ;
- EUtils, l'outil fourni par Entrez du NCBI pour interroger leurs bases de données, vous pouvez voir un exemple d'utilisation sans ce module en lisant l'article Récupérer la fiche d'un gène avec les Eutils du NCBI ;
- QuickGO, le service internet créé par l'EBI qui vous permet de trouver les gènes d'une ontologie. Pour en savoir plus sur les ontologies, je vous invite à lire l'article Introduction aux ontologies de frvallee.
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.
1 |
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 :
1 |
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é.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# -*- 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# -*- 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# -*- 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# -*- 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.
Laisser un commentaire