Didacticiel :
Jouer avec l'API de KEGG

Logo de la Kyoto Encyclopedia of Genes and Genomes (KEGG), propriété intellectuelle de Kanehisa Laboratories.

Il n'est pas rare que nous ayons un jour besoin de récupérer des informations de la base de données KEGG (Kyoto Encyclopedia of Genes and Genomes). Cette base de données fournit un nombre conséquent d'informations sur les génomes et les réseaux de gènes mais également sur les voies métaboliques ou les maladies. Dans ces cas là, bien souvent, nous passons directement par le site internet à l'adresse http://www.kegg.jp/, puis nous effectuons une recherche via le moteur prévu à cet effet, et enfin nous pouvons télécharger les informations souhaitées. Mais cette façon de procéder n'est pas des plus pratiques si l'on souhaite mettre un système de pipeline dans nos laboratoires, aussi KEGG met à notre disposition une API reposant sur REST. Ça veut dire qu'il sera possible, à partir de la construction d'URL spécifiques, prévues à cet effet, d'interroger et de récupérer des informations sur différentes données d'intérêts, sans passer par les formulaires existants sur le site de KEGG. Chaque type de requête est définie comme étant une opération. Voyons comment on peut s'en sortir pour nos projets !

Attention : l'accès au site internet et à ses données est entièrement gratuit mais l'accès au serveur FTP est payant, pour permettre de financer les serveurs.

Principe de fonctionnement

Dans l'API REST de KEGG, il existe 7 opérations interfacées sur les 15 tables (plus une en développement au moment où j'écris ces lignes) et donc requérables depuis l'extérieur grâce à une suite d'arguments.

Pour chaque opération il va être possible de récupérer différents types d'informations sur les banques de données :

  1. info : affiche les informations sur la version de la base de données et également les bases de données auxquelles celle-ci est en interaction le cas échéant. Exemple : http://rest.kegg.jp/info/pathway
  2. list : fournit la liste des identifiants de la base de données ainsi que la définition associée. Exemple : http://rest.kegg.jp/list/genome
  3. find : trouve les entrées qui correspondent au mot clé recherché ou à d'autres types de données. Exemple : http://rest.kegg.jp/find/disease/melanoma
  4. get : récupère les informations dans la base de données à partir de l'identifiant fournit. Exemple : http://rest.kegg.jp/get/ds:H00038
  5. conv : convertit les identifiants KEGG en leurs identifiants provenant d'autres banques de données, comme NCBI Gene. Exemple : http://rest.kegg.jp/conv/hsa/ncbi-geneid (vous pouvez aussi les inverser !)
  6. link : récupère les entrées liées entre elles en utilisant les références croisées des banques de données. Exemple : http://rest.kegg.jp/link/hsa/ds:H00038
  7. ddi : récupèrer la liste des contre-indications et précautions à prendre dans le cadre d'interaction médicamenteuse. Exemple : http://rest.kegg.jp/ddi/D00124

Pour en savoir plus et aller plus loin, n'hésitez pas à aller faire un tour sur la documentation officielle. Vous y trouverez également plusieurs exemples d'utilisation.

Comme vous venez de le voir dans les exemples ci-dessus, il est possible de récupérer beaucoup d'informations en utilisant uniquement son navigateur internet préféré, c'est souvent un bon moyen pour trouver rapidement les données utiles. Cependant, comme vous pouvez le constater vous-même, il va très rapidement exister une limite à ne passer que par le navigateur.

Si vous souhaitez affiner au fur et à mesure votre recherche ou même l'approfondir en allant plus loin dans les données à récupérer, vous risquez de passer des heures à faire de nombreux copier-coller et retours arrière, sans compter le fait que vous voudrez certainement pouvoir récupérer les résultats sur votre ordinateur. Pour le coup, vous aurez donc le choix :

  • soit de garder votre navigateur ouvert avec un éditeur de texte dans lequel vous recopierez les informations qui vous intéressent
  • soit de faire un script pour effectuer une recherche plus efficace une fois que vous aurez schématisé votre stratégie d'acquisition de données !

Comme nous sommes sur un blog de bioinformaticiens, vous vous doutez bien que je ne peux pas m'empêcher de vous montrer un ou deux exemples de scripts ! Prêts ? C'est parti !

Récupérer la liste des gènes impliqués dans le mélanome chez l'Homme

Pour cet exemple, j'utiliserai Python (version 3++) avec la bibliothèque requests (dans les bibliothèques de base, appuyée par la documentation officielle), prévue pour les requêtes REST, afin de récupérer les données et les manipuler à ma guise. Notez que si vous ne précisez pas quel est le format de sortie que vous souhaitez récupérer, celui-ci sera par défaut en texte plat !

