いももちのきもち

悪戦苦闘の歴史のメモ

WormBase RESTful APIを使って好きな情報を取得する

【線虫研究者向け・プログラミング初心者向け】
生物系のデータベースにはいろいろありますが、今日は線虫に特化したWormBaseというデータベースの便利な使い方について、特にRESTful APIとプログラミングを利用して自分が欲しい情報を取得する方法について日本語で紹介します。
WormBase : Nematode Information Resource

WormBase開発者向けページを利用したい状況とは

WormBaseのたくさんのボタンが並んだ画面は、人間には見やすくていいかもしれませんが、たとえば:

・全部の遺伝子について、発現場所と出典のリストを得る
・すべてのwild isolateについて、それぞれの系統で登録されているSNP数のリストを得る
・あるStrainのSNPの野生型/変異型の塩基とその左右配列のリストを得る

など、特に複数のページにわたる内容を収集するのには適していません。
こういったタスクを行うためにプログラムを書きました:
github.com

上記のページのプログラムは、WormBaseの開発者用のページを利用しました。上記のプログラムを書いている間に気が付いたことについて記録していきたいと思います。

WormBaseの開発者向けページの仕様について

WormBaseに登録されている各項目の情報に一意なアドレスが割り振られているページが存在します。たとえばdaf-2のページ、ではなくdaf-2の変異情報を文字だけで表示するためだけのアドレスが存在します(このように情報を提示するやり方として、項目ごとに一意のアドレスを割り振る方法をRESTfulなAPIを持っているといいます)。WormBaseではSNPや遺伝子などあらゆる項目に種類ごとの通し番号が付与されて同じように管理されています。

このプログラマ向けページは基本的には文字情報のみが登録されており、プログラミング時に情報が抽出しやすい形になっています。
他の利点として、たとえばあらゆるSNPの情報を得たい!と思ってWormBaseに大量にアクセスしたときに、文字情報だけでデータが軽いのでデータの送受信時間を減らすことができます。

例1:SNP番号がWBVar00078960のものについて

  • 通常の画面のアドレス

http://www.wormbase.org/species/c_elegans/variation/WBVar00078960

  • RESTful APIからアクセスしたときのアドレス(特に塩基の情報について)

http://api.wormbase.org/rest/field/variation/WBVar00078960/nucleotide_change
※ただし、Content-Type:application/json でGETメソッドでアクセスする(後述)。

上記RESTful APIからアクセスした場合のレスポンスは以下のようなjson形式のファイルになります(json形式以外にXML, HTML, YAML, TXT, 一部PDFでもレスポンスを得ることができます)。

{
    "nucleotide_change": {
        "data": [1]
            0:  {
                "wildtype_label": "wild type"
                "mutant_label": "variant"
                "mutant": "G"
                "type": "Substitution"
                "wildtype": "A"
            }
        "description": "raw nucleotide changes for this variation"
    }
    "name": "WBVar00078960"
    "class": "variation"
    "uri": "/species/variation/WBVar00078960"
}

上記のWBVar00078960/nucleotide_changeのレスポンスは大きく4つの項目が登録されています。

  • nucleotide_change
  • name
  • class
  • uri

今回の場合は1つ目のnucleotide_changeの項目の情報が最も重要です。これによると、wildtype(N2)ではアデニン(A)だったところが、このSNPをもつStrainではグアニン(G)に変異していることがわかります。

このSNPについて他にも詳しく知りたい場合はnucleotide_change以外の指定をすることができます。
例:

  • WBVar00078960/genomic_position :ゲノム上の物理的位置、染色体情報含む
  • WBVar00078960/genetic_position :(あれば)遺伝学的位置(cM)
  • WBVar00078960/flanking_sequences :このSNPの左側と右側の数十~数百塩基(登録の長さはSNPによる)
  • WBVar00078960/strains :このSNPをもつ系統一覧

など

このSNPの、さらに他の項目について情報を取得したい場合は以下のページをご覧ください。項目数はたくさんありますが必ずしもすべての内容がきちんと登録されているわけではありません。
Variation - WormBase : Nematode Information Resource

例2:ttx-3遺伝子の発現場所の取得について

遺伝子には一意なgene IDが付与されています。ttx-3のgene IDはWBGene00006654です。

  • RESTful APIからアクセスしたときのアドレス(特に発現場所の情報について)

http://www.wormbase.org/rest/widget/gene/WBGene00006654/expression
※ただし、Content-Type:application/json でGETメソッドでアクセスする(後述)。

一部略
5:  {
    "expressed_in": [2]
        0:  {
            "id": "WBbt:0003961"
            "label": "AIYR"
            "class": "anatomy_term"
            "taxonomy": "all"
        }
        1:  {
        "id": "WBbt:0003963"
        "label": "AIYL"
        "class": "anatomy_term"
        "taxonomy": "all"
        }
    
    "description": {
        "text": "Expressed in AIY neurons."
        "evidence": {
            "Reference": {
                "id": "WBPaper00031565"
                "label": " Jiang, Shi, Amin, Sultan, & Liu, 2008"
                "class": "paper"
                "taxonomy": "all"
            }
        }
    }
一部略

ここに例示したのはttx-3遺伝子の発現場所としてAIYRとAIYLの2つの細胞しか挙げてない論文の例です。実際には発現場所は報告されている論文ごとに異なるので、複数セットの発現情報が登録されている遺伝子が多いですね。他の情報が欲しい場合は以下のような指定をします。
例:

  • WBGene00006654/genetics : 変異体のアリル名、そのアリルを持つストレイン名など
  • WBGene00006654/phenotype : 表現型とその出典など
  • WBGene00006654/reagents : ttx-3が使われているプラスミド情報など

もしもgene ID一覧が欲しい場合はWormBase > Gene のこちらのページからダウンロードできます。
この遺伝子の、さらに他の項目について情報を取得したい場合は以下のページをご覧ください。
Gene - WormBase : Nematode Information Resource



※注意
RESTful APIで提供される情報は、基本的には通常のアクセスで提供されるページの情報と同じですが、連動していないようなので、必ずしも最新版がリンクされているとは限りません。通常のアクセスで提供されるページの方が最新のことが多いようです。

WormBaseが提供する情報について、詳しく知りたい方は以下のページをご覧ください。
For Developers
Api-rest - WormBase : Nematode Information Resource



具体的にjson形式でレスポンスを得る方法については、長くなったので次回の記事にします。
※2016/1/16追記
toricor.hatenablog.com