Skip to content

Biopython Motifs MEME #

Find similar titles

8회 업데이트 됨.

Edit

Structured data

Category
Programming

MEME #

MEME는 DNA 혹은 Protein 염기서열의 그룹핑된 모티프 (Motif)를 탐색해주는 프로그램이다. 초창기에는 단순히 분석 프로그램의 분석을 진행했지만 현재는 다양한 데이터베이스 및 팩키지 형태로 강력한 기능을 제공하고 있다. 입력 서열로는 FASTA형식의 염기서열 혹은 단백질 서열을 입력하여 분석을 진행한다. 분석 결과는 아래와 같은 포맷으로 출력이 된다.

*****************************************************************
MEME - Motif discovery tool
*****************************************************************
MEME version 3.0 (Release date: 2004/08/18 09:07:01)

맨 처음의 프로그램의 이름, 버전 정보를 담은 헤드라인이 출력된다.

*****************************************************************
TRAINING SET
*****************************************************************
DATAFILE= INO_up800.s
ALPHABET= ACGT
Sequence name  Weight Length  Sequence name         Weight Length
-------------  ------ ------  -------------         ------ ------
CHO1           1.0000    800  CHO2                  1.0000    800
FAS1           1.0000    800  FAS2                  1.0000    800
ACC1           1.0000    800  INO1                  1.0000    800
OPI3           1.0000    800
*******************************************************************

다음 블럭에서는 입력된 서열 정보를 보여준다. 각각의 서열 이름과 길이 서열 정보를 보여준다.

*******************************************************************
COMMAND LINE SUMMARY
*******************************************************************

This information can also be useful in the event you wish to report a problem with the MEME software.

command: meme -mod oops -dna -revcomp -nmotifs 2 -bfile     yeast.nc.6.freq INO_up800.s
...

그 다음으로는 모티프 분석을 위해 입력한 코맨드(command line) 정보를 보여준다. 차후 재 실행시에 참고하면 된다.

************************************************************************
MOTIF  1        width =   12   sites =   7   llr = 95   E-value = 2.0e-001
********************************************************************
--------------------------------------------------------------------
        Motif 1 Description
--------------------------------------------------------------------
Simplified        A  :::9:a::::3:
pos.-specific     C  ::a:9:11691a
probability       G  ::::1::94:4:
matrix            T  aa:1::9::11:

그 다음 영역에서는 각 찾은 모티프에 대한 세부 정보를 보여준다. 모티프의 길이. 찾은 사이트의 수 등 각 모티프 서열에 대한 기본 정보를 담고 있다.

Biopython Bio.Motifs를 이용한 MEME 파일 파씽 #

MEME 프로그램 수행 후 생성된 파일은 역시 biopython의 Biopython/Motifs 모듈을 통해서 파싱을 할 수 가 있다.

>>> from Bio import motifs

먼저 파일을 읽어어온다. open()함수를 이용하여 파일핸들을 생성하고 생성된 핸들을 motifs.parse()에 넣어주면 된다. 이 때 "meme"라는 인자를 넣어서 입력파일이 MEME 포맷인것을 명시해준다.

>>> handle = open("meme.dna.oops.txt")
>>> record = motifs.parse(handle, "meme")
>>> handle.close()

이제 파일에서 원하는 정보를 추출할 준비가 되었다. 먼저 버전 및 데이터 파일을 출력해보면 다음과 같다.

>>> record.version
'3.0'
>>> record.datafile
'INO_up800.s'

위에서도 언급했지만 입력 시 사용된 커맨드를 추출할 수도 있다.

>>> record.command
'meme -mod oops -dna -revcomp -nmotifs 2 -bfile yeast.nc.6.freq INO_up800.s'
>>> record.alphabet
IUPACUnambiguousDNA()
>>> record.sequences
['CHO1', 'CHO2', 'FAS1', 'FAS2', 'ACC1', 'INO1', 'OPI3']

다음으로는 각 레코드에 대한 정보 (즉, 각각의 모티프 서열)에 대한 정보를 추출할 수 있다. 파이썬의 기본함수 중 하나인 len()함수를 이용하여 전체 레코드 서열의 크기를 확인한다.

>>> len(record)
2

또한 리스트의 인덱싱 기능을 이용할 수 있다. record[0]과 같이 인덱싱을 사용하여 첫 번째 레코드(모티프 오브젝트)를 추출할 수 있다. 아래와 같이 motif라는 변수에 저장된 모티프는 .consensus, .degenerate_consensus 등 같은 다양한 메서드를 사용할 수 있다.

>>> motif = record[0]
>>> print(motif.consensus)
TTCACATGCCGC
>>> print(motif.degenerate_consensus)
TTCACATGSCNC
>>> motif.num_occurrences
7
>>> motif.length
12
>>> evalue = motif.evalue
>>> print("%3.1g" % evalue)
0.2
>>> motif.name
'Motif 1'

각 모티프에 대한 다양한 속성 정보도 추출해 볼 수 있는데 모티프의 길이, evalue, 이름 정보등을 이미 정의된 이름값을 통해서 추출하면 된다.

>>> motif = record['Motif 1']

위에서는 인덱싱을 사용하였지만 또 다른 방법으로 추출할 수 도 있다. 바로 딕셔너리(사전) 기능을 이용하면 된다. 사전에 이미 정의된 'Motif 1' 과 같이 해당 이름 값을 통해서도 추출하면 된다.

>>> len(motif.instances)
7

찾아진 서열 모티프 정보는 .instances라는 속성에 저장이 된다. 그러면 각 인스턴스에 해당하는 정보를 추출하면 된다. 추출 예제는 다음과 같다.

>>> motif.instances[0]
Instance('TTCACATGCCGC', IUPACUnambiguousDNA())
>>> motif.instances[0].motif_name
'Motif 1'
>>> motif.instances[0].sequence_name
'INO1'
>>> motif.instances[0].start
620
>>> motif.instances[0].strand
'-'
>>> motif.instances[0].length
12
>>> pvalue = motif.instances[0].pvalue
>>> print("%5.3g" % pvalue)
1.85e-08

Suggested Pages #

0.0.1_20230725_7_v68