(<-)

[../SubstitutionMatrix]

[../]

[../Classification]

(->)

3.7 보다 진보된 Sequence Classes -- Sequence IDs 와 Features

당신은 section 2.2에서 기본적인 Biopython sequence class 에 대한 모든 것을 읽었다. 이것은 sequence 만을 가지고 많은 유용한 것들을 어떻게 하는지를 기술하였다. 그러나 많은 경우에 sequence 들은 그것들과 연관된 많은 중요한 부가적 특성을 가진다. 이 section 은 어떻게 Biopython 이 이러한 높은 수준의 sequence 의 description을 다루는지를 기술한다.

3.7.1 Sequence ids 와 Descriptions -- SeqRecord 로 다루기

즉각적으로 위의 Sequence class 는 Bio.SeqRecord module 에 정의된 SeqRecord class 이다. 이 class 는 id 와 sequence 와 연관된 특징 같은 보다 높은 수준의 특징들을 허용한다. Class 그 자체는 매우 간단하고, 아래의 정보를 attribute 로 제공한다.

>>> from Bio.Seq import Seq
>>> simple_seq = Seq("GATC")
>>> from Bio.SeqRecord import SeqRecord
>>> simple_seq_r = SeqRecord(simple_seq)

부가적으로, 당신은 id, name 과 description을 initialization function 에 넘겨줄 수 있다. 그러나 만약 그렇지 않으면, 그것들은 unknown 상태를 지칭하는 string 으로 될 것이고, 그 결과로 수정될 수 있을 것이다.

>>> simple_seq_r.id
'<unknown id>'
>>> simple_seq_r.id = 'AC12345'
>>> simple_seq_r.description = 'My little made up sequence I wish I could write a paper about and submit to GenBank'
>>> print simple_seq_r.description
My little made up sequence I wish I could write a paper about and submit to GenBank
>>> simple_seq_r.seq
Seq('GATC', Alphabet())

Annotation을 더하는 것은 거의 똑같이 쉽고, 단지, 직접적으로 annotation dictionary를 다루는 것을 수반한다.

>>> simple_seq_r.annotations['evidence'] = 'None. I just made it up.'
>>> print simple_seq_r.annotations
{'evidence': 'None. I just made it up.'}

