DB::GenBank

Accession 番号を指定して、GenBank から自動的にダウンロードしてくるようなプログラムを書くときに、BioPerl の DB::GenBank パッケージを利用する。GenBank パッケージでは Accession 番号のみならず GI も指定できる。さらにダウンロードするファイルのフォーマットを FASTA にするか、GenBank にするかをも指定できる。

GenBankパッケージを利用したファイルのダウンロード

次は、DB::GenBankを利用したファイルのダウンロード方法。

use Bio::DB::GenBank;

# インスタンスを生成
my $gb = Bio::DB::GenBank->new;

#GenBankからデータを取得
$seq = $gb->get_Seq_by_acc('J00522');


# GenBankから取得したデータを確認
print $seq->desc , "\n";
## Mouse Ig active H-chain V-region from MOPC21, subgroup VH-II, mRNA.

print $seq->accession , "\n";
## J00522

print $seq->length , "\n";
## 408

マルチエントリーのダウンロード

複数の Accession 番号を配列にして、get_Stream_by_acc に代入すると、複数のデータを一つずつ取得してきる。

use Bio::DB::GenBank;

my $gb = Bio::DB::GenBank->new;


# 目的のデータのAccession番号を配列に保存
my $acc = ['NR_029610', 'NR_029681', 'NR_029617'];


# データをGenBankから取得
my $seqio = $gb->get_Stream_by_acc($acc);

# while文を利用して、取得したデータを1件ずつ処理
while (my $seq = $seqio->next_seq) {
   # 延期配列の長さを出力
   print "Length:", $seq->length, "\n";

}

## Length:110
## Length:100
## Length:110

ファイルに保存

GenBank から取得したデータをパソコン上に保存するとき、SeqIO の write_seq メソッドを利用して行う。

use Bio::DB::GenBank;

# ダウンロードするAccession番号
my $acc = ['NR_029610', 'NR_029681', 'NR_029617'];

my $gb = Bio::DB::GenBank->new();

my $seqio = $gb->get_Stream_by_acc($acc);

# while文を利用して、取得したデータを1件ずつ処理
while (my $seq = $seqio->next_seq) {

   print "Downloading ..." . $seq->accession . " \n";

   # 「NR_0029610.gbff」などのように保存
   my $out_io = Bio::SeqIO->new(
                    -file => '>' . $seq->accession . '.gbff',
                    -format => 'genbank'
                );
   $out_io->write_seq($seq);
}

GenBank での検索

GenBank に対して、検索語句を送信し、検索結果をダウンロードする場合は、DB::Query::GenBank パッケージを利用する。

use Bio::DB::GenBank;
use Bio::DB::Query::GenBank;

# 検索文を作成
my $query = Bio::DB::Query::GenBank->new(
              -db => 'nucleotide',
              -query => 'Arabidopsis AND EST'
            );


# ヒット数を取得
my $hit_count = $query->count;
print $hit_count . " entries\n";


# DB::GenBankを利用して検索結果をダウンロード
my $gb = Bio::DB::GenBank->new();

my $seqio = $gb->get_Stream_by_query($query);
while (my $seq = $seqio->next_seq) {
    print "Downloading ..." . $seq->accession . "\n";
    my $out_io = Bio::SeqIO->new(
                   -file => '>' . $seq->accession . '.gbff',
                   -format => 'genbank'
                 );
    $out_io->write_seq($seq);
}