gpt4 book ai didi

python - 定义计算氨基酸相对频率的函数

转载 作者:太空宇宙 更新时间:2023-11-03 12:42:17 24 4
gpt4 key购买 nike

我正在尝试计算给定 DNA 序列中的密码子频率。

例如:

sequence = 'ATGAAGAAA'
codons = ['ATG', 'AAG', 'AAA']

对于密码子中的 XX:

frequency  = codons.count(XX)/(codons.count(XX)+codons.count(XX2)+codons.count(XX3))

请注意,XX2 和 XX3 并不总是在序列中。一些密码子可能有也可能没有多个密码子。

示例:赖氨酸有 2 个密码子,AAA 和 AAG

所以频率

AAA = codons.count('AAA')/(codons.count('AAA') + codons.count('AAG'))

我如何为列表中的每个密码子执行此操作?我如何解释多个密码子?

最佳答案

使用默认字典

from collections import defaultdict

mydict = defaultdict(int)

for aa in mysecuence:
mydict[aa] +=1

这适用于氨基酸(蛋白质)。
对于密码子,您应该在 3 个位置步骤中迭代序列以获取 defaultdict 的键。例如:

>>> mysec = "GAUCACTUGCCA"
>>> a = [mysec[i:i+3] for i in range(0,len(mysec), 3)]
>>> print a


['GAU', 'CAC', 'TUG', 'CCA']

编辑:如果你想计算退化,你应该准备一个字典,将每个密码子(键)与其退化的密码子(值,密码子列表)相关联。要计算频率,从 defaultdict 中,您可以获得每个密码子的计数,然后对于每个密码子,您可以计算从上述密码子词典中读取的退化密码子计数的总和。然后你可以计算频率。

编辑 2:这里有一个真实的例子:

from collections import defaultdict

#the first 600 nucleotides from GenBank: AAHX01097212.1
rna = ("tcccccgcagcttcgggaacgtgcgggctcgggagggaggggcctggcgccgggcgcgcg"
"cctgcgccccaccccgccccaccctggcgggtctcgcgcgcccggcccgcctcctgtcaa"
"ccccagcgcggcggtcaggtggtccccagcccttggccccagcctccagcttcctggtcc"
"ctcgggctctgagtcctgtctccggcagatcgcctttctgattgttctcctgcgcagctg"
"gaggtgtatagcccctagccgagctatggtgcctcagcagatgtgaggaggtagtgggtc"
"aggataaacccgcgcactccataataacgtgccagggctcagtgacttgggtctgcatta")

seq = rna.upper().replace('T', 'U')

#RNA codon table from http://en.wikipedia.org/wiki/Genetic_code
degenerated = (('GCU', 'GCC', 'GCA', 'GCG'),
('UUA', 'UUG', 'CUU', 'CUC', 'CUA', 'CUG'),
('CGU', 'CGC', 'CGA', 'CGG', 'AGA', 'AGG'),
('AAA', 'AAG'), ('AAU', 'AAC'), ('GAU', 'GAC'),
('UUU', 'UUC'), ('UGU', 'UGC'), ('CCU', 'CCC', 'CCA', 'CCG'),
('CAA', 'CAG'), ('UCU', 'UCC', 'UCA', 'UCG', 'AGU', 'AGC'),
('GAA', 'GAG'), ('ACU', 'ACC', 'ACA', 'ACG'),
('GGU', 'GGC', 'GGA', 'GGG'), ('CAU', 'CAC'), ('UAU', 'UAC'),
('AUU', 'AUC', 'AUA'), ('GUU', 'GUC', 'GUA', 'GUG'),
('UAA', 'UGA', 'UAG'))

#prepare the dictio of degenerated codons
degen_dict = {}
for codons in degenerated:
for codon in codons:
degen_dict[codon] = codons

#query_codons
max_seq = len(seq)
query_codons = [seq[i:i+3] for i in range(0, max_seq, 3)]

#prepare dictio of counts:
counts = defaultdict(int)
for codon in query_codons:
counts[codon] +=1

#actual calculation of frecuencies
data = {}
for codon in query_codons:
if codon in degen_dict:
totals = sum(counts[deg] for deg in degen_dict[codon])
frecuency = float(counts[codon]) / totals
else:
frecuency = 1.00

data[codon] = frecuency

#print results
for codon, frecuency in data.iteritems():
print "%s -> %.2f" %(codon, frecuency)


#produces:
GUC -> 0.57
AUA -> 1.00
ACG -> 0.50
AAC -> 1.00
CCU -> 0.25
UAU -> 1.00
..........
GCU -> 0.19
GAU -> 1.00
UAG -> 0.33
CUC -> 0.38
UUA -> 0.13
UGA -> 0.33

关于python - 定义计算氨基酸相对频率的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5774099/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com