美文网首页python家园
Python应用——分析序列k-mer

Python应用——分析序列k-mer

作者: Bio_Infor | 来源:发表于2022-02-24 23:09 被阅读0次

什么是k-mer

在生物学里面,k-mer就是指一段生物学序列的长度为k的子串。例如:一段 ACGAGGTACGA 的DNA序列,其4-mer就是如下图所示:

4-mers
k-mer在生物学分析中有非常重要的应用,例如序列组装、序列相似性分析等。具体内容可以参见 wikipedia k-mer中关于k-mer的介绍。

以DNA序列为例,一般来说,一段由 L 个碱基组成的序列,会有 L-k+1 个k-mer,其可能的k-mer一共有 4k 种。

分析步骤

在这里我们的分析步骤包括:

  • 读取序列fasta文件
  • 计算序列k-mer
  • 对序列k-mer进行统计

读取序列fasta文件

首先需要了解fasta文件基本格式:fasta格式是一种非常简单的储存序列的格式,可以储存核酸序列(DNA/RNA)也可以储存蛋白质的氨基酸序列,主要分成2个部分。第一部分是以“>”为开始的一行主要储存的是序列的描述信息;剩下的是序列部分。例如下面就是一段氨基酸序列的fasta文件:

>sp|P69905|HBA_HUMAN Hemoglobin subunit alpha OS=Homo sapiens GN=HBA1 
MVLSPADKTNVKAAWGKVGAHAGEYGAEALERMFLSFPTTKTYFPHFDLSHGSAQVKGHG
KKVADALTNAVAHVDDMPNALSALSDLHAHKLRVDPVNFKLLSHCLLVTLAAHLPAEFTP

在这里我们读取fasta文件需要用到 strip 函数,其介绍为:
strip 用来去除头尾字符、空白符(包括\n、\r、\t、' ',即:换行、回车、制表符、空格)
lstrip 用来去除开头字符、空白符(包括\n、\r、\t、' ',即:换行、回车、制表符、空格)
rstrip 用来去除结尾字符、空白符(包括\n、\r、\t、' ',即:换行、回车、制表符、空格)
所以我们可以用下面的函数来读取fasta文件:

def load_fa(path):
    """a function to read fasta file from the path and store in a dict"""
    genes_seq = {}  #将序列存入字典
    with open(path,"r") as sequences:  #以读取方式打开文件
        lines = sequences.readlines()

    for line in lines:
        if line.startswith(">"):
            genename = line.split()[1]  #这个地方需要灵活调整
            genes_seq[genename] = ''  #序列为字符串
        else:
            genes_seq[genename] += line.strip()

    return genes_seq

计算序列k-mer

然后我们就需要对序列的k-mer进行计算,找出一段序列里面有哪些k-mer:

def build_kmers(seq, k_size):
    """a function to calculate kmers from seq"""
    kmers = []  # k-mer存储在列表中
    n_kmers = len(seq) - k_size + 1
    
    for i in range(n_kmers):
        kmer = seq[i:i + k_size]
        kmers.append(kmer)
        
    return kmers

对序列k-mer进行统计

在这一步,我们想统计出每段序列的各个k-mer的个数,需要使用到 collections 库中的 Counter 函数。

from collections import Counter
def summary_kmers(kmers):
    """a function to summarize the kmers"""
    kmers_stat = dict(Counter(kmers))
    return kmers_stat

实战

下面以这段fasta文件为例,分析其中基因的k-mer。

>chr18_4399328-4400910:+ ENSMUSG00000117579.2
CTGCAGTGTCAAGTCCCCCAATTATTTACTTTGCCTGTAAACGTGATGCACCCACCCACC
TTTACTTACTCACTGGCTCTAAAGGTGAAATTTGCTTTTTTCTTTTTCTTTTTAATGTCC
>chr18_4634878-4682869:+ ENSMUSG00000033960.7
GCGGTGGGCGGGACTGTGCGGGGCGGAGGGCGGGGCATGCGAGTGTGCTCCGAGCATGCT
CCACCCGGTAGTAGCAGGCTGGGTGGCTCGTGCTGGTCCCCGCCGGGCGAAGCGGCAGCG
genes_seq = load_fa(path="test.fa")
genes_kmers = {}
for gene in genes_seq.keys():
  genes_kmers[gene] = summary_kmers(build_kmers(seq=cluster1_genes_seq[gene], k_size=6))

通过上面这段代码,我们实际上得到了一个字典,字典的内容大概是这样的:

{ENSMUSG00000117579.2:{"ATCCGG":1,"ATCATT":3,...}}

一个字典种嵌套字典的结构,最外面字典的键为基因的ID,值为每个基因的k-mer信息,而每个基因的k-mer信息也是一个字典,它的键为k-mer序列,值为k-mer序列出现的频率。

当然,这肯定可读性不高,也不利于我们后续的数据处理,所以我们利用 pandas 库来对它进行变形:

import pandas as pd
pd.DataFrame(genes_kmers)

这样就会生成一个列为基因,行为k-mer的数据框,格式如图所示:


提前祝大家周末愉快~

相关文章

  • Python应用——分析序列k-mer

    什么是k-mer 在生物学里面,k-mer就是指一段生物学序列的长度为k的子串。例如:一段 ACGAGGTACGA...

  • 基因组组装----k-mer

    1.什么是k-mer? k-mer:在生物信息学中,k-mers是包含在生物序列中的长度为k的子序列。 比如序列:...

  • Kraken使用手册

    Introduction Kraken 是可将分类标签分配给DNA序列的一种序列分类器,是基于k-mer精确比对,...

  • python序列应用

    实验一Python序列应用 1.2import math # 导入标准库mathprint(3 +5) print...

  • Python 物联网之用于基于 TinyFlux的物联网和分析应

    Python 物联网之用于基于 TinyFlux的物联网和分析应用程序的微型时间序列数据库 虽然数据集的形状和大小...

  • K-mer子序列的生成

    简要介绍 在生信中,k-mer指生物序列中长度为k的子序列。-mer包含着生物序列的两个基本特征:1. 单体组分信...

  • KmerGenie kmer

    一般来讲,对于较为复杂的基因组,我们通常会在基因组正式组装之前进行k-mer分析,以评估基因组杂合度、重复序列比例...

  • 时间序列

    python时间序列分析时间序列完全教程(R)http://blog.csdn.net/Earl211/artic...

  • 深度学习 第10次作业 机器学习 循环序列模型

    1 序列模型 序列模型广泛应用于语音识别,音乐生成,情感分析,DNA序列分析,机器翻译,视频行为识别,命名实体识别...

  • 1.27阅读笔记之一——《应用时间序列分析》

    书名:应用时间序列分析 阅读目的:时间序列分析到底有什么用? 23时间序列的分解 45正态时间序列和随机变量的收敛...

网友评论

    本文标题:Python应用——分析序列k-mer

    本文链接:https://www.haomeiwen.com/subject/mmxtrrtx.html