(<-)

[../PubMed]

[../]

[../Alignment]

(->)

3.4 GenBank

GenBank recod format 은 sequence와 sequence 의 특성, 다른 연관된 sequence 정보에 대한 정보를 담는 매우 유명한 방법이다. 그 format 은 http://www.ncbi.nlm.nih.gov/ NCBI database로부터 정보를 얻는 좋은 방법이다.

3.4.1 NCBI 로부터 GenBank entries 의 retrieving

GenBank library 의 하나의 상당히 멋진 특징은 GenBank 로부터 entry들의 rerieval을 자동화할 수 있는 능력이다.

이것은 당신의 많은 daily work을 자동화하는 script를 만드는데 매우 편리하다. 이 예에서 우리는 어떻게 NCBI database를 query 하고, query 로부터 record 들을 retrieve 하는지 보여줄 것이다.

처음에, 우리는 query를 만들고 retrieve 할 record 의 ID를 찾기를 원한다. 여기서 우리는 내가 가장 좋아하는 organism 인 "Opuntia" 에 대한 quick search를 할 것이다.(왜냐하면 내가 그것을 가지고 일했기 때문에.) 우리는 quick search를 할 수 있고, 해당되는 record를 위해서 GI (GenBank identifiers) 로 돌아갈 수 있다.

from Bio import GenBank
gi_list = GenBank.search_for("Opuntia AND rpl16")

gi_list 는 우리의 query 에 match 되는 모든 GenBank identifiers 의 list 이다.

['6273291', '6273290', '6273289', '6273287', '6273286', '6273285', '6273284']

이제 우리는 GI 들을 가지고 있다. dictionary interface를 통해서 NCBI database를 access 하기 위해서 우리는 이것을 사용한다. 예를 들어, 처음의 GI로부터 정보를 retrieve 하기 위해서, 우리는 처음에 NCBI를 access 하는 dictionary를 create 할 것이다.

ncbi_dict = GenBank.NCBIDictionary()

이제 우리는 이것을 가지고, retrieval을 한다.

gb_record = ncbi_dict[gi_list[0]]

이 경우에, gb_recod 는 GenBank formatted record 일 것이다.

LOCUS       AF191665      902 bp    DNA             PLN       07-NOV-1999
DEFINITION  Opuntia marenae rpl16 gene; chloroplast gene for chloroplast
            product, partial intron sequence.
ACCESSION   AF191665
VERSION     AF191665.1  GI:6273291
...

이 경우에, 우리는 단지 raw record를 얻는다. 우리는 역시 이러한 record 들을 막바로 parser 로 넘겨서 parse 된 record를 돌려받을 수 있다. 예를 들어, 만약 우리가 SeqFeature objects 로 parse 된 GenBank file에서 SeqRecord object를 돌려받고 싶다면, 우리는 GenBank FeatureParser 로 dictionary를 만드는 것이 필요하다.

record_parser = GenBank.FeatureParser()
ncbi_dict = GenBank.NCBIDictionary(parser = record_parser)

이제 record를 retrieving 하는 것은 raw record 대신에 SeqRecord를 줄 것이다.

>>> gb_seqrecord = ncbi_dict[gi_list[0]]
>>> print gb_seqrecord
<Bio.SeqRecord.SeqRecord instance at 0x102f9404>

GenBank record를 parsing 할 수 있는 format 에 대한 정보는 3.4.2를 보라.

이러한 automate 된 query retrieval 기능은 손으로 하는 것에 비해 큰 plus 이다. 부가적으로, 그 retrieval 은 time-delay 와 같은 특징에서 잘 만들어져서, NCBI 로 하여금 당신에 대해서 짜증 이빠이 나서 당신의 access를 blocking 하는 것을 막아줄 것이다.

3.4.2 GenBank records 의 parsing

GenBank file 은 멋지고, 많은 정보를 갖고 있지만, 동시에 당신은 아마도 한번에 작은 양의 정보만을 추출하기를 원할 것이다. 이것을 하는 key는 information을 parsing 하는 것이다. Biopython 은 이 일을 할 수 있도록 하는 GenBank parser를 제공한다. 이제 GenBank module 은 다음의 parser를 제공한다.

