비둘기 둥지

[생물정보학 / python] 2.biopython - SeqRecord 객체, 다양한 데이터 포맷 조작 본문

생물 정보학/python

[생물정보학 / python] 2.biopython - SeqRecord 객체, 다양한 데이터 포맷 조작

KimDove 2022. 4. 10. 21:47
728x90

0. 들어가기 전

## 없어도 되는 씨잘데기 없는 함수

## 아래 반복문을 통해 나온 결과들을 예쁘게 나오도록하는 씨잘데기 없는 함수
def string_decoration(string, num = 80, idx=1):
    decorated_string = f'{"-"*num}\n{string}\n{"-"*num}' if idx == 1 else f'{string} \n{"-"*num}'
    print(decorated_string)

string_decoration('아아 함수 테스트')
string_decoration('잘 나옵니까', idx=2)

## 출력 결과
--------------------------------------------------------------------------------
아아 함수 테스트
--------------------------------------------------------------------------------
잘 나옵니까 
--------------------------------------------------------------------------------

1. SeqRecord 객체

  • biopython의 Seq 객체에 서열 뿐만 아니라, 서열의 이름, NCBI의 ID 등 정보들이 들어있는 객체
  • 서열 정보를 제외한 다른 정보는 기본값으로 unknown이 들어간다. (서열 정보는 반드시 들어가야 한다.)
속성 이름 설명
seq 서열을 의미한다
id Locus와 같은 ID를 의미한다
name 서열의 이름을 의미하며 유전자 이름과 같은 것이 들어갈 수도 있다.
description 추가 설명이 들어간다.
letter_annotation 파이썬 딕셔너리 형으로 사용자가 추가 설명을 넣을 수 있다.
annotations 추가 설명이 파이썬 딕셔너리 형으로 들어있다.
features 서열 구간에 대한 특징이 들어간다.
dbxrefs 추가 db가 있다면 내용이 들어간다.
from Bio.SeqRecord import SeqRecord
from Bio.Seq import Seq

dummy_seq = Seq('AGTAAGGGTTAGGAATA')
dummy_seq_record = SeqRecord(dummy_seq)

print(f'원본 Seq  객체 : {dummy_seq}\n')
print(f'SeqRecord 객체 \n{dummy_seq_record}\n')

try:
    error_test = SeqRecord()
except Exception as e:
    print(f'SeqRecord 함수에 Seq를 입력하지 않은 경우 : {e}')

## 출력 결과
원본 Seq  객체 : AGTAAGGGTTAGGAATA

SeqRecord 객체 
ID: <unknown id>
Name: <unknown name>
Description: <unknown description>
Number of features: 0
Seq('AGTAAGGGTTAGGAATA')

SeqRecord 함수에 Seq를 입력하지 않은 경우 : __init__() missing 1 required positional argument: 'seq'

1-1. SeqReocrd 객체 생성

(!) SeqRecord 객체에 정보를 넣는 방법은 두 가지 있다.

  • SeqRecord 객체를 생성할 때 입력하기
  • SeqRecord의 속성에 접근하여 입력하기
    • 이와 같은 방법으로 속성 값을 변경할 수도 있다
## SeqRecord 객체에 설명 입력하기
dummy_seq_record = SeqRecord(dummy_seq, id = 'dummy_9999', name = 'dummy')
print(f'SeqRecord 객체 생성시 정보 입력하여 테스트 \n{dummy_seq_record}\n')

dummy_seq_record.name = 'new name'
dummy_seq_record.description = 'sequence name change'
dummy_seq_record.annotations['dummy1'] = 'dummy1'
dummy_seq_record.letter_annotion = {'dummy2' : 'dummy2'}
print(f'SeqRecord 객체의 속성에 접근하여 테스트 \n{dummy_seq_record}\n')

## 출력 결과
SeqRecord 객체 생성시 정보 입력하여 테스트 
ID: dummy_9999
Name: dummy
Description: <unknown description>
Number of features: 0
Seq('AGTAAGGGTTAGGAATA')

SeqRecord 객체의 속성에 접근하여 테스트 
ID: dummy_9999
Name: new name
Description: sequence name change
Number of features: 0
/dummy1=dummy1
Seq('AGTAAGGGTTAGGAATA')

1-2.SeqRecord 객체 간 비교하기

  • SeqRecord 객체는 두 객체간 직접적인 비교는 불가능하고, 객체 안 속성 값을 비교해야한다.
dummy_seq = SeqRecord(Seq('AGTAAGGGTTAGGAATA'))
dummy_seq2 = SeqRecord(Seq('AGTAAGGGTTAGGAATA'))

try:
    print('SeqRecord 객체 두 개 비교할 수 있니?')
    print(dummy_seq == dummy_seq2)
except Exception as e:
    print(f'아니 : {e}\n')

print(f'그럼 SeqRecord 객체 안 속성 값들은 비교할 수 있니? : {dummy_seq.seq == dummy_seq2.seq}')

