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

[바이오파이썬] 02. 바이오파이썬으로 할 수 있는 일들

by HanJoohyun 2017. 4. 9.
반응형



안녕하세요


한주현 입니다.



오늘은 바이오파이썬으로 할 수 있는 일들에 대해서 말씀드리겠습니다.



시작하며

바이오파이썬은 생물학자들이 컴퓨터로 작업을 할 때 도움이 될 만한 파이썬 라이브러리 들의 모음입니다.


그래서 바이오파이썬을 하기 위해서는 파이썬을 기본적으로 다루실 수 있어야 합니다.


물론 파이썬 언어를 다루는 능력이 엄청난 실력자는 아닐지라도 대략 기본적인 파이썬의 문법이나 자료구조정도만 아셔도 앞으로 진행하게 될 강좌를 따라가실 때 무리는 없습니다.



바이오파이썬을 사용하시려면 우선 설치는 하셨겠지요?


설치를 하시지 않으셨다면 이전 강좌를 참고하시면 됩니다.


[바이오파이썬] 01. 바이오파이썬 설치

http://korbillgates.tistory.com/70





Sequence 작업

바이오파이썬으로 가장 먼저 다뤄볼 부분은 Sequence입니다. 


Sequence는 생물정보학 프로그래밍에서 기본이 되는 객체입니다.


파이썬을 실행시키고 프롬프트 화면으로 가보죠.


>>>


다음과 같이 입력합니다


>>> from Bio.Seq import Seq
>>> my_seq = Seq("AGTACACTGGT")
>>> my_seq
Seq('AGTACACTGGT', Alphabet())
>>> print(my_seq)
AGTACACTGGT
>>> my_seq.alphabet
Alphabet()


my_seq 이라는 이름으로 Seq 객체를 만들어 보았습니다.

alphabet 은 다음 강좌에서 더 자세히 다루도록 하겠습니다.



Sequence의 상보서열(complement sequence) 구하기


Seq객체에 complement 라는 메소드를 호출하면 Seq객체에 맞는 상보서열이 결과로 나오게 됩니다.



Sequence의 역상보서열(reverse complement sequence) 구하기

>>> from Bio.Seq import Seq
>>> my_seq = Seq("AGTACACTGGT")
>>> my_seq
Seq('AGTACACTGGT', Alphabet())
>>> my_seq.complement()
Seq('TCATGTGACCA', Alphabet())


Seq객체에 reverse_complement 라는 메소드를 호출하면 Seq객체에 맞는 역상보서열이 결과로 나오게 됩니다.



Seq 객체는 어떠한 메소드를 가지고 있을까요?

Seq 객체가 어떤 메소드를 가지고 있는지 살펴보기 위해서 다음과 같이 입력합니다.


>>> from Bio.Seq import Seq
>>> my_seq = Seq("AGTACACTGGT")
>>> dir(my_seq)
['__add__', '__class__', '__contains__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__',
 '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', 
'__len__', '__lt__', '__module__', '__ne__', '__new__', '__radd__', '__reduce__', '__reduce_ex__', '__repr__', 
'__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_data', 
'_get_seq_str_and_check_alphabet', 'alphabet', 'back_transcribe', 'complement', 'count', 'endswith', 'find', 
'lower', 'lstrip', 'reverse_complement', 'rfind', 'rsplit', 'rstrip', 'split', 'startswith', 'strip', 'tomutable',
 'tostring', 'transcribe', 'translate', 'ungap', 'upper']


일반적인 string에 대한 메소드들과 함께 Seq객체 특이적으로 나오는 메소드들이 있습니다.

바로 위에서 사용하였던 complement, reverse_complement 가 있으며, 이 tomutable, transcribe, translate 등이 Seq객체 특이적 메소드 입니다.

자세한 내용은 이후의 강좌들에서 자세히 다뤄보도록 하겠습니다.







파일 파싱(parsing)

생물정보학(bioinformatics) 을 하면서 생물학 데이터 파싱(parsing)은 가장 많이 접하게 될 일 입니다.

