2017-01-11 6 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,CおよびGという文字は3つのアルファベットすべてに共通であるため、配列ACGCGACAGAはDNA、RNAまたはタンパク質配列の両方でありうる。他の知識がなければ、どちらが最良のマッチであるかを推定することは不可能である。

次のコードは、与えられたFASTAファイルの最初のレコードが属するすべてのアルファベットプリントアウトします:だから、

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のためにこれを印刷します:

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

をしかし、シーケンスMKQHKAMIVALIVICITAVVAALVTRKDLCEVHIRTGQTEVAVFXの場合:

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

これはすでに私のpを解決します汚れ。ありがとうございました。私はもっ​​と多くは期待できないことを知っていますが、多くの場合、多くのシーケンスがあると、あなたのコードはそれをかなり釘付けにします。 – romeasy

関連する問題