## 출력 결과
SeqRecord 객체 두 개 비교할 수 있니?
아니 : SeqRecord comparison is deliberately not implemented. Explicitly compare the attributes of interest.

그럼 SeqRecord 객체 안 속성 값들은 비교할 수 있니? : True

2. FASTA 파일

  • SeqIO 모듈로 FASTA 파일을 읽는 방법은 두 가지가 있다.
    (1) SeqIO.parse()
    (2) SeqIO.read()

2-1. SeqIO.parse() 메소드로 FASTA 파일 읽기

  • SeqIO.parse() 메소드 안에는 2개의 인자를 입력으로 받는다.
    (1) 파일 이름
    (2) 유전체 데이터가 저장되어 있는 파일 종류
  • (*) biopython 1.79 버전 기준 33개의 포맷을 지원하고 있다.
  • 자주 사용하는 데이터 포맷은 다음과 같다.
포맷 설명
clustal Multiple alignment 툴에서 나온 결과로, 범용적으로 사용되는 alignment 포맷이다.
fasta (1) 염기서열을 표기한 파일로 >로 시작하는 헤더와 서열이 있다.
(2) 헤더와 서열을 레코드라 하며, 1개 이상의 레코드가 저장되어 있다
fastq FASTA 파일에 quality 정보가 추가된 파일 포맷이다.
genbank 염기서열 및 아미노산 서열, 종 정보, 관련 논문 저자, 제목 등의 메타 데이터가 저장되어 있다
from Bio import SeqIO

## 레코드가 한 개만 있는 경우
sequences = SeqIO.parse('../dataset/fasta/sample_1.fasta', 'fasta')
print(f'읽어들인 fasta 파일의 타입 : {type(sequences)}\n')

for sequence in sequences:
    string_decoration(f'fasta 파일 안의 sequence record의 타입 : {type(sequence)}', num = 120)
    string_decoration(f'fasta 파일 안의 sequence record\n{sequence}', num = 120, idx = 2)

## 출력 결과
읽어들인 fasta 파일의 타입 : <class 'Bio.SeqIO.FastaIO.FastaIterator'>

## 깔끔하다 헤헤
------------------------------------------------------------------------------------------------------------------------
fasta 파일 안의 sequence record의 타입 : <class 'Bio.SeqRecord.SeqRecord'>
------------------------------------------------------------------------------------------------------------------------
fasta 파일 안의 sequence record
ID: AF501235.1
Name: AF501235.1
Description: AF501235.1 Influenzavirus A (A/duck/Shanghai/1/2000) hemagglutinin gene, complete cds
Number of features: 0
Seq('ATGGAGAAAATAGTGCTTCTTCTTGCAATAGTCAGTCTTGTTAAAAGTGATCAG...AGA') 
------------------------------------------------------------------------------------------------------------------------
## 레코드가 1개 초과인 경우
sequences = SeqIO.parse('../dataset/fasta/sample_2.fasta', 'fasta')
print(f'읽어들인 fasta 파일의 타입 : {type(sequences)}\n')

for idx, sequence in enumerate(sequences, 1):
    string_decoration(f'fasta 파일 안의 sequence record{idx}의 타입 : {type(sequence)}', num=100)
    string_decoration(f'fasta 파일 안의 sequence record{idx}\n{sequence}', idx=2, num=100)
    print('\n' if idx == 1 else '')

## 출력 결과
읽어들인 fasta 파일의 타입 : <class 'Bio.SeqIO.FastaIO.FastaIterator'>

----------------------------------------------------------------------------------------------------
fasta 파일 안의 sequence record1의 타입 : <class 'Bio.SeqRecord.SeqRecord'>
----------------------------------------------------------------------------------------------------
fasta 파일 안의 sequence record1
ID: MH464856.1
Name: MH464856.1
Description: MH464856.1 Hepatitis B virus isolate MA134, complete genome
Number of features: 0
Seq('TTCCACAACATTCCACCAAGCTCTGCAGGATCCCAGAGTAAGAGGCCTGTATTT...GGG') 
----------------------------------------------------------------------------------------------------


----------------------------------------------------------------------------------------------------
fasta 파일 안의 sequence record2의 타입 : <class 'Bio.SeqRecord.SeqRecord'>
----------------------------------------------------------------------------------------------------
fasta 파일 안의 sequence record2
ID: CP002925.1
Name: CP002925.1
Description: CP002925.1 Streptococcus pseudopneumoniae IS7493, complete genome
Number of features: 0
Seq('TTGAAAGAAAAACAATTTTGGAATCGTATATTAGAATTTGCTCAAGAAAGACTG...ATC') 
----------------------------------

