Biopython
SwissProt
#
Find similar titles
- 최초 작성자
- 최근 업데이트
Structured data
- Category
- Programming
Swiss-prot and ExPASy #
Swiss-Prot데이터는 단백질 서열에 대한 큐레이션 데이터이다. 우리가 NCBI 뿐만 아니라 단백질 서열에 대한 기능 분석 등을 하기 위해서 많이 참조하는 데이터로써 기능 분석을 위해서는 기본적으로 참조를 해야 한다. 따라서 이를 위해 Biopython에서도 이들 데이터를 파싱할 수 있는 모듈이 필요하게 되는데 이것이 바로 SwissProt 모듈이다. 이를 위해서는 마찬가지로 SwissProt 이라는 패키지를 임포트(import)하면 된다.
>>> from Bio import SwissProt
>>> record = SwissProt.read(handle)
간단한 사용법은 위와 같다. from Bio import SwissProt이라고 명시해주면 이미 준비는 된 것이다. 그 후 데이터를 읽어 들이면 되는데 SwissProt.read(데이터 파일)의 형태로 입력하면 된다. 즉 read()기능이 우리의 데이터를 읽어준다. 그 후 데이터를 출력하기 위해서 record.xxxxxx를 이용하면 많은 정보를 확인할 수 있다. 아래 예제에서는 record.description을 통해서 각 레코드에 대한 부가정보를 확인할 수 있다. 레퍼런스 정보 같은 경우에는 다양한 논문 정보가 포함 되어 있으므로 순환문을 통해 데이터를 출력할 수 있다.
>>> print(record.description)
'RecName: Full=Chalcone synthase 3; EC=2.3.1.74; AltName: Full=Naringenin-chalcone synthase 3;'
>>> for ref in record.references:
... print("authors:", ref.authors)
... print("title:", ref.title)
...
authors: Liew C.F., Lim S.H., Loh C.S., Goh C.J.;
title: "Molecular cloning and sequence analysis of chalcone synthase cDNAs of
Bromheadia finlaysoniana.";
아래에서는 레코드의 Taxonomy 정보를 출력한다. 이는 각 분류군별 데이터를 배열 형태로 리턴해준다. 이를 토대로 해당 데이터의 계통 정보를 확인할 수 있다.
>>> print(record.organism_classification)
['Eukaryota', 'Viridiplantae', 'Streptophyta', 'Embryophyta', ..., 'Bromheadia']
보통 단백절 서열 데이터인 Swiss-Prot와 더불어 번역(translation) 데이터인 uniprot 데이터도 있는데 이의 데이터의 양이 방대하다. 때문에 압축된 파일이 존재하는데 이를 위해 gzip 모듈을 이용하면 압축 데이터를 바로 읽을 수가 있다.
>>> import gzip
>>> handle = gzip.open("uniprot_sprot.dat.gz")
물론 압축되지 않은 경우에는 바로 파일 핸들링을 할 수 있다.
>>> handle = open("uniprot_sprot.dat")
아래의 예제에서는 데이터를 읽은 후 전체 레코드의 부가 정보(설명정보)를 읽어 들여 배열로 모아 그 갯수를 확인하는 예제이다. [record.description for record in SwissProt.parse(handle)] 와 같이 데이터를 읽은 후 순환문을 통해 각 레코드의 설명 정보를 읽은 후 데이터를 모아 배열로 만들었다. 파이썬의 기능 []을 통해 바로 배열 형태로 만들어줬다.그 후 배열의 슬라이싱 기능을 통해서 [:5] 즉, 처음부터 5번 인덱스 까지 출력해 보는 예제이다.
>>> from Bio import SwissProt
>>> handle = open("uniprot_sprot.dat")
>>> descriptions = [record.description for record in SwissProt.parse(handle)]
>>> len(descriptions)
468851
>>> descriptions[:5]
['RecName: Full=Protein MGF 100-1R;',
'RecName: Full=Protein MGF 100-1R;',
'RecName: Full=Protein MGF 100-1R;',
'RecName: Full=Protein MGF 100-1R;',
'RecName: Full=Protein MGF 100-2L;']
이를 위해 풀어서 코딩을 해보면 다음과 같이 할 수 있다.
>>> from Bio import SwissProt
>>> descriptions = []
>>> handle = open("uniprot_sprot.dat")
>>> for record in SwissProt.parse(handle):
... descriptions.append(record.description)
...
>>> len(descriptions)
468851
기능상의 차이는 없다. 다만 파이썬의 기능을 좀 더 유연하게 활용한 예제이다. dir() 기능을 통해서 해당 객체에 포함되어 있는 다양한 메서드들을 확인할 수 있다. 여기에서 우리가 추출해야할 정보들의 목록을 볼 수 있다.
>>> dir(record)
['__doc__', '__init__', '__module__', 'accessions', 'annotation_update',
'comments', 'created', 'cross_references', 'data_class', 'description',
'entry_name', 'features', 'gene_name', 'host_organism', 'keywords',
'molecule_type', 'organelle', 'organism', 'organism_classification',
'references', 'seqinfo', 'sequence', 'sequence_length',
'sequence_update', 'taxonomy_id']
Prosite records #
Prosite는 단백질 서열의 도메인, 패밀리, 기능 사이트 정보를 담고 있는 데이터베이스이다. Prosite는 Swiss-Prot과 같이 개발되었기 때문에 바이오파이썬에서도 이를 다루기 위한 클래스를 제공한다. Bio.ExPASy.Prosite.Record 클래스에서 그 정보를 확인할 수가 있다. 사용법은 다음과 같다. from Bio.ExPASy improt Prosite이다. 먼저 해당 모듈을 임포트한 다음, 해당 파일을 열어주면 사용이 가능하다.
>>> from Bio.ExPASy import Prosite
>>> handle = open("myprositefile.dat")
>>> records = Prosite.parse(handle)
아래의 예제에서는 데이터를 읽은 후 관련 정보를 출력하는 예제이다.
>>> from Bio.ExPASy import Prosite
>>> handle = open("prosite.dat")
>>> records = Prosite.parse(handle)
>>> record = next(records)
>>> record.accession
'PS00001'
>>> record.name
'ASN_GLYCOSYLATION'
>>> record.pdoc
'PDOC00001'
>>> record = next(records)
>>> record.accession
'PS00004'
>>> record.name
'CAMP_PHOSPHO_SITE'
>>> record.pdoc
'PDOC00004'
>>> record = next(records)
>>> record.accession
'PS00005'
>>> record.name
'PKC_PHOSPHO_SITE'
>>> record.pdoc
'PDOC00005'
다음 예제는 Prosite 데이터를 읽은 후 전체 레코드의 수를 확인하는 예제이다. 순환문을 통해 전체 수를 카운트하여 출력하는 예제이다.
>>> from Bio.ExPASy import Prosite
>>> handle = open("prosite.dat")
>>> records = Prosite.parse(handle)
>>> n = 0
>>> for record in records: n+=1
...
>>> n
2073
Prosite정보는 위의 예제 마지막에서 다루었듯 record.pdoc정보를 통해 관련 문서 정보를 확인할 수 있다. 이는 마찬가지로 Prodoc 이라는 모듈을 통해 관련 정보를 추출하거나 확인할 수 있다.
>>> from Bio.ExPASy import Prodoc
>>> handle = open("prosite.doc")
>>> records = Prodoc.parse(handle)
>>> accessions = [record.accession for record in records]
효소 정보 파일 내용이다.
ID 3.1.1.34
DE Lipoprotein lipase.
AN Clearing factor lipase.
AN Diacylglycerol lipase.
AN Diglyceride lipase.
CA Triacylglycerol + H(2)O = diacylglycerol + a carboxylate.
CC -!- Hydrolyzes triacylglycerols in chylomicrons and very low-density
CC lipoproteins (VLDL).
CC -!- Also hydrolyzes diacylglycerol.
PR PROSITE; PDOC00110;
DR P11151, LIPL_BOVIN ; P11153, LIPL_CAVPO ; P11602, LIPL_CHICK ;
DR P55031, LIPL_FELCA ; P06858, LIPL_HUMAN ; P11152, LIPL_MOUSE ;
DR O46647, LIPL_MUSVI ; P49060, LIPL_PAPAN ; P49923, LIPL_PIG ;
DR Q06000, LIPL_RAT ; Q29524, LIPL_SHEEP ;
//
다음으로는 효소(Enzyme)정보를 확인하기 위한 예제이다. from Bio.ExPASy import Enzyme 클래스를 통해 해당 정보를 확인한다.
>>> from Bio.ExPASy import Enzyme
>>> with open("lipoprotein.txt") as handle:
... record = Enzyme.read(handle)
...
>>> record["ID"]
'3.1.1.34'
>>> record["DE"]
'Lipoprotein lipase.'
>>> record["AN"]
['Clearing factor lipase.', 'Diacylglycerol lipase.', 'Diglyceride lipase.']
>>> record["CA"]
'Triacylglycerol + H(2)O = diacylglycerol + a carboxylate.'
>>> record["PR"]
['PDOC00110']
>>> record["CC"]
['Hydrolyzes triacylglycerols in chylomicrons and very low-density lipoproteins
(VLDL).', 'Also hydrolyzes diacylglycerol.']
>>> record["DR"]
[['P11151', 'LIPL_BOVIN'], ['P11153', 'LIPL_CAVPO'], ['P11602', 'LIPL_CHICK'],
['P55031', 'LIPL_FELCA'], ['P06858', 'LIPL_HUMAN'], ['P11152', 'LIPL_MOUSE'],
['O46647', 'LIPL_MUSVI'], ['P49060', 'LIPL_PAPAN'], ['P49923', 'LIPL_PIG'],
['Q06000', 'LIPL_RAT'], ['Q29524', 'LIPL_SHEEP']]