私は、Rosalind BioinformaticsのWebサイト(http://rosalind.info/problems/cons/)の "Consensus nd Profile"という問題に取り組んでいます。ウェブサイトのサンプル入力を使用してコードを試しましたが、出力がサンプル出力と一致しています。しかし、大規模なデータセットを試してみると、ウェブサイトは私の出力が間違っていると言いました。私の問題がどこにあるのかを誰かに知らせることができますか?ありがとうございました!Rosalindのコンセンサスとプロフィールpython
サンプル入力:
>Rosalind_1
ATCCAGCT
>Rosalind_2
GGGCAACT
>Rosalind_3
ATGGATCT
>Rosalind_4
AAGCAACC
>Rosalind_5
TTGGAACT
>Rosalind_6
ATGCCATT
>Rosalind_7
ATGGCACT
私は、DNAの文字列を抽出して(より大きなデータセットと私の裁判はので、私はここに私のコードを省略し、この段階で正しい)リストと呼ばれる文字列にそれらを保存した:
['ATCCAGCT', 'GGGCAACT', 'ATGGATCT', 'AAGCAACC', 'TTGGAACT', 'ATGCCATT', 'ATGGCACT']
その後私のコード:
#convert strings into matrix
matrix = []
for i in strings:
matrix.append([j for j in i])
M = np.array(matrix).reshape(len(matrix),len(matrix[0]))
Mサンプル入力のために次のようになります。
その後[['A' 'T' 'C' 'C' 'A' 'G' 'C' 'T']
['G' 'G' 'G' 'C' 'A' 'A' 'C' 'T']
['A' 'T' 'G' 'G' 'A' 'T' 'C' 'T']
['A' 'A' 'G' 'C' 'A' 'A' 'C' 'C']
['T' 'T' 'G' 'G' 'A' 'A' 'C' 'T']
['A' 'T' 'G' 'C' 'C' 'A' 'T' 'T']
['A' 'T' 'G' 'G' 'C' 'A' 'C' 'T']]
マイコード:
#convert string matrix into profile matrix
A = []
C = []
G = []
T = []
for i in range(len(matrix[0])):
A_count = 0
C_count = 0
G_count = 0
T_count = 0
for j in M[:,i]:
if j == "A":
A_count += 1
elif j == "C":
C_count += 1
elif j == "G":
G_count += 1
elif j == "T":
T_count += 1
A.append(A_count)
C.append(C_count)
G.append(G_count)
T.append(T_count)
profile_matrix = {"A": A, "C": C, "G": G, "T": T}
for k, v in profile_matrix.items():
print k + ":" + " ".join(str(x) for x in v)
#get consensus string
P = []
P.append(A)
P.append(C)
P.append(G)
P.append(T)
profile = np.array(P).reshape(4, len(A))
consensus = []
for i in range(len(A)):
if max(profile[:,i]) == profile[0,i]:
consensus.append("A")
elif max(profile[:,i]) == profile[1,i]:
consensus.append("C")
elif max(profile[:,i]) == profile[2,i]:
consensus.append("G")
elif max(profile[:,i]) == profile[3,i]:
consensus.append("T")
print "".join(consensus)
は、これらのコードは、正しいサンプル出力与える:
A:5 1 0 0 5 5 0 0
C:0 0 1 4 2 0 6 1
T:1 5 0 0 0 1 1 6
G:1 1 6 3 0 1 0 0
ATGCAACT
をしかし、私は、より大きなデータセットをしようとしたときに、ウェブサイトは、私の答えは間違っていたと述べました...誰かが私が間違っているところを指摘できますか? (私は初心者です、あなたの忍耐ありがとう!)
フォーマットがサンプル出力と正確に一致することを確認してください。つまり、各行にコロンの後ろにスペースを追加し、コンセンサス文字列を一番上に置き、ヌクレオチドを「ACGT」の順に並べることを意味します。 –
あなたはこれを見ましたか? http://stackoverflow.com/questions/38586800/python-multiple-consensus-sequences/ –
@C_Z_ああ私はそれを以前に気付かなかった...チップをありがとう! – largecats