2-2. SeqIO.read() 메소드로 FASTA 파일 읽기

  • SeqIO.read() 메소드도 SeqIO.parse() 메소드와 동일하게 두 개의 입력인자를 받는다.
    (1) 파일 이름
    (2) 유전체 데이터가 저장되어 있는 파일 종류
  • SeqIO.parse() 메소드로 파일을 읽으면 레코드 수 만큳 SeqRecord 객체가 iterable한 generator가 객체로 생성
    SeqIO.read() 메소드로 파일을 읽으면 1개의 SeqRecord 객체가 만들어짐. (여러개의 레코드가 있는 경우에 에러 발생)
sequence = SeqIO.read('../dataset/fasta/sample_1.fasta', 'fasta')
string_decoration(f'읽어들인 fasta 파일의 타입 : {type(sequences)}', num=100)
string_decoration(f'fasta 파일 안의 sequence record\n{sequence}',num=100, idx=2)

try:
    print('\n레코드가 여러개인 파일 읽을 수 있니?')
    sequence = SeqIO.read('../dataset/fasta/sample_2.fasta', 'fasta')
except Exception as e:
    print(f'아니 : {e}') 

## 출력 결과
----------------------------------------------------------------------------------------------------
읽어들인 fasta 파일의 타입 : <class 'Bio.SeqIO.FastaIO.FastaIterator'>
----------------------------------------------------------------------------------------------------
fasta 파일 안의 sequence record
ID: AF501235.1
Name: AF501235.1
Description: AF501235.1 Influenzavirus A (A/duck/Shanghai/1/2000) hemagglutinin gene, complete cds
Number of features: 0
Seq('ATGGAGAAAATAGTGCTTCTTCTTGCAATAGTCAGTCTTGTTAAAAGTGATCAG...AGA') 
----------------------------------------------------------------------------------------------------

레코드가 여러개인 파일 읽을 수 있니?
아니 : More than one record found in handle

(!) FASTA파일로 SeqRecord 객체 만들기

  • SeqIO.parse() 메소드를 사용하면 FASTA 파일 안의 정보들을 SeqRecord 객체로 사용할 수 있다.
    (1) FASTA 파일의 헤더 부분이 파싱되어 SeqRecord 객체의 ID, Name, Description 속성으로 들어간다.
    (2) FASTA 파일에 저장되어 있는 염기 서열 정보는 SeqRecord 객체의 Seq 속성으로 들어간다.
lac_operon = SeqIO.parse('../dataset/fasta/J01631.1.fasta', 'fasta')
print(f'읽어들인 fasta 파일의 타입 : {type(lac_operon)}\n')

for lac in lac_operon:
    string_decoration(f'fasta 파일 안의 sequence record의 타입 : {type(lac)}', num = 120)
    string_decoration(f'fasta 파일 안의 sequence record\n{lac}', num = 120, idx = 2)
    print('\n')

    lac.name = '가나다라'
    string_decoration(f'임의로 바꾼 이름을 적용한 sequence record의 타입 : {type(lac)}', num = 120)
    string_decoration(f'임의로 바꾼 이름을 적용한 sequence record\n{lac}',num=120, idx=2)

## 출력 결과
읽어들인 fasta 파일의 타입 : <class 'Bio.SeqIO.FastaIO.FastaIterator'>

------------------------------------------------------------------------------------------------------------------------
fasta 파일 안의 sequence record의 타입 : <class 'Bio.SeqRecord.SeqRecord'>
------------------------------------------------------------------------------------------------------------------------
fasta 파일 안의 sequence record
ID: J01636.1
Name: J01636.1
Description: J01636.1 E.coli lactose operon with lacI, lacZ, lacY and lacA genes
Number of features: 0
Seq('GACACCATCGAATGGCGCAAAACCTTTCGCGGTATGGCATGATAGCGCCCGGAA...GAC') 
------------------------------------------------------------------------------------------------------------------------


------------------------------------------------------------------------------------------------------------------------
임의로 바꾼 이름을 적용한 sequence record의 타입 : <class 'Bio.SeqRecord.SeqRecord'>
------------------------------------------------------------------------------------------------------------------------
임의로 바꾼 이름을 적용한 sequence record
ID: J01636.1
Name: 가나다라
Description: J01636.1 E.coli lactose operon with lacI, lacZ, lacY and lacA genes
Number of features: 0
Seq('GACACCATCGAATGGCGCAAAACCTTTCGCGGTATGGCATGATAGCGCCCGGAA...GAC') 
------------------------------------------------------------------------------------------------------------------------

3. FASTQ 파일

  • 일반적으로 FASTAQ 파일에는 여러개의 리드들로 구성되어 있어 SeqIO.read() 메소드로 읽으면 에러가 난다.

3-1. SeqIO.parse() 메소드로 FASTQ 파일 읽기

try:
    print('fastq 파일 읽을 수 있니?')
    sample_fastq = SeqIO.read('../dataset/fastq/sample_1.fastq', 'fastq')
except Exception as e:
    print(f'아니 : {e}\n')