Étape 1 : récupérer l'identifiant du mélanome dans la base de données Disease

Pour récupérer l'identifiant du mélanome, dans la base de données Disease, j'utilise l'opération find (souvenez-vous, l'API REST de KEGG repose sur 7 opérations) :

Le résultat de sortie final est au format texte tabulé. Nous allons donc pouvoir récupérer facilement la liste des clés (ici une seule clé), en utilisant seulement les built in de Python.

Étape 2 : récupérer les identifiants des gènes humains impliqués dans le mélanome

À partir de la liste des identifiants récupérés précédemment, nous allons pouvoir récupérer la liste des identifiants des gènes humains impliqués dans le mélanome, grâce à l'opération link.

Étape 3 : récupérer les informations sur les gènes humains récupérés

Maintenant que nous avons récupéré les identifiants des gènes, nous allons pouvoir retrouver la liste de nos gènes à proprement parler ! Pour cela nous utiliserons cette fois-ci la méthode list.

Nous avons ici un résultat sur 2 colonnes :

  1. l'identifiant du gène KEGG
  2. les différents symboles connus du gène avec son nom complet juste après le point-virgule.

Récupérer la liste des pathways à partir des gènes

L'une des choses qui est sans doute celle qui nous intéresse le plus est la possibilité de récupérer la liste des pathways dans lesquels nos gènes précédents sont impliqués. Eh bien c'est tout à fait possible ! Voici comment nous pouvons procéder.

Dans un premier temps, nous utilisons l'opération link :

Ici nous n'avons récupéré que la liste des identifiants. Pour pouvoir récupérer les réseaux en eux-mêmes, nous allons utiliser l'opération get sur chaque identifiant, tout en précisant que nous voulons obtenir les images. Pour pouvoir enregistrer les images j'ai utilisé le module shutil, qui fait également partie des bibliothèques de base :

Une fois ceci fait, rendez-vous dans le répertoire où vos images ont été sauvegardées, il ne vous reste plus qu'à analyser et interpréter les résultats !

Voici l'un des réseaux que j'ai récupéré :

Réseau de la leucémie myéloïde chronique. Image fournie par KEGG

Conclusion

KEGG nous permet, grâce à son API REST, d'effectuer des requêtes simples aussi bien manuellement que programmatiquement. Dans ces petits exemples courts et somme toute classique, vous avez pu entrevoir les possibilités d'imbrications de recherches que nous pourrions faire pour faciliter notre quotidien.

Dans un précédent article, je vous avais présenté la bibliothèque Python BioServices qui permet également de faire ce genre de requête auprès de KEGG. Le but de ce billet était de vous présenter le fonctionnement de l'API sans passer par un module plus ou moins lourd. Rien ne vous empêche pour autant de combiner les deux afin de faciliter vos programmes !


Un grand merci à mes relecteurs d'amours pour leurs  remarques et suggestions : Mathurin, Yoann M.Guillaume Devailly et Kumquatum.

  • À propos de
  • Issue d'une licence de biologie cellulaire et physiopathologie et d'un master de bioinformatique, je m'intéresse tout particulièrement au monde de la recherche et au domaine de la santé. J'ai travaillé dans l'unité 946 de l'INSERM, dirigée par Florence Demenais, où mon travail principal a été l'étude et la recherche de bases de données et d'outils d'intérêt majeur pour l'axe de recherche dans lequel j'étais impliquée. J'ai aussi travaillé à l'Institut Pasteur où j'ai été recrutée en tant qu'ingénieure bioinformaticienne dans le cadre du LabEx Milieu Intérieur et où ma mission principale a été de mettre en place une base de données pour la gestion de nos échantillons biologiques. Mes centres d'intérêt en bioinformatique sont : la mise en application de méthodes dans les domaines de la génomique, de la protéomique et les interactions gène-gène protéine-protéine pouvant nous apporter des informations sur leurs influences dans les maladies. Je travaille actuellement au service informatique de l'IBENS où j'ai été recrutée en qualité de développeuse d'applications !

Un commentaire sur “Jouer avec l'API de KEGG

  1. Merci Nolwenn pour ce chouette article. Au passage, pour celles et ceux qui utilisent R, on peut noter le package KEGGREST dans Bioconductor, qui se base là-dessus et propose des interfaces sympas. http://bioconductor.org/packages/release/bioc/html/KEGGREST.html

Laisser un commentaire