Biopython
Motifs
#
Find similar titles
- 최초 작성자
- 최근 업데이트
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")