sample_fastq = SeqIO.parse('../dataset/fastq/sample_1.fastq', 'fastq')
print(f'읽어들인 fastq 파일의 타입 : {type(sample_fastq)}')
for sample in sample_fastq:
    string_decoration(f'fastq 파일 안의 sequence 타입 : {type(sample)}', num = 120)
    string_decoration(f'fastq 파일 안의 sequence record\n{sample}',idx = 2, num=120)
    string_decoration(f'fastq 파일 안의 sequence \n{sample.seq}',idx = 2, num=120)
    print('\n')

## 출력 결과
fastq 파일 읽을 수 있니?
아니 : More than one record found in handle

읽어들인 fastq 파일의 타입 : <class 'Bio.SeqIO.QualityIO.FastqPhredIterator'>
------------------------------------------------------------------------------------------------------------------------
fastq 파일 안의 sequence 타입 : <class 'Bio.SeqRecord.SeqRecord'>
------------------------------------------------------------------------------------------------------------------------
fastq 파일 안의 sequence record
ID: SRR000982.5E745RJU01DDHJ6length=113
Name: SRR000982.5E745RJU01DDHJ6length=113
Description: SRR000982.5E745RJU01DDHJ6length=113
Number of features: 0
Per letter annotation for: phred_quality
Seq('AAGGCACCATGCAGAGATGCAAGGCCCCTTTCTAAGCCCTAGACTTCTGGATGA...CAG') 
------------------------------------------------------------------------------------------------------------------------
fastq 파일 안의 sequence 
AAGGCACCATGCAGAGATGCAAGGCCCCTTTCTAAGCCCTAGACTTCTGGATGACACTTCTAGAAACACCCTGGGCCAGAAGTGAACCTGCTGCCTTGAAGGGAATAACTCAG 
------------------------------------------------------------------------------------------------------------------------


------------------------------------------------------------------------------------------------------------------------
fastq 파일 안의 sequence 타입 : <class 'Bio.SeqRecord.SeqRecord'>
------------------------------------------------------------------------------------------------------------------------
fastq 파일 안의 sequence record
ID: SRR000982.35E745RJU01DLQBClength=53
Name: SRR000982.35E745RJU01DLQBClength=53
Description: SRR000982.35E745RJU01DLQBClength=53
Number of features: 0
Per letter annotation for: phred_quality
Seq('ATCTCTACCCAAAGATTAATGGGGATTGGTGTGATATACGGCTGAATTGTACC') 
------------------------------------------------------------------------------------------------------------------------
fastq 파일 안의 sequence 
ATCTCTACCCAAAGATTAATGGGGATTGGTGTGATATACGGCTGAATTGTACC 
------------------------------------------------------------------------------------------------------------------------

3-2. SeqIO.parse() 메소드로 압축된 FASTQ 파일 읽기

  • 연구에서 다루게 되는 FASTQ 파일은 대부분 GNU Zip(.gz) 파일 형태로 압축되어 있다.
  • .gz 파일은 파이썬의 gzip 모듈을 사용하면 읽을 수 있다.
import gzip
sample_fastq = SeqIO.parse(gzip.open('../dataset/fastq/sample_1.fastq.gz', 'rt'), 'fastq')

for sample in sample_fastq:
    string_decoration(f'fastq 파일 안의 sequence 타입 : {type(sample)}', num = 120)
    string_decoration(f'fastq 파일 안의 sequence record\n{sample}',idx = 2, num=120)
    string_decoration(f'fastq 파일 안의 sequence \n{sample.seq}',idx = 2, num=120)
    print('\n')

## 출력 결과
------------------------------------------------------------------------------------------------------------------------
fastq 파일 안의 sequence 타입 : <class 'Bio.SeqRecord.SeqRecord'>
------------------------------------------------------------------------------------------------------------------------
fastq 파일 안의 sequence record
ID: SRR000982.5E745RJU01DDHJ6length=113
Name: SRR000982.5E745RJU01DDHJ6length=113
Description: SRR000982.5E745RJU01DDHJ6length=113
Number of features: 0
Per letter annotation for: phred_quality
Seq('AAGGCACCATGCAGAGATGCAAGGCCCCTTTCTAAGCCCTAGACTTCTGGATGA...CAG') 
------------------------------------------------------------------------------------------------------------------------
fastq 파일 안의 sequence 
AAGGCACCATGCAGAGATGCAAGGCCCCTTTCTAAGCCCTAGACTTCTGGATGACACTTCTAGAAACACCCTGGGCCAGAAGTGAACCTGCTGCCTTGAAGGGAATAACTCAG 
------------------------------------------------------------------------------------------------------------------------


