【发布时间】:2021-08-04 20:18:21
【问题描述】:
我有一个序列列表:
CAGGTAGCCA
CCGGTCAGAT
AGGGTTTGAT
TTGGTGAGGC
CAAGTATGAG
ACTGTATGCA
CTGGTAACCA
每个序列有 10 个核苷酸长。我想计算每个二核苷酸位置的 AA、CC、CG ..etc 的二核苷酸频率。
例如,第一两列将有这些碱基 CA、CC、AG、TT 等,第二两列应该是 AG、CG、GG、TG 等。虚拟输出应该是这样的:
AA 0.25 0.34 0.56 0.43 0.00 0.90 0.45 0.34 0.31 0.01
CC 0.45 0.40 0.90 0.00 0.40 0.90 0.30 0.25 0.2 0.10
GC 0.00 0.00 0.34 1.00 0.30 0.30 0.35 0.90 0.1 0.30
TC 0.24 0.56 0.00 0.00 1.00 0.34 0.45 0.35 0.36 0.45
AA、CC、GC和TC可以是任何二核苷酸组合。
我的尝试:
import itertools
hl = []
#making all possible dinucleotide combinations
bases=['A','T','G','C']
k = 2
kmers = [''.join(p) for p in itertools.product(bases, repeat=k)]
kmers = dict.fromkeys(kmers, 0)
print(kmers)
for i in range(9):
hl.append(kmers)
# my seq file
f = open("H3K27ac.seq")
nLines = 0
for line in f:
id = 0
# trying to read dinucleotide at each loop
for (fst, sec) in zip(line[0::2], line[1::2]):
id = id + 1
hl[id][fst+sec] += 1
nLines += 1
f.close()
nLines = float(nLines)
for char in ['AA', 'TT', 'CC', 'GG', 'CG', 'GC']:
print("{}\t{}".format(char, "\t".join(["{:0.2f}".format(x[char]/nLines) for x in hl])))
它以某种方式估计整个文件中所有二核苷酸的总数。我正在尝试使它更通用,以便它可以用于三核苷酸和任何更多数量的核苷酸。
【问题讨论】:
标签: python string string-literals