2017-01-10 6 views
3

나는 DNA 서열과 서열의 이름을 가진 FASTA 파일을 가지고 있으며, 나는 중첩 점수의 행렬을 만들 필요가있다. Biopython에서 모듈 pairwise2을 발견했습니다.이 모듈은 꽤 잘하는 것 같습니다. 내 시퀀스가 ​​이미 정렬 된 것을 제외하고 pairwise2을 사용하면 시퀀스가 ​​매우 길어지며 모든 정렬에 대해 동일한 오버랩 스코어를 얻게됩니다. 그래서 내 질문은 시퀀스를 다시 정렬하지 않고 겹치는 점수를 얻는 방법은 무엇입니까? 내가 적격 심사로 여기에 FASTA 파일에서 첫 번째와 두 번째 순서를 사용했습니다중복 스코어 행렬 biopython

from Bio.Alphabet import IUPAC 
from Bio import SeqIO 
from Bio import pairwise2 

fasta_file = SeqIO.parse('unambiguous.fasta', 'fasta', alphabet=IUPAC.ambiguous_dna) 

all_seq = [] 
for seq_record in fasta_file: 
    all_seq += [str(seq_record.seq)] 

compare = pairwise2.align.globalms(all_seq[0], all_seq[1], 2, -1, -1, 0) 
print(compare) 

: 여기 는 내가 지금까지 가지고있는 것입니다. 스크립트에서 볼 수 있듯이, 2 점, 불일치 및 갭 -1에 대한 보상이 있어야합니다. 두 서열 모두 같은 위치에 간격이있을 때 0이 보상이되어야합니다. 나는 4 위 자리에 0을 넣으면 원하는 결과를 얻지 못할 것이지만 그 문제에 대한 해결책이 아직 없다는 것을 알고 있습니다. 이 시점에서 정렬 문제는 더 커 보인다. pairwise2 또는 다른 파이썬/biopython 모듈에 대한 경험이있는 사람이라면 겹치는 점수를 얻을 수 있습니까?

+0

'unambiguous.fasta'에는 정렬 된 시퀀스가 ​​포함되어 있습니까? –

+0

질문을 편집하여 문제를 나타내는 예제 입력을 포함 시키십시오. – MattDMo

답변

0

내가 이해하는 한, unambiguous.fasta에는 정렬 된 유전자 서열이 포함되어 있습니다. 당신은 당신의 요구에 맞는 스코어링 기능을 사용하여 점수를 할 수 있습니다

from itertools import starmap, combinations 


def score(seq1, seq2): 
    def score_(a, b): 
     return (0 if a == b == "-" # both are gaps 
       else -1 if a != b # mismatch or gap 
       else 2)   # match 

    return sum(starmap(score_, zip(seq1, seq2))) 
당신은 사람들이 일반적으로하는 것처럼, 모호한 기지와 위치를 무시하도록 수정 할 수 있습니다

.

실행되면
sequences = SeqIO.parse('unambiguous.fasta', 'fasta', alphabet=IUPAC.ambiguous_dna) 
scores = starmap(score, combinations(sequences, 2)) 

, scores는 (그것이 지연 반복자이다) 점수 페어 와이즈 행렬의 평평한 상부 삼각형을 생성한다 : 여기서 모든 서열 비교 ​​깔끔한 방식이다. score은 매우 빠르게 작동하지만, 수천 개의 시퀀스 (즉, 계산할 수백만 개의 비교)가있는 경우 Cython 또는 Numba를 사용하여 다시 구현할 수 있습니다.

편집 파이썬 2.x에서는 zipizip으로 바꿀 수 있습니다.

+0

고맙습니다. 트릭을 간단하고 이해하기 쉬운 방식으로 수행하는 것 같습니다. 무슨 뜻인지 알기 원하면이 점수를 인쇄해서는 안됩니다. – JDh

+0

@ JDh 환영합니다. 대답에서 나는 "게으른 반복자라는 점에 유의하십시오."라고 썼습니다. 하나씩 반복하여 점수를 매기거나 (예 : 모든 점수를 한 번에 RAM에로드하지 않으려는 경우) 또는 비 게으른 컨테이너로 변환 할 수 있습니다 (예 : '목록 (점수)'. 파이썬은 게으른 평가를 많이 사용합니다. 언어를 효율적으로 사용하려면 개념에 익숙해야합니다. –