------------------------------------------------------------------------------------------------------------------------
fastq 파일 안의 sequence 타입 : <class 'Bio.SeqRecord.SeqRecord'>
------------------------------------------------------------------------------------------------------------------------
fastq 파일 안의 sequence record
ID: SRR000982.35E745RJU01DLQBClength=53
Name: SRR000982.35E745RJU01DLQBClength=53
Description: SRR000982.35E745RJU01DLQBClength=53
Number of features: 0
Per letter annotation for: phred_quality
Seq('ATCTCTACCCAAAGATTAATGGGGATTGGTGTGATATACGGCTGAATTGTACC') 
------------------------------------------------------------------------------------------------------------------------
fastq 파일 안의 sequence 
ATCTCTACCCAAAGATTAATGGGGATTGGTGTGATATACGGCTGAATTGTACC 
------------------------------------------------------------------------------------------------------------------------

4. Genbank 파일

  • Genbank 파일은 FASTA 파일과 동일하게 SeqIO.parse(), SeqIO.read() 메소드로 읽을 수 있다.
  • SeqIO.read()와 SeqIO.parse()를 이용하여 Genbank에서 필요한 정보를 가져올 수 있다.
속성 이름 설명 특이사항
id GenBank 파일의 ID를 의미 버전 정보를 포함한다.
seq GenBank 파일의 서열을 의미 -
name GenBank 파일의 LOCUS를 의미 -
description GenBank 파일을 설명하는 내용을 의미 -
dbxrefs 추가 DB 내용이 들어감 -
features GenBank 파일의 각 REFERENCE 항목들이 들어감 -
annotations GenBank 파일의 각 정보들이 들어감 파이썬 딕셔너리 형으로 들어옴
letter_annotations GenBank 파일에 추가 정보를 더 넣기 위해 만든 속성 파이썬 딕셔너리 형으로 들어옴
sample_gbk = SeqIO.read('../dataset/genbank/KT225476.2.gbk', 'genbank')
string_decoration(f'SeqIO.read()로 읽어들인 genbank 파일의 타입 : {type(sample_gbk)}', num = 120)
string_decoration(f'genbank 파일 안의 sequence record\n{sample_gbk}',num=120, idx=2)
string_decoration(f'genbank 파일 안의 name \n{sample_gbk.name}',num=120, idx=2)
string_decoration(f'genbank 파일 안의 description \n{sample_gbk.description}',num=120, idx=2)
string_decoration(f'읽어들인 genbank 안의 sequence \n{sample_gbk.seq[:115]}', num = 120, idx = 2)
print('\n')

sample_gbk = SeqIO.parse('../dataset/genbank/KT225476.2.gbk', 'genbank')
string_decoration(f'SeqIO.parse()로 읽어들인 genbank 파일의 타입 : {type(sample_gbk)}', num = 120)
for sample in sample_gbk:
    string_decoration(f'genbank 파일 안의 sequence record\n{sample}',num=120, idx=2)
    string_decoration(f'읽어들인 genbank 안의 name \n{sample.name}', num = 120, idx = 2)
    string_decoration(f'읽어들인 genbank 안의 description \n{sample.description}', num = 120, idx = 2)
    string_decoration(f'읽어들인 genbank 안의 molecule type \n{sample.annotations["molecule_type"]}', num = 120, idx = 2)
    string_decoration(f'읽어들인 genbank 안의 organism \n{sample.annotations["organism"]}', num = 120, idx = 2)
    string_decoration(f'읽어들인 genbank 안의 sequence \n{sample.seq[:115]}', num = 120, idx = 2)

## 출력 결과
------------------------------------------------------------------------------------------------------------------------
SeqIO.read()로 읽어들인 genbank 파일의 타입 : <class 'Bio.SeqRecord.SeqRecord'>
------------------------------------------------------------------------------------------------------------------------
genbank 파일 안의 sequence record
ID: KT225476.2
Name: KT225476
Description: Middle East respiratory syndrome coronavirus isolate MERS-CoV/THA/CU/17_06_2015, complete genome
Number of features: 12
/molecule_type=RNA
/topology=linear
/data_file_division=VRL
/date=22-AUG-2017
/accessions=['KT225476']
/sequence_version=2
/keywords=['']
/source=Middle East respiratory syndrome-related coronavirus (MERS-CoV)
/organism=Middle East respiratory syndrome-related coronavirus
/taxonomy=['Viruses', 'ssRNA viruses', 'ssRNA positive-strand viruses, no DNA stage', 'Nidovirales', 'Coronaviridae', 'Coronavirinae', 'Betacoronavirus']
/references=[Reference(title='Imported case of Middle East respiratory syndrome coronavirus (MERS-CoV) infection from Oman to Thailand, June 2015', ...), Reference(title='Direct Submission', ...), Reference(title='Direct Submission', ...)]
/comment=On Sep 10, 2015 this sequence version replaced KT225476.1.
/structured_comment=OrderedDict([('Assembly-Data', OrderedDict([('Sequencing Technology', 'Sanger dideoxy sequencing')]))])
Seq('AGTGAATAGCTTGGCTATCTCACTTCCCCTCGTTCTCTTGCAGAACTTTGATTT...CTC') 
------------------------------------------------------------------------------------------------------------------------
genbank 파일 안의 name 
KT225476 
------------------------------------------------------------------------------------------------------------------------
genbank 파일 안의 description 
Middle East respiratory syndrome coronavirus isolate MERS-CoV/THA/CU/17_06_2015, complete genome 
------------------------------------------------------------------------------------------------------------------------
읽어들인 genbank 안의 sequence 
AGTGAATAGCTTGGCTATCTCACTTCCCCTCGTTCTCTTGCAGAACTTTGATTTTAACGAACTTAAATAAAAGCCCTGTTGTTTAGCGTATTGTTGCACTTGTCTGGTGGGATTG 
------------------------------------------------------------------------------------------------------------------------


