使用python简单实现K核苷酸频率(KNF,k-nucleotide frequencies)或K-mer频率

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的值根据需要自己设定
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值