파싱(parsing) 이란 데이터에서 필요한 부분을 가져오는 작업을 뜻합니다.

생물학 데이터를 파싱 해오기 위해서, 

첫째로는 데이터가 어떠한 형식(format)으로 이루어져있는지 이해가 있어야 하며,

둘째로는 파싱할 프로그래밍 능력이 필요합니다.


그냥 기본적인 프로그래밍으로도 생물학 데이터 파일을 파싱 할 수는 있겠습니다만,

바이오파이썬 라이브러리를 이용하면 일이 훨씬 더 간결해 집니다.


실습으로는 Bio.SeqIO 모듈을 사용하여 FASTA파일과 GenBank파일을 파싱해보겠습니다.




FASTA 파일 파싱하기

Bio.SeqIO 모듈로 FASTA파싱을 하기 위해 아래의 예제 파일을 준비하겠습니다.


https://raw.githubusercontent.com/biopython/biopython/master/Doc/examples/ls_orchid.fasta



파일 내부를 보시면 94개나 되는 많은 수의 record를 볼 수 있습니다.

FASTA의 헤더인 ">" 를 기준으로 잘라 sequence를 가져오는 스크립트를 작성 할 수 도 있고,

아래와 같이 바이오파이썬 라이브러리를 사용 할 수도 있습니다.


다음과 같이 스크립트를 작성합니다.


from Bio import SeqIO for seq_record in SeqIO.parse("ls_orchid.fasta", "fasta"): print(seq_record.id) print(repr(seq_record.seq)) print(len(seq_record))


실행을 해보면,


gi|2765658|emb|Z78533.1|CIZ78533

Seq(’CGTAACAAGGTTTCCGTAGGTGAACCTGCGGAAGGATCATTGATGAGACCGTGG...CGC’, SingleLetterAlphabet())

740

...

gi|2765564|emb|Z78439.1|PBZ78439

Seq(’CATTGTTGAGATCACATAATAATTGATCGAGTTAATCTGGAGGATCTGTTTACT...GCC’, SingleLetterAlphabet())

592


와 같은 결과를 얻을 수 있습니다.


SeqIO 모듈을 사용하여 간편히 FASTA 파일을 파싱했습니다.





GenBank 파싱하기

Bio.SeqIO 모듈로 GenBank파싱을 하기 위해 아래의 예제 파일을 준비하겠습니다.


https://raw.githubusercontent.com/biopython/biopython/master/Doc/examples/ls_orchid.gbk


파일 내부를 보시면 NCBI에서 검색 결과 화면이 텍스트로 담겨져서 나와있습니다.


예제로 한 개만 보여드리자면 다음과 같습니다.


LOCUS       Z78533                   740 bp    DNA     linear   PLN 30-NOV-2006

DEFINITION  C.irapeanum 5.8S rRNA gene and ITS1 and ITS2 DNA.

ACCESSION   Z78533

VERSION     Z78533.1  GI:2765658

KEYWORDS    5.8S ribosomal RNA; 5.8S rRNA gene; internal transcribed spacer;

            ITS1; ITS2.

SOURCE      Cypripedium irapeanum

  ORGANISM  Cypripedium irapeanum

            Eukaryota; Viridiplantae; Streptophyta; Embryophyta; Tracheophyta;

            Spermatophyta; Magnoliophyta; Liliopsida; Asparagales; Orchidaceae;

            Cypripedioideae; Cypripedium.

REFERENCE   1

  AUTHORS   Cox,A.V., Pridgeon,A.M., Albert,V.A. and Chase,M.W.

  TITLE     Phylogenetics of the slipper orchids (Cypripedioideae:

            Orchidaceae): nuclear rDNA ITS sequences

  JOURNAL   Unpublished

REFERENCE   2  (bases 1 to 740)

  AUTHORS   Cox,A.V.

  TITLE     Direct Submission

  JOURNAL   Submitted (19-AUG-1996) Cox A.V., Royal Botanic Gardens, Kew,

            Richmond, Surrey TW9 3AB, UK