------------------------------------------------------------------------------------------------------------------------
SeqIO.parse()로 읽어들인 genbank 파일의 타입 : <class 'Bio.SeqIO.InsdcIO.GenBankIterator'>
------------------------------------------------------------------------------------------------------------------------
genbank 파일 안의 sequence record
ID: KT225476.2
Name: KT225476
Description: Middle East respiratory syndrome coronavirus isolate MERS-CoV/THA/CU/17_06_2015, complete genome
Number of features: 12
/molecule_type=RNA
/topology=linear
/data_file_division=VRL
/date=22-AUG-2017
/accessions=['KT225476']
/sequence_version=2
/keywords=['']
/source=Middle East respiratory syndrome-related coronavirus (MERS-CoV)
/organism=Middle East respiratory syndrome-related coronavirus
/taxonomy=['Viruses', 'ssRNA viruses', 'ssRNA positive-strand viruses, no DNA stage', 'Nidovirales', 'Coronaviridae', 'Coronavirinae', 'Betacoronavirus']
/references=[Reference(title='Imported case of Middle East respiratory syndrome coronavirus (MERS-CoV) infection from Oman to Thailand, June 2015', ...), Reference(title='Direct Submission', ...), Reference(title='Direct Submission', ...)]
/comment=On Sep 10, 2015 this sequence version replaced KT225476.1.
/structured_comment=OrderedDict([('Assembly-Data', OrderedDict([('Sequencing Technology', 'Sanger dideoxy sequencing')]))])
Seq('AGTGAATAGCTTGGCTATCTCACTTCCCCTCGTTCTCTTGCAGAACTTTGATTT...CTC') 
------------------------------------------------------------------------------------------------------------------------
읽어들인 genbank 안의 name 
KT225476 
------------------------------------------------------------------------------------------------------------------------
읽어들인 genbank 안의 description 
Middle East respiratory syndrome coronavirus isolate MERS-CoV/THA/CU/17_06_2015, complete genome 
------------------------------------------------------------------------------------------------------------------------
읽어들인 genbank 안의 molecule type 
RNA 
------------------------------------------------------------------------------------------------------------------------
읽어들인 genbank 안의 organism 
Middle East respiratory syndrome-related coronavirus 
------------------------------------------------------------------------------------------------------------------------
읽어들인 genbank 안의 sequence 
AGTGAATAGCTTGGCTATCTCACTTCCCCTCGTTCTCTTGCAGAACTTTGATTTTAACGAACTTAAATAAAAGCCCTGTTGTTTAGCGTATTGTTGCACTTGTCTGGTGGGATTG 
------------------------------------------------------------------------------------------------------------------------

 


5. Entrez 모듈

  • NCBI(National Center for Biotechnology Information) 정보를 웹을 통해 접근하여 정보를 가져오는 모듈
    (!) 웹을 통해 접근하는 모듈이므로, 반드시 인터넷에 연결 되어있어야 한다.
  • Entrez에는 사용자의 이메일이 의무적으로 들어간다.
  • Entrez 모듈에서 가장 많이 사용하는 efetch 메소드를 이용한다.
  • Entrez.efetch()에는 키워드 인자로 아래와 같이 입력된다.
    (1) db : 데이터를 검색할 데이터 베이스 이름
    (2) id : 검색할 데이터의 id
    (3) rettype : 데이터 형식
    (4) retmode : 반환 형식
from Bio import Entrez
Entrez.email = 'kimhippowork@gmail.com'

## 변이없는 CCR5 유전자 데이터를 GenBank 형식으로 받아오기
handle = Entrez.efetch(db='nucleotide', rettype='gb', id='AY463215', retmode='text')

print('genbank 파일 안의 sequece record')
for sample in handle:
    print(sample.strip())

