Data Science/Bioinformatics with Biopython

7. Chapter5. Sequence Record object

HJChung 2020. 3. 15. 01:04

 

 

 

 

 

Sequence record 객체

 

이번 장에서는 Sequence record 객체의 속성에 대해 알아보고 FASTA파일과 GenBank파일을 읽어 SeqRecord객체를 만들어보도록 합니다.

 

1. SeqRecord 객체

SeqRecord(Sequence recod) 객체는 Chapter4에서 학습한 Seq객체에 추가적인 정보를 넣을 수 있는 객체입니다. 단순히 서열만 다룬다면 Seq객체를 사용하면 지만 서열 외에 서열의 이름, NCBI의 ID 등과 같이 추가적인 정보들을 한 객체 안에 넣어야 한다면 SeqRecord를 사용하는 것이 바람직합니다.

 

1) SeqRecord 객체 생성 방법 1. 문자열(Seq객체)로부터 SeqRecord 객체 만들기

In [1]:
#1. Seq 객체에서 SeqRecord 객체 생성하기
from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord

#먼저 Sequence 객체를 만듭니다. 
my_seq = Seq("ACGT")
#SeqRecord 객체를 만듭니다. 
my_seqRecord = SeqRecord(my_seq)

print(my_seqRecord)
 
ID: <unknown id>
Name: <unknown name>
Description: <unknown description>
Number of features: 0
Seq('ACGT')
 

Sequence객체만 넣어서 SeqRecord객체를 만들었기 때문에 Seq을 제외한 나머지 속성들은 unknown으로 표기 된 것입니다. 이제 각 속성에 정보를 대입하는 것을 해봅니다.

In [2]:
#2. SeqRecord 객체생성시 초기값 넣기
my_seq = Seq("ATGC")
my_seqRecord = SeqRecord(my_seq, id= "NC_1111", name= "Test") #SeqRecord친 뒤 shift+tab누르면 대입할 수 있는 속성값 정보가 나옵니다. 

print(my_seqRecord)
 
ID: NC_1111
Name: Test
Description: <unknown description>
Number of features: 0
Seq('ATGC')
 

SeqRecord(

seq, 서열을 의미
id= Locus와 같은 ID를 의미
name= 서열의 이름을 의미하며 유전자 이름과 같은 것이 들어갈 수도 있다. 
description= 추가 설명
dbxrefs= 추가 데이터베이스가 있다면 내용이 들어간다. 
features= 서열 구간에 대한 특징이 들어간다. 
annotations= 추가 설명이 파이썬 사전형 형태로 넣을 수 있다. 
letter_annotations= 파이썬 사전형 형태로 사용자가 추가 설명을 키-값 싸응로 넣을 수 있다. 

)

In [3]:
#3. 각 속성값에 접근하기  : dot notation을 사용하면 됩니다. 

my_seqRecord.name = "another Test"
print(my_seqRecord)
 
ID: NC_1111
Name: another Test
Description: <unknown description>
Number of features: 0
Seq('ATGC')
 

2) SeqRecord 객체 생성 방법 2. FASTA 파일로부터 SeqRecord 객체 만들기

In [4]:
#4. FASTA파일에서 SeqRecord 객체 생성하기

#먼저 FASTA파일을 읽어 SeqRecord객체로 만들기 위해 바이오파이썬의 SeqIO.read()메서드를 사용합니다. 
#SeqIO.read(파일, 파일 종류) 

from Bio import SeqIO

my_FASTA = SeqIO.read("NC_005816.fna", "fasta")
print(type(my_FASTA))
print(my_FASTA)
 
<class 'Bio.SeqRecord.SeqRecord'>
ID: gi|45478711|ref|NC_005816.1|
Name: gi|45478711|ref|NC_005816.1|
Description: gi|45478711|ref|NC_005816.1| Yersinia pestis biovar Microtus str. 91001 plasmid pPCP1, complete sequence
Number of features: 0
Seq('TGTAACGAACGGTGCAATAGTGATCCACACCCAACGCCTGAAATCAGATCCAGG...CTG', SingleLetterAlphabet())
 

3) SeqRecord 객체 생성 방법 3. GenBank 파일로부터 SeqRecord 객체 만들기

In [5]:
#5. GenBank파일에서 SeqRecord 객체 생성하기
from Bio import SeqIO

my_genbank = SeqIO.read("NC_005816.gb", "genbank")
print(type(my_genbank))
print(my_genbank)
 
<class 'Bio.SeqRecord.SeqRecord'>
ID: NC_005816.1
Name: NC_005816
Description: Yersinia pestis biovar Microtus str. 91001 plasmid pPCP1, complete sequence
Database cross-references: Project:58037
Number of features: 41
/molecule_type=DNA
/topology=circular
/data_file_division=BCT
/date=21-JUL-2008
/accessions=['NC_005816']
/sequence_version=1
/gi=45478711
/keywords=['']
/source=Yersinia pestis biovar Microtus str. 91001
/organism=Yersinia pestis biovar Microtus str. 91001
/taxonomy=['Bacteria', 'Proteobacteria', 'Gammaproteobacteria', 'Enterobacteriales', 'Enterobacteriaceae', 'Yersinia']
/references=[Reference(title='Genetics of metabolic variations between Yersinia pestis biovars and the proposal of a new biovar, microtus', ...), Reference(title='Complete genome sequence of Yersinia pestis strain 91001, an isolate avirulent to humans', ...), Reference(title='Direct Submission', ...), Reference(title='Direct Submission', ...)]
/comment=PROVISIONAL REFSEQ: This record has not yet been subject to final
NCBI review. The reference sequence was derived from AE017046.
COMPLETENESS: full length.
Seq('TGTAACGAACGGTGCAATAGTGATCCACACCCAACGCCTGAAATCAGATCCAGG...CTG', IUPACAmbiguousDNA())
 

그 외에도 biopython에서 지원하는 파일 형식 목록은 http://www.biopython.org/wiki/SeqIO#file-formats

출처: https://korbillgates.tistory.com/89 [생물정보학자의 블로그]

 

2. SeqRecord 객체 간 비교하기

SeqRecord 자체를 통째로 비교연산자를 사용해서 비교하면 NotImplementedError가 발생한다. 즉, SeqRecord의 각 속성을 비교해야 한다.

In [6]:
#6. SeqRecord 객체 간 속성 비교
from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord

seq1 = Seq("ACGT")
record1 = SeqRecord(seq1)

seq2 = Seq("ACGT")
record2 = SeqRecord(seq2)

print(record1.seq == record2.seq)
 
True