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

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

NCBIの遺伝子IDであるGI numberが2016年9月より段階的に廃止

参考記事: NCBI is phasing out sequence GIs - use Accession.Version instead!

タイトル通りNCBIの遺伝子IDとして長く利用されてきたGI numberが2016年9月より段階的に廃止されていくらしい。今後は以前よりGI numberと混在していたAccession numberがNCBIの遺伝子IDとして主に利用されていくようです。
前々から同じ遺伝子配列に対して2つの遺伝子IDが付加されているのは少し煩わしいなと感じていたので、新しく始める人にはわかりやすくなりそう。昔からやってる人にとっては若干の記述の変更のせいでプログラムの書き直しをする必要があったり面倒なこともあるかも。。。

たまに必要になりそうだったので、GI numberからAccession numberに自動変換するPerlスクリプトを書いてみた。

GI numberからAccession numberへ変換するプログラム(gi2acc.pl)

#!/usr/bin/perl

# Command usage:
#   $ perl gi2acc.pl [$gi_infile] [$acc_outfile]
#
# Function:
#   Convert "gi number" => "accession number"
#

use strict;
use warnings;

use LWP::Simple;

my ($gi_infile, $acc_outfile) = @ARGV;
gi2acc($gi_infile, $acc_outfile);

sub gi2acc{
	my ($gi_infile, $acc_outfile) = @_;

	my @gi_ary;
	open(FILE,$gi_infile);
	while(<FILE>){ chomp;
		push @gi_ary, $_ unless($_ eq "");
	}
	close(FILE);

	my $acc_outinfo;
	while(@gi_ary != 0){
		my @limit_gi;
		# 500 is restricted number per one submission
		for(my $i = 0; $i < 500; ++$i){
			my $gi = shift @gi_ary;
			push @limit_gi, $gi if($gi);
		}
		$acc_outinfo .= get("http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=protein&rettype=acc&id=". join(",",@limit_gi));
	}

	open(NEW,">$acc_outfile");
	print NEW $acc_outinfo;
	close(NEW);
}

プログラム実行例

$ perl gi2acc.pl ncbi_gi.txt ncbi_acc.txt

下記のような、GI numberが記述されたファイル(ncbi_gi.txt)を読み込んで、対応するAccession numberが記述されたファイル(ncbi_acc.txt)を出力する。

ncbi_gi.txt

1024336731
1024336729
1024336727
1024336725
1024336723

ncbi_acc.txt

NP_001311272.1
NP_001311286.1
NP_001311302.1
NP_001311298.1
NP_001311292.1