본문 바로가기
WORK IN U.S.A/파이썬(Python)

Reverse complement (역상보서열) 파이썬으로 짜기

by 김씨아내신씨 2024. 6. 3.

Python 공부를 정리를 하지않고 하다보니 자꾸 까먹어서 여기다 정리를 해놓으려 한다.  

Primer 를 Design 하다 보면 가장 많이 사용하게 되는 기능이 Reverse complement 서열을 갖고오는 것이다. 

실제로 가장 많이 사용하는 사이트는 이것이지만, https://www.bioinformatics.org/sms/rev_comp.html

 

Reverse Complement

Reverse Complement converts a DNA sequence into its reverse, complement, or reverse-complement counterpart. You may want to work with the reverse-complement of a sequence if it contains an ORF on the reverse strand. [home]

www.bioinformatics.org

youtube 의 도움을 받아 (https://www.youtube.com/watch?v=t9C1g6ld-ng) Python 으로 코드를 짜보도록 하려한다. 

Reverse complement 서열을 만들기 위해서는 먼저 서열을 상보적(Complement)인걸 만들고, 순서를 바꾸면 (Reverse)된다 

def complement(DNA):
    comp = {'A':'T', 'C':'G', 'G':'C', 'T':'A'}
    compDNA = ''
    for b in DNA : 
        compDNA += comp[b]
    return compDNA

이를 위해 먼저 complement 함수를 제작 한다.

1번째 줄은 Def 기능을 이용해 complement 라는 함수를 제작 DNA 라 적힌 자리에 서열을 넣으면 된다. 

2번째 줄은 comp라는 dictionary 을 생성한다.  이는 DNA의 각 염기를 그 상보적인 염기로 mapping 한다

  • 'A' (아데닌)은 'T' (티민)과 상보적.
  • 'C' (시토신)은 'G' (구아닌)과 상보적.
  • 'G' (구아닌)은 'C' (시토신)과 상보적.
  • 'T' (티민)은 'A' (아데닌)과 상보적.

3번째 줄 compDNA = ' '

이 줄은 빈 string(문자열) compDNA를 초기화한다. 이는 상보적인 DNA 서열을 저장하는 데 사용됩니다.

4번째 줄 for b in DNA 의 경우 loop를 돌리는 것인데 DNA 로 넣은 서열중 한개의 서열을 comp라는 dictionary에서 찾아 compDNA 에 넣는다는 의미이다. 

이 떄 compDNA += comp[b] 의 의미는 compDNA = compDNA + comp[b]와 같다.

예를들어 아래와 같은 식으로 계속 추가되는 의미이며 concatenate이다.  

s = "Hello"
s += " World"
# s is now "Hello World"

 

따라서 함수를 돌려보면 아래와 같이 상보적인 서열이 나오게 된다. 

다음으로 reverse 함수를 만들어보자 

def reverse(DNA):
    return DNA[::-1]

이 함수는 더 간단하다. 

이 줄은 입력된 DNA 문자열을 역순으로 뒤집어서 반환한다. 여기서 사용된 [::-1]은 파이썬의 문자열 (string) slicing 기법이다.

문자열 슬라이싱 [::-1] 설명
DNA[start:end:step] 형태로 슬라이싱이 이루어짐.
start와 end는 생략되었으므로 문자열의 시작부터 끝까지를 의미함.
step이 -1이므로 문자열을 끝에서부터 시작하여 역순으로 하나씩 가져옴.

따라서 실행해보면 

위와같이 뒤집힌 서열이 나온다. 

이제 이 둘을 합친 함수를 만들면,

def reverse_complement(DNA):
    compDNA = complement(DNA)
    revCompDNA = reverse(compDNA)
    return revCompDNA

이는 우리가 넣은 DNA 서열을 먼저 상보적으로 바꾼 뒤 역으로 뒤집어 결국 우리가 원하는 reverse complement 서열을 만들 수 있다. 

물론 이 복잡한 함수들도 biopython으로 한방에 할 수도 있기도 하다. 이는 다음기회에..

728x90