1

私はこの形式のデータを持っています:

> abc12
ATCGACAG

> def34
ACCGACG

>で始まる行を値として、各遺伝子を辞書に保存しました。したがって、辞書は{'abc12':'ATCGACAG'など}のようなものです。

ここで、各遺伝子を比較して、各サイトのA、T、C、またはGの数をカウントできるようにしたいと思います。

私が思いつくことができる唯一のことは、辞書を各ヌクレオチドサイトのリストに分割し、カウンターでzip()を使用することです。これが最善の方法ですか?もしそうなら、辞書を各サイトのリストに分割するにはどうすればよいですか?

4

3 に答える 3

4

使用collections.Counter

>>> from collections import Counter
>>> Counter('ATCGACAG')
Counter({'A': 3, 'C': 2, 'G': 2, 'T': 1})
>>> Counter('ACCGACG')
Counter({'C': 3, 'A': 2, 'G': 2})
于 2012-09-27T22:39:56.437 に答える
1

Biopythonを使用しない理由はありますか?

from Bio import AlignIO
alignment =AlignIO.read("alignment.fas", "fasta")
n=0
while n<len(alignment[0]):
    A=alignment[:,n].count('A')
    C=alignment[:,n].count('C')
    G=alignment[:,n].count('G')
    T=alignment[:,n].count('T')
    gap=alignment[:,n].count('-')

    print "at position %s there are %s A's, %s C's, %s G's, %s T's and %s gaps" % (n, A, C, G, T, gap)
    n=n+1

実際のアラインメントがあることを確認してください(つまり、シーケンスは同じ長さです)。
psprintステートメントのフォーマットが醜いことをお詫びします。

これは戻ります

at position 0 there are 2 A's, 0 C's, 0 G's, 0 T's and 0 gaps
at position 1 there are 0 A's, 1 C's, 0 G's, 1 T's and 0 gaps
at position 2 there are 0 A's, 2 C's, 0 G's, 0 T's and 0 gaps
at position 3 there are 0 A's, 0 C's, 2 G's, 0 T's and 0 gaps
at position 4 there are 2 A's, 0 C's, 0 G's, 0 T's and 0 gaps
at position 5 there are 0 A's, 2 C's, 0 G's, 0 T's and 0 gaps
at position 6 there are 1 A's, 0 C's, 0 G's, 0 T's and 1 gaps
at position 7 there are 0 A's, 0 C's, 2 G's, 0 T's and 0 gaps
于 2012-09-28T01:51:55.343 に答える
0
s1 = "ATCGACAG"
s2 = "ACCGACG"   
alignment = [s1[i] if s1[i] == s2[i] else "-" for i in range(len(min([s1,s2],key=len)))]
print "".join(alignment)
A-CGAC-
于 2012-09-27T23:44:59.433 に答える