## 출력 결과
genbank 파일 안의 sequece record
LOCUS       AY463215                1059 bp    DNA     linear   PRI 14-DEC-2004
DEFINITION  Homo sapiens CCR5 chemokine receptor (CCR5) gene, complete cds.
ACCESSION   AY463215
VERSION     AY463215.1
KEYWORDS    .
SOURCE      Homo sapiens (human)
ORGANISM  Homo sapiens
Eukaryota; Metazoa; Chordata; Craniata; Vertebrata; Euteleostomi;
Mammalia; Eutheria; Euarchontoglires; Primates; Haplorrhini;
Catarrhini; Hominidae; Homo.
REFERENCE   1  (bases 1 to 1059)
AUTHORS   Capoulade-Metay,C., Ma,L., Truong,L.X., Dudoit,Y., Versmisse,P.,
Nguyen,N.V., Nguyen,M., Scott-Algara,D., Barre-Sinoussi,F.,
Debre,P., Bismuth,G., Pancino,G. and Theodorou,I.
TITLE     New CCR5 variants associated with reduced HIV coreceptor function
in southeast Asia
JOURNAL   AIDS 18 (17), 2243-2252 (2004)
PUBMED   15577536
REFERENCE   2  (bases 1 to 1059)
AUTHORS   Capoulade-Metay,C., Ma,L., Truong,L.X., Dudoit,Y., Versmisse,P.,
Nguyen,N.V., Nguyen,M., Scott-Algara,D., Barre-Sinoussi,F.,
Debre,P., Pancino,G. and Theodorou,I.
TITLE     Direct Submission
JOURNAL   Submitted (07-NOV-2003) INSERM U543, 83 Boulevard de l'Hopital,
Paris 75013, France
FEATURES             Location/Qualifiers
source          1..1059
/organism="Homo sapiens"
/mol_type="genomic DNA"
/db_xref="taxon:9606"
/country="Viet Nam"
gene            <1..>1059
/gene="CCR5"
mRNA            <1..>1059
/gene="CCR5"
/product="CCR5 chemokine receptor"
CDS             1..1059
/gene="CCR5"
/note="contains I254T variation"
/codon_start=1
/product="CCR5 chemokine receptor"
/protein_id="AAS19314.1"
/translation="MDYQVSSPIYDINYYTSEPCQKINVKQIAARLLPPLYSLVFIFG
FVGNMLVILILINCKRLKSMTDIYLLNLAISDLFFLLTVPFWAHYAAAQWDFGNTMCQ
LLTGLYFIGFFSGIFFIILLTIDRYLAVVHAVFALKARTVTFGVVTSVITWVVAVFAS
LPGIIFTRSQKEGLHYTCSSHFPYSQYQFWKNFQTLKIVILGLVLPLLVMVICYSGIL
KTLLRCRNEKKRHRAVRLIFTIMIVYFLFWAPYNTVLLLNTFQEFFGLNNCSSSNRLD
QAMQVTETLGMTHCCINPIIYAFVGEKFRNYLLVFFQKHIAKRFCKCCSIFQQEAPER
ASSVYTRSTGEQEISVGL"
variation       758
/gene="CCR5"
/replace="t"
ORIGIN
1 atggattatc aagtgtcaag tccaatctat gacatcaatt attatacatc ggagccctgc
61 caaaaaatca atgtgaagca aatcgcagcc cgcctcctgc ctccgctcta ctcactggtg
121 ttcatctttg gttttgtggg caacatgctg gtcatcctca tcctgataaa ctgcaaaagg
181 ctgaagagca tgactgacat ctacctgctc aacctggcca tctctgacct gtttttcctt
241 cttactgtcc ccttctgggc tcactatgct gccgcccagt gggactttgg aaatacaatg
301 tgtcaactct tgacagggct ctattttata ggcttcttct ctggaatctt cttcatcatc
361 ctcctgacaa tcgataggta cctggctgtc gtccatgctg tgtttgcttt aaaagccagg
421 acggtcacct ttggggtggt gacaagtgtg atcacttggg tggtggctgt gtttgcgtct
481 ctcccaggaa tcatctttac cagatctcaa aaagaaggtc ttcattacac ctgcagctct
541 cattttccat acagtcagta tcaattctgg aagaatttcc agacattaaa gatagtcatc
601 ttggggctgg tcctgccgct gcttgtcatg gtcatctgct actcgggaat cctaaaaact
661 ctgcttcggt gtcgaaatga gaagaagagg cacagggctg tgaggcttat cttcaccatc
721 atgattgttt attttctctt ctgggctccc tacaacactg tccttctcct gaacaccttc
781 caggaattct ttggcctgaa taattgcagt agctctaaca ggttggacca agctatgcag
841 gtgacagaga ctcttgggat gacgcactgc tgcatcaacc ccatcatcta tgcctttgtc
901 ggggagaagt tcagaaacta cctcttagtc ttcttccaaa agcacattgc caaacgcttc
961 tgcaaatgct gttctatttt ccagcaagag gctcccgagc gagcaagctc agtttacacc
1021 cgatccactg gggagcagga aatatctgtg ggcttgtga
//

5-1. SeqIO를 이용한 Entrez 모듈로 받아온 정보 파싱

