バイオインフォマティクス初心者の日常

バイオインフォマティクス関連の研究・勉強などなど

NCBIの "E-utilities" が結構便利な件

NCBIの一意的な遺伝子IDであるGI numberをもとにして、FASTA配列とかGenbank形式ファイルをプログラムで自動的に取ってこれないかな~
と思っていたところ "E-utilities" という便利なサービスを発見したので、そのサービス内容(一部)と提供サービスを組み込んだPerlプログラム例を紹介します。

"E-utilities"はNCBIが提供しているサービスで、"Entrez"という検索機能を利用して、URLを使って簡単にデータの取得ができるようにしているようです。
NCBIの色々な情報を取得できるようですが、今回は遺伝子のGI numberから対応配列のFASTAGenbank形式ファイルを取得する方法だけです。

Perlプログラム例

#!/usr/bin/perl

use strict;
use warnings;
use LWP::Simple;

my @gi_ary = ("937574203", "229604949", "281306683");
my $db_type = "protein";     # 'protein' or 'nucleotide'
my $retrieve_type = "fasta"; # 'fasta' or 'gb'

my $gi_list = join ",", @gi_ary;

# Assemble the epost URL
my $base = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/';
my $url  = $base . "epost.fcgi?db=$db_type&id=$gi_list";

# Post the epost URL
my $output;
while(not defined $output){
    $output = get($url);
}
# Parse WebEnv and QueryKey
my $web = $1 if ($output =~ /<WebEnv>(\S+)<\/WebEnv>/);
my $key = $1 if ($output =~ /<QueryKey>(\d+)<\/QueryKey>/);
	
# Assemble the efetch URL
$url  = $base . "efetch.fcgi?db=$db_type&query_key=$key&WebEnv=$web";
$url .= "&rettype=$retrieve_type&retmode=text";
	
# Post the efetch URL
my $data;
while(not defined $data){
    $data = get($url);
}
# Output data
print $data;

このプログラムを実行すると、@gi_aryに含まれる"937574203", "229604949", "281306683"の各GI numberのタンパク質FASTAファイルを出力します。
$db_typeでGI numberに対応する配列情報 ('protein' or 'nucleotide')
$retrieve_typeで出力するファイルの形式 ('fasta' or 'genbank') を決定します。

この情報を基にして、"E-utilitiez"のepost機能でデータ検索情報の取得、efetch機能でepostの検索情報から対象データの取得をしています。
最近は、このようにURLを介して簡易的にデータをやり取りする方法が増えているみたいですね。

結構便利なので、これから研究でプログラムを作るときに使えそう。
興味がある方はぜひお試しを(^^)