본문 바로가기
생물정보학/Biopython (바이오파이썬)

[바이오파이썬] 4.3.2 SeqFeature 의 position, location

by HanJoohyun 2018. 5. 24.
반응형

 

 


 

안녕하세요 한주현입니다.


오늘은 SeqFeature 에서 Position 과 Location 에 대하여 알아보겠습니다.





목표


이전 포스팅에서 SeqFeature 객체에 대해 배워봤습니다.


http://korbillgates.tistory.com/141


오늘은 SeqFeature에서 위치를 나타내는 position과 location에 대해 알아보겠습니다.




준비물


실습에 사용할 파일입니다 ㅎㅎ


https://raw.githubusercontent.com/biopython/biopython/master/Tests/GenBank/NC_005816.gb


다운 받아 주세요




Position과 Location


SeqFeature 객체에서 영역을 설명하는 방식에는 두 가지가 있습니다.


Position 은 한 지점의 영역을 표시합니다. 예를 들어, 5, 20, <100, >200 등이 있습니다.


Location 은 두 지점으로 영역을 표시합니다. 예를 들어 처음과 끝의 지점을 지정해서 그 사이의 영역을 표시하는 것 이지요.


정의만 보면 무슨 말 인지 알기 어려우니 코드로 한 번 보죠.



명확한 position 으로 location 만들기


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from Bio import SeqFeature
 
start_pos = SeqFeature.ExactPosition(15)
end_pos = SeqFeature.ExactPosition(20)
my_location = SeqFeature.FeatureLocation(start_pos, end_pos)
 
print("명확한 position으로 location을 만들 수 있습니다.")
print("Position example: ", start_pos)
print("Position example: ", end_pos)
print("Location example: ", my_location)
 
 
## 출력 결과
# 명확한 position으로 location을 만들 수 있습니다.
# Position example:  15
# Position example:  20
# Location example:  [15:20]
 
cs


SeqFeature의 ExactPosition 메서드로 명확한 position을 찍어 줄 수 있습니다.




불분명한 position 으로 location 만들기


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from Bio import SeqFeature
 
start_pos = SeqFeature.AfterPosition(5)
end_pos = SeqFeature.BetweenPosition(10, left=8, right=10)
my_location = SeqFeature.FeatureLocation(start_pos, end_pos)
 
print("불분명한 position으로 location을 만들 수 있으며..")
print("Position example (5 이후의 position): ", start_pos)
print("Position example (8 과 10 사이의 position): ", end_pos)
print("Location example: ", my_location)
 
 
## 출력 결과
# 불분명한 position으로 location을 만들 수 있으며..
# Position example (5 이후의 position):  >5
# Position example (8 과 10 사이의 position):  (8^10)
# Location example:  [>5:(8^10)]
 
cs



SeqFeature의 AfterPosition 메서드나 BetweenPosition 메서드와 같이 명확하지는 않지만 불분명하게 position을 찍어 줄 수 있습니다.


표기법이 특이하게 생겼네요 ㅎㅎ








GenBank 에서 Position 이 포함된 Feature 골라내기


Record 객체의 Feature 에서 우리가 원하는 Position 만 골라 낼 수 있습니다.


이번 예제에서는 4350 position 을 포함한 Feature 를 골라 낼 겁니다. 


우선 genbank 파일 내부가 어떻게 생겼는지 보죠. ㅎㅎ



genbank 파일 내부 모습



FEATURES 가 보이시나요?


그 아래 source 나 repeat_region, gene, CDS 등이 나열 되어 있으며,


그 옆에는 1..9609, 1..1954, 87..1109 등과 같이 location 정보들이 있습니다.


여기서 우리가 원하는 position 이 포함된 Feature 를 골라보는게 목표입니다 ㅎㅎ



1
2
3
4
5
6
7
8
9
10
11
12
from Bio import SeqIO
my_snp = 4350
record = SeqIO.read("NC_005816.gb","genbank")
for feature in record.features:
    if my_snp in feature:
        print("%s %s" % (feature.type, feature.qualifiers.get('db_xref')))
        
## 출력 결과
# source ['taxon:229193']
# gene ['GeneID:2767712']
# CDS ['GI:45478716', 'GeneID:2767712']
 
cs


SeqIO.read 로 genbank 파일을 읽어 생성된 Record 객체에서


feature가 담긴 features 리스트를 for문으로 접근하여 


원하는 정보들을 출력해보았습니다.


어렵지 않죠? ㅎㅎ





SeqFeature, FeatureLocation 으로 실제 서열 가져오기


눈치 채셨겠지만 SeqFeature 객체는 위치 정보를 가지고 있으며 실제 서열은 가지고 있지 않습니다.


그래서 우리는 위치 정보를 가지고 실제 서열에서 서열을 가져와 보겠습니다.


예를 들어 다음 15bp 의 서열에서 2:7 까지 서열을 가지고 와본다고 해보죠.


GenBank/EMBL의 표기법은 1-base counting 이니 (3..7) 이 되겠군요... ㅎㅎ



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from Bio.Seq import Seq
from Bio.SeqFeature import SeqFeature, FeatureLocation
 
## 부모 서열 Seq 객체를 생성합니다
parent = Seq("ACCGAGACGGCAAAG")
 
## SeqFeature 객체를 만들면서 위치와 strand 정보를 넣습니다.
## strand가 -1 이면 상보서열을 의미합니다.
feature = SeqFeature(FeatureLocation(27), type="gene", strand=1)
 
## Parent 에서 서열을 가져올 때는 두 가지 방법이 있습니다
## 1) Seq 객체에서 문자열 슬라이싱 하듯 슬라이싱하기
feature_seq = parent[feature.location.start:feature.location.end]
print(feature_seq) ## CGAGA
 
## 2) SeqFeature 객체에서 extract 메서드 사용하기
feature_seq = feature.extract(parent)
print(feature_seq) ## CGAGA
cs


이렇게 두 가지 방법으로 부모 서열(원 서열) 로 부터 서열을 가져와봤습니다.





오늘은 Biopython에서 SeqFeature 객체의 position, location 에 대해 알아보았습니다.


부디 여러분들께 도움되셨음 좋겠네요

 

그럼 다음 시간에 만나요 ~~~~

 

 

 


반응형

댓글