저것은 그것에 대한 모든 것이다. (That's just about all there is to it!) 다음에는, 당신은 sequence 에 대한 정보를 나타내는 부가적인 구조적 방법을 제공하는 SeqFeature 에 대해서 배우기를 원할 수도 있다.

3.7.2 Features 와 Annotations -- SeqFeatures

Sequence의 features 는 sequence를 기술하는 필수적인 부분이다. 한번 당신이 sequence 그 자체를 넘어서는 것을 얻었다면, 당신은 sequence 에 대해서 알려진 보다 "추상적"인 정보를 쉽게 얻고 조직하는 어떤 방법을 필요로 한다. 모든 것을 cover 하는 general sequence feature class를 개발하는 것은 아마도 불가능한 반면, Biopython SeqFeature class 는 sequence 에 대한 정보를 가능한한 많이 encapsulate 하고자 한다.

그 디자인은 많은 부분이 GenBank/EMBL feature tables에 기반하고 있다. 그래서 만약 당신이 그들이 어떻게 보이는지를 이해한다면, 당신은 아마도 Biopython class 의 구조를 이해하는데 보다 쉬울 것이다.

3.7.2.1 SeqFeature 그 자체

Sequence feature를 다루는 첫 번째 level 은 SeqFeature class 그 자체이다. 이 class 는 몇 개의 attribute를 가진다. 그래서 처음에 우리는 그들과 그들의 일반적인 특성을 열거하고, 그 다음에 real life example 인 GenBank feature table 에 어떻게 적용하는지를 보여주는 예를 해 볼 것이다. SeqFeature 의 attribute 는 다음과 같다.

     mRNA            complement(join(<49223..49300,49780..>50208))
                     /gene="F28B23.12"

SeqFeature 의 가장 쉬운 attribute을 처음으로 보기 위해서, 만약 당신이 이를 위한 SeqFeature object를 가졌다고 한다면, 그것을 mRNA type에, strand -1 (상보적), external databases 에 대한 reference 가 없기 때문에 ref 와 ref_db는 None 이라 한다. 이 SeqFeature 에 대한 qualifier 는 {'gene' : 'F28B23.12'} 와 같이 보이는 python dictionary 이다.

이제, location line에서 'join' 이 어떻게 다루어지는지에 대한 보다 교묘한 부분을 보도록 하자. 처음에, top level SeqFeature의 location (지금 바로 다룰 것) 은 '<49223' 로부터 '>50208' 로 가는 것으로 설정된다. (이와 같은 애매한 location 들이 어떻게 다루어지는지에 대해서 section 3.7.2.2를 보라.) 그래서 Top level object 의 location 은 feature 의 entire span 이다. 그렇다면, 당신은 어떻게 'join'에서 정보를 얻는가? 그것이 sub_feature 가 관여하는 곳이다.

Sub_feature attribute 은 두 개의 SeqFeature object를 그 안에 있는 list를 가진다. 그리고, 이것들은 join에서의 정보를 포함한다. 첫 번째 sub_feature 인 top_level_feature.sub_features[0]을 보도록 하자. 이 object 는 'mRNA_join,' -1 의 strand (부모 SeqFeature 로부터 물려받음), '<49223'에서 '49300'로 가는 location을 가진 SeqFeature object 이다.

그래서, sub_feature 는 당신으로 하여금 원한다면 internal information을 얻도록 하거나, (예를 들어, 만약 당신이 genomic sequence 로부터 exon 만을 얻기를 원할 때) 단지 넓은 그림을 다룰 수 있도록 허용한다. (예를 들어, 당신이 단지 한 region 에 있는 gene 의 coding sequence를 알기를 원할 때) 다행히도 이 구조화는 가끔 SeqFeature 에 포함될 수 있는 복잡한 정보를 얻는 것을 쉽고 직관적으로 만든다.

3.7.2.2 Locations

SeqFeature 에 대한 위의 section에서, 우리는 location을 다루는 Feature 의 더 어려운 부분의 하나를 건너뛰었다. 이것이 어려울 수 있는 이유는 location 의 position 의 애매함 때문이다. 우리가 이 모든 것으로 들어가기 전에, 이에 대해서 얘기할 때 사용할 용어를 정의하기로 하자. 기본적으로 우리가 쓸 두가지 용어가 있다.

때때로 나는 이 두 개 사이에 헷갈리기 때문에 언급하였다.

Location을 다루는데에 있어서의 문제는 그들 자체의 position 에 있다. 생물학에 있어서 많은 경우에 완전히 분명한 것이 없다. (우리 wet lab 생물학자가 그것들을 확실하게 하려고 노력하는 만큼) 예를 들어, 당신은 dinucleotide priming 실험을 하여, 두 site 중의 하나에서 mRNA transcript 의 start 가 시작하는 것을 발견했을 수도 있다. 이것은 매우 유용한 정보이지만, 문제는 어떻게 이것을 position 으로 표현하는가에 있다. 우리가 이것을 처리할 수 있도록 돕기 위해서, 우리는 fuzzy position 의 개념을 가지고 있다. 기본적으로 5가지 타입의 fuzzy position 이 있다. 그래서 우리는 그것들을 다룰 5개의 class를 가진다.

이제 우리는 우리가 처리할 수 있는 모든 종류의 fuzzy position을 가졌고, 실제로 한 sequence에서 location을 정할 준비가 되었다. 이것은 FeatureLocation class 에 의해 다루어진다. 이 타입의 object 는 기본적으로 단지 잠재적인 fuzzy start 와 한 feature 의 end position을 가진다. Position을 생성하고 그것들을 pass 함으로써 당신은 FeatureLocation object를 생성할 수 있다.

>>> from Bio import SeqFeature
>>> start_pos = SeqFeature.AfterPosition(5)
>>> end_pos = SeqFeature.BetweenPosition(8, 9)
>>> my_location = SeqFeature.FeatureLocation(start_pos, end_pos)

만약 당신이 FeatureLocation object 를 출력한다면, 당신은 정보를 멋진 형태로 얻을 수 있다.

>>> print my_location
(>5..(8^9))

우리는 fuzzy start 와 end position을 location 의 start 와 end attribute를 사용함으로써 access 할 수 있다.

>>> my_location.start
<Bio.SeqFeature.AfterPosition instance at 0x101d7164>
>>> print my_location.start
>5
>>> print my_location.end
(8^9)

만약 당신이 fuzzy position을 다루기를 원치 않고, 단지 numbers를 원한다면, 당신은 단지 location 의 nofuzzy_start 와 nofuzzy_end attribute를 요청하면 된다.

>>> my_location.nofuzzy_start 
5
>>> my_location.nofuzzy_end
8

이것이 당신에게 fuzzy location 의 position attrubute를 돌려줌을 주목하라.

유사하게, fuzzy position 에 대해 걱정하지 않고 position을 생성하는 것을 쉽게 하기 위해서, 당신은 단지 number 들을 FeaturePosition constructor 에 pass 할 수 있고, 당신은 ExactPosition object를 돌려받을 것이다.

>>> exact_location = SeqFeature.FeatureLocation(5, 8)
>>> print exact_location
(5..8)
>>> exact_location.start
<Bio.SeqFeature.ExactPosition instance at 0x101dcab4>

이것이 Biopython에서 fuzzy position을 처리하는데 대한 모든 것이다. 그것은 이렇게 디자인되어서, fuzziness를 다루는 것이 exact position을 다루는 것보다 그렇게 더 복잡하지는 않다. 그리고 당신이 그것이 사실인 것을 발견하길 바란다!

3.7.2.3 References

또다른 일반적인 sequence 에 관련된 annotation 은 journal 이나 다른 sequence를 다루는 출판된 자료에 대한 reference 이다. 우리는 Biopython에서 Reference를 표현하는 아주 간단한 방법을 가지고 있다. -- 우리는 object 의 attribute 로서 reference 에 대한 관련된 정보를 저장한Bio.SeqFeature.Reference class를 가지고 있다.

그 attribute 는 당신이 journal, title, author 와 같은 reference에서 볼 것으로 예상되는 것들을 포함한다. 게다가 그것은 medline_id 와 pubmed_id, reference 에 대한 comment를 가질 수 있다. 이것들은 모두 object 의 attribute 로서 쉽게 access 되어진다.

하나의 reference 는 역시 location object를 가져서, 그것은 reference 가 참조하는 sequence에서 특정한 location을 정할 수 있다. 예를 들어, 당신은 BAC 에 위치한 특정 gene을 다루고 있는 journal을 가지고 있을 수 있다. 그리고 그것이 이 position을 정확히 참조하는지를 명시하길 원한다. Location 은 section 3.7.2.2 에 기술된 것과 같이 잠재적으로 fuzzy location 이다.

저것이 그에 대한 전부이다. Reference 는 다루기 쉬울 것이고, 많은 사용례들을 cover 하기에 충분한 만큼 일반적일 것이다.

BioPythonTutorial/CookBook/SequenceClass (last edited 2011-08-03 11:01:10 by localhost)