2017-01-11 8 views
3

에서 견적합니다. .fasta 파일을 Biopython으로 읽고 DNA, RNA 또는 단백질을 처리하는 경우 패키지 예상치를 얻으려고합니다. 지금까지,이 같은 데이터를 읽어Biopython의 알파벳을 fasta 파일

with open('file.fasta', 'r') as f: 
    for seq in sio.parse(f, 'fasta'): 
     # do stuff, depending on alphabet 

내 문제는 내가이 .fasta 파일에서 찾을 수 시퀀스의 종류를 모르는 지금이다. 단백질, DNA 또는 RNA 일 수 있지만 알파벳의 문자 수를 알아야합니다.

Biopython으로 시퀀스의 알파벳을 "추정"할 수있는 방법이 있습니까? 저는 알파벳 ACGT를 포함하는 단백질을 가지고있어서 알파벳을 추정하고 싶다는 것을 알고 있습니다.

답변

5

작은 시퀀스의 경우 매우 어렵습니다. 예를 들어, A, CG 문자는 3 개의 알파벳 모두에 공통이므로, 서열 ACGCGACAGA은 DNA, RNA 또는 단백질 서열 일 수있다. 다른 지식이 없으면 어떤 것이 가장 일치하는지 평가하는 것은 불가능합니다.

from Bio import SeqIO 
from Bio.Alphabet.IUPAC import * 

alphabets = [extended_protein, ambiguous_dna, unambiguous_dna, extended_dna, ambiguous_rna, unambiguous_rna] 

def validate(seq, alphabet): 
    "Checks that a sequence only contains values from an alphabet" 
    # inspired by https://www.biostars.org/p/102/ 
    leftover = set(str(seq).upper()) - set(alphabet.letters) 
    return not leftover 

with open("example.fasta") as handle: 
    first_record = list(SeqIO.parse(handle, "fasta"))[0] 
    valid_alphabets = [str(alphabet) for alphabet in alphabets if validate(first_record.seq, alphabet)] 
    print("Valid alpahabet(s) for fasta file: {}".format(', '.join(valid_alphabets))) 

그래서, 순서 ACGCGACAGA이 인쇄됩니다 :

모든 알파벳을 인쇄 할 다음 코드는 주어진 FASTA 파일의 첫 번째 레코드가 속하는

Valid alpahabet(s) for fasta file: ExtendedIUPACProtein(), IUPACAmbiguousDNA(), IUPACUnambiguousDNA(), ExtendedIUPACDNA(), IUPACAmbiguousRNA(), IUPACUnambiguousRNA() 

그러나 시퀀스 MKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVFX의 경우 :

Valid alpahabet(s) for fasta file: ExtendedIUPACProtein() 
+1

이것은 이미 내 p를 해결합니다. 흠집. 고맙습니다. 나는 더 많은 것을 기대할 수 없다는 것을 알고 있지만, 많은 시퀀스가있을 때 대부분의 경우에 코드가 꽤 많이 내려 간다. – romeasy