Skip to content

Biopython Motifs #

Find similar titles

10회 업데이트 됨.

Edit
  • 최초 작성자
    Kyooyeol Lee
  • 최근 업데이트
    yeye

Structured data

Category
Programming

Bio.Motifs #

Bio.motifs 패키지는 서열의 모티프를 분석할 때 사용된다. AlignAce 혹은 MEME 같은 프로그램을 통해 모티프 서열 분석을 진행할 수 있는데 Bio.motifs 패키지에서는 이들 프로그램의 결과를 쉽게 읽어 들일 수 있는 다양한 기능을 제공한다.

먼저 해당 패키지를 사용하기 위해서는 아래와 같이 단순히 호출만 해주면 된다. Biopython에 포함된 motif 패키지를 호출만 하면 되는 것이다.

>>> from Bio import motifs

먼저 간단한 예를 만들어 보자. 먼저 motif 역시 서열 정보이기 때문에 from Bio.Seq import Seq를 이용하여야 한다. 그 후 각 서열 생성을 위해 Seq("서열") 기능을 통해 서열을 만들고 이를 하나의 인스턴스. 즉, 서열의 리스트로 만들어준다.

>>> from Bio.Seq import Seq
>>> instances = [Seq("TACAA"),
...              Seq("TACGC"),
...              Seq("TACAC"),
...              Seq("TACCC"),
...              Seq("AACCC"),
...              Seq("AATGC"),
...              Seq("AATGC"),
...             ]

만들어진 인스턴스를 motifs.create() 메소드를 이용하여 아래와 같이 실행하면 모티프 오브젝트가 생성된다.

>>> m = motifs.create(instances)
>>> print(m)
TACAA
TACGC
TACAC
TACCC
AACCC
AATGC
AATGC
<BLANKLINE>

모티브 오브젝트의 길이는 len() 함수를 통해 구할 수 있다.

>>> len(m)
5

그 후 m.counts를 통해서 서열에 대해 각 염기의 빈도 수를 출력해 볼 수도 있다. 주어진 입력 서열의 위치 별 빈도가 출력된다. 다음의 예는 모티프 서열의 위치별 A, C, G, T 빈도 정보를 보여주고 있다.

>>> print(m.counts)
        0      1      2      3      4
A:   3.00   7.00   0.00   2.00   1.00
C:   0.00   0.00   5.00   2.00   6.00
G:   0.00   0.00   0.00   3.00   0.00
T:   4.00   0.00   2.00   0.00   0.00

또 다른 방법으로 사전(딕셔너리) 기능을 이용하는 것이 있다. counts에 저장된 사전에 관심있는 염기의를 넣어주면 된다. 결과는 리스트로 반환된다.

>>> m.counts['A']
[3, 7, 0, 2, 1]

반환 값이 이중 리스트이기 때문에 [1, 2]의 형태로 추출 할 수도 있다. 즉 원하는 염기서열 (예 "T") 과 인덱스 값 (예 "0")을 통해 값을 추출할 수도 있다.

>>> m.counts['T', 0]
4
>>> m.counts['T', 2]
2
>>> m.counts['T', 3]
0

또한, A, C, G, T에 대한 빈도 수를 한번에 추출할 수도 있다.

>>> m.counts[:, 3]
{'A': 2, 'C': 2, 'T': 0, 'G': 3}

모티프 오브젝트는 앞서 언급했듯 서열의 리스트이다. m.alphabet 기능을 이용하여 모티프 오브젝트 서열이 어떤 유형인지 확인하거나 원하는 형태로 추출 하고 정렬을 할 수 있다.

>>> m.alphabet
IUPACUnambiguousDNA()

>>> m.alphabet.letters
'GATC'
>>> sorted(m.alphabet.letters)
['A', 'C', 'G', 'T']
>>> m.counts['A',:]
(3, 7, 0, 2, 1)
>>> m.counts[0,:]
(3, 7, 0, 2, 1)

주어진 입력서열에 대하여 모티프 서열의 consensus를 만들어 볼 수 있다. 입력 서열의 발현 빈도에 따라 그 값을 만들어 준다. 가장 많이 나타나는 서열에 대한 대표 값 및 그 반대의 값, 그리고 이들을 이용한 ambiguous 서열도 만들어 볼 수 있다.

>>> m.consensus
Seq('TACGC', IUPACUnambiguousDNA())

>>> m.anticonsensus
Seq('GGGTG', IUPACUnambiguousDNA())

>>> m.degenerate_consensus
Seq('WACVC', IUPACAmbiguousDNA())

모티프 역시 서열 오프젝트이기 때문에 다른 서열오브젝트와 마찬가지로 다양한 기능을 수행할 수 있다. 즉 서열 패키지 Bio.Seq의 Seq를 상속받았기 때문에 그에 해당하는 기능을 사용할 수 있다. 간단한 예로 .reverse_complement() 함수을 아래와 같이 사용할 수 있다.

>>> r = m.reverse_complement()
>>> r.consensus
Seq('GCGTA', IUPACUnambiguousDNA())
>>> r.degenerate_consensus
Seq('GBGTW', IUPACAmbiguousDNA())
>>> print(r)
TTGTA
GCGTA
GTGTA
GGGTA
GGGTT
GCATT
GCATT

이렇게 얻어진 결과는 빈도 로고 이미지로 만들 수 있다. 많은 논문에서 인용되기도 하는데 각 염기서열의 포지션에 대한 빈도수를 각 염기의 크기로 나타내어 한 눈에 보기 쉽게 보여준다. Biopython에는 .weblogo()의 기능을 이용하여 간단히 생성할 수 있다.

>>> m.weblogo("mymotif.png")

Incoming Links #

Related Data Sciences #

Suggested Pages #

0.0.1_20230725_7_v68