## 변이없는 CCR5 유전자 데이터를 FASTA 형식으로 받아오기
ccr5 = SeqIO.read(Entrez.efetch(db='nucleotide', rettype='fasta', id='AY463215', retmode='text'), 'fasta')
string_decoration(f'SeqIO.read()로 파싱한 Entrez의 CCR5 파일의 타입 : {type(ccr5)}', num = 120)
string_decoration(f'SeqIO.read()로 파싱한 Entrez의 CCR5 파일의 ID \n{ccr5.id}', idx=2, num = 120)
string_decoration(f'SeqIO.read()로 파싱한 Entrez의 CCR5 파일의 description \n{ccr5.description}', idx=2, num = 120)
string_decoration(f'SeqIO.read()로 파싱한 Entrez의 CCR5 파일의 sequence \n{ccr5.seq[:90]}, bp : {len(ccr5.seq)}', idx=2, num = 120)

## 출력 결과
------------------------------------------------------------------------------------------------------------------------
SeqIO.read()로 파싱한 Entrez의 CCR5 파일의 타입 : <class 'Bio.SeqRecord.SeqRecord'>
------------------------------------------------------------------------------------------------------------------------
SeqIO.read()로 파싱한 Entrez의 CCR5 파일의 ID 
AY463215.1 
------------------------------------------------------------------------------------------------------------------------
SeqIO.read()로 파싱한 Entrez의 CCR5 파일의 description 
AY463215.1 Homo sapiens CCR5 chemokine receptor (CCR5) gene, complete cds 
------------------------------------------------------------------------------------------------------------------------
SeqIO.read()로 파싱한 Entrez의 CCR5 파일의 sequence 
ATGGATTATCAAGTGTCAAGTCCAATCTATGACATCAATTATTATACATCGGAGCCCTGCCAAAAAATCAATGTGAAGCAAATCGCAGCC, bp : 1059 
------------------------------------------------------------------------------------------------------------------------
## 변이있는 CCR5 유전자 데이터를 fasta 형식으로 받아오기
ccr5_mutation = SeqIO.parse(Entrez.efetch(db='nucleotide', rettype='fasta', id='1575550', retmode='text'), 'fasta')
string_decoration(f'SeqIO.parse()로 파싱한 Entrez의 CCR5 파일의 타입 : {type(ccr5_mutation)}', num = 120)
for mutation in ccr5_mutation:
    string_decoration(f'SeqIO.parse()로 파싱한 Entrez의 변이 CCR5 파일의 ID \n{mutation.id}', idx=2, num = 120)
    string_decoration(f'SeqIO.read()로 파싱한 Entrez의 변이 CCR5 파일의 description \n{mutation.description}', idx=2, num = 120)
    string_decoration(f'SeqIO.read()로 파싱한 Entrez의 변이 CCR5 파일의 sequence \n{mutation.seq[:90]}, bp : {len(mutation.seq)}', idx=2, num = 120)

## 출력 결과
------------------------------------------------------------------------------------------------------------------------
SeqIO.parse()로 파싱한 Entrez의 CCR5 파일의 타입 : <class 'Bio.SeqIO.FastaIO.FastaIterator'>
------------------------------------------------------------------------------------------------------------------------
SeqIO.parse()로 파싱한 Entrez의 변이 CCR5 파일의 ID 
U66285.1 
------------------------------------------------------------------------------------------------------------------------
SeqIO.read()로 파싱한 Entrez의 변이 CCR5 파일의 description 
U66285.1 Human CC chemokine receptor CCR5 gene, mutant allele, complete cds 
------------------------------------------------------------------------------------------------------------------------
SeqIO.read()로 파싱한 Entrez의 변이 CCR5 파일의 sequence 
ATGGATTATCAAGTGTCAAGTCCAATCTATGACATCAATTATTATACATCGGAGCCCTGCCAAAAAATCAATGTGAAGCAAATCGCAGCC, bp : 1027 
------------------------------------------------------------------------------------------------------------------------

99. 자료 출처

99-1. 도서

  • 비제이퍼블릭 | 한주현 저 - 바이오파이썬으로 만나는 생물정보학

99-2. 웹사이트

 

Introduction to SeqIO · Biopython

Introduction to SeqIO This page describes Bio.SeqIO, the standard Sequence Input/Output interface for BioPython 1.43 and later. For implementation details, see the SeqIO development page. Python novices might find Peter’s introductory Biopython Workshop

biopython.org

99-3. 데이터셋 출처

 

GitHub - bjpublic/biopython

Contribute to bjpublic/biopython development by creating an account on GitHub.

github.com


전체코드

 

GitHub - EvoDmiK/TIL: Today I Learn

Today I Learn. Contribute to EvoDmiK/TIL development by creating an account on GitHub.

github.com


부탁 말씀

개인적으로 공부하는 과정에서 오류가 있을 수 있으니, 오류가 있는 부분은 댓글로 정정 부탁드립니다.


 

728x90
Comments