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_type(k):
    z = []
    for i in product('ACGT', repeat = k):  #笛卡尔积(有放回抽样排列)
        z.append(''.join(i))  #把('A,A,A')转变成(AAA)形式
    return z
# 碱基对数量统计
def char_count(sequence,num,k):
    n = 0
    char = nucleotide_type(k)  #调用提取核苷酸类型模块
    for i in range(len(sequence)-k+1):   #统计相应字符出现的数量
        if sequence[i:i+k] == char[num]:
            n += 1
    return n/(len(sequence)-k+1)  #返回频率(出现的次数/总次数)总次数=序列长度-取几个碱基+1
def feature(seq,k):
    list = []
    for i in range(4**k):   #根据核苷酸类型数量来取值(二、三、四核苷酸分别循环16、64、256次)
        list.append(char_count(seq,i,k))
    return (list)
# 逐行调用特征编码
def Sequence_replacement(sequ,k):
    sequen = [None]*len(sequ)
    for i in range(len(sequ)):
        s = sequ[i]
        sequen[i] = feature(s,k)
    return sequen
#用具体数据进行调用
feature_knf = Sequence_replacement(data,k)  #data为具体数据,k的值根据需要自己设定

方法二:

#首先把数据划分成K-mer形式
def Kmers_funct(seq,x): 
    X = [None]*len(seq)    #若数据只有一个序列,可不用此定义
    for i in range(len(seq)):  #若数据只有一个序列,可不用此循环
        a = seq[i]
        t=0
        l=[]
        for index in range(len(a)-x+1):
            t=a[index:index+x]
            if (len(t))==x:
                l.append(t)
        X[i] = l
    return X  #具体看返回需要,也可直接:return X
#提取核苷酸类型(排列组合)
from itertools import product
def nucleotide_type(k):
    z = []
    for i in product('ACGU', repeat = k):  #笛卡尔积(有放回抽样排列)
        z.append(''.join(i))  #把('A,A,A')转变成(AAA)形式
    return z
#定义K-mer频率模块
#定义K-mer频率模块
def Kmers_frequency(seq,x):
    X = []
    char = nucleotide_type(x)  #调用提取核苷酸类型(排列组合)代码
    for i in range(len(seq)):
        s = seq[i]
        frequence = []
        for a in char:
            number = s.count(a)  #依次统计字符数量
            char_frequence = number/(len(s)-x+1)  #计算频率
            frequence.append(char_frequence)
        X.append(frequence)
    return X
#调用K-mer模块代码
feature_kmer = Kmers_funct(data,k)
#用k-mer生成的数据调用K-mer频率模块
feature_kmer_frequency = Kmers_frequency(feature_kmer,k)
  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值