FEATURES             Location/Qualifiers

     source          1..740

                     /organism="Cypripedium irapeanum"

                     /mol_type="genomic DNA"

                     /db_xref="taxon:49711"

     misc_feature    1..380

                     /note="internal transcribed spacer 1"

     gene            381..550

                     /gene="5.8S rRNA"

     rRNA            381..550

                     /gene="5.8S rRNA"

                     /product="5.8S ribosomal RNA"

     misc_feature    551..740

                     /note="internal transcribed spacer 2"

ORIGIN      

        1 cgtaacaagg tttccgtagg tgaacctgcg gaaggatcat tgatgagacc gtggaataaa

       61 cgatcgagtg aatccggagg accggtgtac tcagctcacc gggggcattg ctcccgtggt

      121 gaccctgatt tgttgttggg ccgcctcggg agcgtccatg gcgggtttga acctctagcc

      181 cggcgcagtt tgggcgccaa gccatatgaa agcatcaccg gcgaatggca ttgtcttccc

      241 caaaacccgg agcggcggcg tgctgtcgcg tgcccaatga attttgatga ctctcgcaaa

      301 cgggaatctt ggctctttgc atcggatgga aggacgcagc gaaatgcgat aagtggtgtg

      361 aattgcaaga tcccgtgaac catcgagtct tttgaacgca agttgcgccc gaggccatca

      421 ggctaagggc acgcctgctt gggcgtcgcg cttcgtctct ctcctgccaa tgcttgcccg

      481 gcatacagcc aggccggcgt ggtgcggatg tgaaagattg gccccttgtg cctaggtgcg

      541 gcgggtccaa gagctggtgt tttgatggcc cggaacccgg caagaggtgg acggatgctg

      601 gcagcagctg ccgtgcgaat cccccatgtt gtcgtgcttg tcggacaggc aggagaaccc

      661 ttccgaaccc caatggaggg cggttgaccg ccattcggat gtgaccccag gtcaggcggg

      721 ggcacccgct gagtttacgc

//



이렇게 생긴 텍스트 파일에서 염기서열만 가져오는 스크립트를 작성하는것은 꽤나 성가신 일 입니다.


다음과 같이 스크립트를 작성합니다.


from Bio import SeqIO
for seq_record in SeqIO.parse("ls_orchid.gbk", "genbank"):
    print(seq_record.id)
    print(repr(seq_record.seq))
    print(len(seq_record))


실행을 해보면, 


Z78533.1

Seq(’CGTAACAAGGTTTCCGTAGGTGAACCTGCGGAAGGATCATTGATGAGACCGTGG...CGC’, IUPACAmbiguousDNA())

740

...

Z78439.1

Seq(’CATTGTTGAGATCACATAATAATTGATCGAGTTAATCTGGAGGATCTGTTTACT...GCC’, IUPACAmbiguousDNA())

592


와 같은 결과를 얻을 수 있습니다.


SeqIO 모듈을 사용하여 간편히 GenBank 파일을 파싱했습니다.




이외에도..

이외에도 바이오파이썬으로 파싱 할 수 있는 많은 데이터 들이 있습니다.

NCBI의 Entrez 와 ExPASy, SCOP 등이 있습니다.

자세한 내용은 향후 강좌에서 만나실 수 있습니다.



다음 강좌는 Sequence 객체에 대해 말씀드리겠습니다.

그럼 다음강좌에서 만나요~



--- 2019.03.13


안녕하세요 여러분~ 한주현입니다!


제가 BJ퍼블릭 출판사와 함께 


"바이오파이썬으로 만나는 생물정보학" 


을 출판하였습니다.



여러 예제들과 함께 준비하였습니다 ㅎㅎ 


자세한 내용은 아래 링크로 ㅎㅎ



생물정보학자 블로그 링크

https://korbillgates.tistory.com/211


출판사 링크

https://bjpublic.tistory.com/324


감사합니다!!

https://bjpublic.tistory.com/324





반응형

댓글