K核苷酸频率(KNF,k-nucleotide frequencies)或K-mer频率
KNF描述了序列中存在k个核苷酸的所有可能的多核苷酸的频率。如果k=2,则计算的为双核苷酸频率(即AA、AT、AG、AC、……TT),共42=16种;如果k=3,则计算的为双核苷酸频率(即AAA、AAT、AAG、AAC、……TTT),共43=64种;以此类推。
K-mer频率方法与上面所述相同。
from itertools import product #定义包
def nucleotide_frequency(seq,k): #seq为输入的多个序列,k为几核苷酸
X = []
char = []
for i in product('ACGT', repeat = k): #笛卡尔积(有放回抽样排列)
char.append(''.join(i)) #去除引号后存放到char里,即把('A,A,A')转变成(AAA)形式
for s in seq: #循环调用每一个序列
frequence = [] #定义空列表,用于存放计算好的频率
for a in char: #循环取char里的k核苷酸类型
number = 0
for j in range(len(s)-k+1): #在单个序列中进行循环取k间隔片段
if s[j:j+k] == a: #判断k间隔片段是否和char里的k核苷酸类型相等
number += 1
char_frequence = number/(len(s)-k+1) #计算频率,此时序列长度=原序列长度-k+1
frequence.append(char_frequence)
X.append(frequence)
return X
#用具体数据进行调用
knf = nucleotide_frequency(data,k) #data为具体数据,k的值根据需要自己设定