python3
1data = ["DDDDDDDDDD","DDDDDDDDDE","DDDDDEEEEE","DDDDDDDDDF","DDDDDEEEEF", 2 "DDDDDEEEFF","IIIILLLLVV","PPPPWWWWSS","DVYATKPCRH","LLLL" 3 ,"LLLL------"] 4 5 6#(1)アライメントの長さを計測し、各サイトの配列数も計上する。 7alignment_num = len(data) 8num = 7 9string_1 = data[num] 10sequense_num = len(string_1) 11print("アライメントの長さは"+str(alignment_num)+"で、サイト番号が" +str(num)+"の配列数は"+str(sequense_num)+"個である。") 12 13#(2)試験的にサイト7の保存度を算出してみる。 14amino_acid_type = "STYGAVLIFDNEQMCHKPWR" 15amino_acid_frequency = {} 16amino_acid_num = [] 17result_num = {} 18for test in amino_acid_type: 19 result = string_1.count(test) 20 if result > 0 : 21 frequency = (result/sequense_num) 22 amino_acid_frequency.setdefault(test,frequency) 23 amino_acid_num.append(test) 24 result_num.setdefault(test,result) 25 print("サイト中に"+test+"のアミノ酸が"+str(result)+"個存在していて、頻度は"+str(frequency)+"である") 26 gap = "-" 27 result_2 = string_1.count(gap) 28 if result_2 > 0: 29 print("サイト中のgapの数は"+str(result_2)+"個です。") 30 else: 31 continue 32print("この配列中には、" + str(len(amino_acid_num)) + "個の種類のアミノ酸がある。") 33print("この下の辞書には、分母のkに代入する各アミノ酸の個数が記録されている。") 34print(result_num) 35print("この下の辞書には、分母のnに代入する各アミノ酸に対応する頻度が計算されている。") 36print(amino_acid_frequency) 37keys_for_k = [e for e, w in result_num.items() ] 38keys_for_n = [k for k, v in amino_acid_frequency.items()] 39print(keys_for_k) 40 41denominator_half = [] 42for i in range (2): 43 paramate = 0 44 for string_2 in string_1[paramate:sequense_num-1]: 45 for string_3 in keys_for_k: 46 paramate += 1 47 if string_3 in string_2: 48 k_value = result_num[string_3] 49 #print(k_value) 50 n_value = amino_acid_frequency[string_3] 51 #print(n_value) 52 denominator_1 = (1/alignment_num) * (1/(k_value * n_value)) 53 #print(denominator_1) 54 denominator_half.append(denominator_1) 55 else: 56 continue 57 58print(len(denominator_half)) 59print(denominator_half)
#####質問
質問を再編集しました。今回やりたいことを具体的に記載します。
私はこのコードでマルチプルアライメントされたアミノ酸の保存度を計算しようと試みています。その際に、valder式を用いていて、この式の分母を計算する段階にいます。
ここで、コードの「denominate_half = []」、以下のfor文の中で「paramate = 0」の値を、for文が回るたびに更新していきたいと考え、上記のようなコードを書きました。しかし、paramateの値が更新されていなくて困っています。
このコードのどの部分が間違っているのかわかりません。
ご回答をいただいた方の文章中に、このコードが正常に動いていないのでは?と、ご指摘があったので、参考までに、以下に実行結果を記載します。
#####実行結果
アライメントの長さは11で、サイト番号が7の配列数は10個である。
サイト中にSのアミノ酸が2個存在していて、頻度は0.2である
サイト中にPのアミノ酸が4個存在していて、頻度は0.4である
サイト中にWのアミノ酸が4個存在していて、頻度は0.4である
この配列中には、3個の種類のアミノ酸がある。
この下の辞書には、分母のkに代入する各アミノ酸の個数が記録されている。
{'S': 2, 'P': 4, 'W': 4}
この下の辞書には、分母のnに代入する各アミノ酸に対応する頻度が計算されている。
{'S': 0.2, 'P': 0.4, 'W': 0.4}
['S', 'P', 'W']
18
[0.05681818181818182, 0.05681818181818182, 0.05681818181818182, 0.05681818181818182, 0.05681818181818182, 0.05681818181818182, 0.05681818181818182, 0.05681818181818182, 0.2272727272727273, 0.05681818181818182, 0.05681818181818182, 0.05681818181818182, 0.05681818181818182, 0.05681818181818182, 0.05681818181818182, 0.05681818181818182, 0.05681818181818182, 0.2272727272727273]
回答1件
あなたの回答
tips
プレビュー