1. ホーム
  2. python

[解決済み] Pythonを用いたDNA鎖の逆相補性解析

2022-02-08 04:15:57

質問

DNA配列があり、Pythonを使ってその逆相補鎖を取得したいのですが、どうすればよいですか?CSVファイルの1つのカラムにあり、同じファイルの別のカラムに逆相補鎖を書きたいと思います。厄介なのは、A, T, G, C 以外を含むセルがいくつかあることです。このコード片で逆相補鎖を得ることができました。

def complement(seq):
    complement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'} 
    bases = list(seq) 
    bases = [complement[base] for base in bases] 
    return ''.join(bases)
    def reverse_complement(s):
        return complement(s[::-1])

    print "Reverse Complement:"
    print(reverse_complement("TCGGGCCC"))

しかし、以下のコードで、補数辞書に存在しない項目を探そうとすると、最後の基底の補数を取得するだけです。反復処理をしていないのです。どうしたら直るのか知りたいです。

def complement(seq):
    complement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'} 
    bases = list(seq) 
    for element in bases:
        if element not in complement:
            print element  
        letters = [complement[base] for base in element] 
        return ''.join(letters)
def reverse_complement(seq):
    return complement(seq[::-1])

print "Reverse Complement:"
print(reverse_complement("TCGGGCCCCX"))

解決方法は?

その get メソッドを使用すると、キーが辞書にない場合、デフォルト値を指定することができます。事前準備として、'ATGC'でない塩基をすべて一文字(または句読点や数字など、シーケンスに表示されないもの)にマップし、シーケンスを反転させてから一文字の代替品をオリジナルに置き換えます。 あるいは、最初に逆順にしてから、次のようなものを検索して置き換えることもできます。 sniins .

alt_map = {'ins':'0'}
complement = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A'} 

def reverse_complement(seq):    
    for k,v in alt_map.iteritems():
        seq = seq.replace(k,v)
    bases = list(seq) 
    bases = reversed([complement.get(base,base) for base in bases])
    bases = ''.join(bases)
    for k,v in alt_map.iteritems():
        bases = bases.replace(v,k)
    return bases

>>> seq = "TCGGinsGCCC"
>>> print "Reverse Complement:"
>>> print(reverse_complement(seq))
GGGCinsCCGA