RecordParser -- 이것은 raw record를 GenBank specific Record object로 parse 한다. 이 object 는 raw record 에 있는 정보를 매우 가깝게 modelling 한다. 그래서 당신이 단지 GenBank record 그 자체에 관심이 있다면 사용하기에 좋을 것이다.

FeatureParser -- 이것은 raw record를 SeqFeatures 에 나타난 feature table information 의 모든 것을 가지는 SeqRecord object로 parse 한다. (이 object 에 대한 정보는 section 3.7을 보라) 이것은 보다 standard 한 format 으로 정보를 얻는데 관심이 있다면 가장 사용하기 좋다.

어떤 쪽을 선택하건, 이것들의 가장 공통된 사용방법은 iterator를 만들고 GenBank record 들에 대한 file을 통해서 parsing 하는 것이다. 이것을 하는 것은 다른 format에서 했던 것과 매우 유사하다. 아래의 code가 보여준다.

from Bio import GenBank

gb_file = "my_file.gb"
gb_handle = open(gb_file, 'r')

feature_parser = GenBank.FeatureParser()

gb_iterator = GenBank.Iterator(gb_handle, feature_parser)

while 1:
   cur_record = gb_iterator.next()
   if cur_record is None:
       break
   # now do something with the record
   print cur_record.seq


  • <!> 역자주 : 엔트리가 Protein 일 때는 ParserPositionException: error parsing at or beyond character xxx. 이런 식의 에러가 남. 아직 Protein DB를 처리하는 기능이 없기 때문. BioPythonFaq 참조.


이것은 단지 GenBank file 에 대해서 iterate 해서, 그것을 parsing 해서 SeqRecorSeqFeature object 로 만들고 record 에 있는 sequence를 나타내는 Seq object를 print 한다.

다른 format 과 같이, GenBank record를 다루는 많은 tool을 가지고 있다. 이것은 당신이 GenBank를 가지고 하고자 하는 것은 무엇이든 가능하게 한다.

3.4.3 당신 자신의 GenBank database 만들기

당신이 할 수 있는 매우 cool 한 것 하나는 당신 자신의 personal GenBank database를 set up 하고 그것을 dictionary 처럼 access 하는 것이다. 당신이 이 local database에 network에서 BioCorba를 사용해서 access 하는 것을 허용할 수 있기 때문에 이것은 특히 멋질 수 있다.

Local database를 만드는 것은 처음에는 index file을 만드는 것을 involve 한다. 이것은 file 에 있는 어떤 record 에 대해서도 빠른 access를 허용한다. 이것을 하기 위해서 우리는 index file function을 사용한다.

>>> from Bio import GenBank
>>> dict_file = 'cor6_6.gb'
>>> index_file = 'cor6_6.idx'
>>> GenBank.index_file(dict_file, index_file)

이것은 my_index_file.idx file을 만들 것이다. 이제, 우리는 각각의 record 에 대해서 individual access를 허용하는 dictionary object를 create 하기 위해서 이 index를 이용할 수 있다.

Iterate 와 NCBIDictionary interface 와 같이, 우리는 raw records를 얻던지, dictionary를 그것들을 돌려주기 전에 parse 할 parser 로 넘길 수도 있다. 이 경우에, 우리는 FeatureParse 로 넘겨서, record를 얻는다. 그 다음에는 우리는 SeqRecord object를 retrieve 한다.

Dictionary를 set up 하는 것은 한 line 으로 쉽게 된다.

>>> gb_dict = GenBank.Dictionary(index_file, GenBank.FeatureParser())

이제 우리는 이것을 dictionary 와 같이 다룰 수 있다. 예를 들어,

>>> len(gb_dict)
7
>>> gb_dict.keys()
['L31939', 'AJ237582', 'X62281', 'AF297471', 'M81224', 'X55053']

마지막으로 우리는 subscripting을 사용해서 object를 retrieve 한다.

>>> gb_dict['AJ237582']
<Bio.SeqRecord.SeqRecord instance at 0x102fdd8c>

BioPythonTutorial/CookBook/GenBank (last edited 2011-08-03 11:00:49 by localhost)

web biohackers.net