★
★ ★ ★
★
做生信的小伙伴一定对bam文件很熟悉,这种文件是由测序数据和参考基因组比对得到的。文件主要分为两个部分:一部分为头文件,以@符号开头;一部分为主文件,记录了详细的比对信息,每行共11列。详细的bam文件说明可以参考:
https://www.cnblogs.com/raisok/p/10917769.html。这里就不再赘述啦。
由于bam文件是二进制的压缩文件,正常情况下我们无法用普通编辑器打开查看,一般情况下我们借助samtools软件来对文件进行处理。但很多小伙伴一定遇到过这样的问题:如果我想对bam文件进行个性化的处理,需要怎么做呢?常规的做法是利用samtools将bam文件先转化成可读写的sam文件,再进行后续的处理。这样做一方面牺牲了大量的时间和存储,另一方面在编程时需要调用shell命令十分繁琐,今天介绍的pysam可以说是一条龙服务完美解决问题。
01
安装pysam
pysam是python的一个库,安装好python以后可以利用python自带的pip安装pysam。在后续使用中请注意,samtools软件的坐标是1-base,而pysam对于基因组坐标的处理是0-base:
02
读入bam文件
pysam可读入的文件格式有bam、sam、cram,以test前缀的文件作为示例,读入方法如下,读入后生成对象bf,后续对文件的操作都基于对bf的访问:
03
检查bam文件是否存在index:
04
pysam封装了samtools,因此可以避开命令行调用直接对bam文件进行sort:
05
想要提取bam文件的头文件,可以这样操作:
06
想要提取bam文件的前10行比对结果,可以这样操作:
07
如果想提取基因组某个区域的比对结果,比如现在我想提取bam文件中比对到血红蛋白基因上的结果,可以这样操作:
08
想要计算落在某个区间的reads数目,可以这样操作:
09
想要计算某个区间的每个碱基上的覆盖深度,可以这样操作:
10
对参考基因组的信息进行统计,可以这样操作:
11
对比对信息进行统计,可以这样操作:
12
对于bf对象可以利用for循环进行访问,每个循环是一个read,对于read的各种处理操作汇总如下:
小结:
pysam库的使用可以大大减少在脚本中对bash命令行的调用,一方面美化代码便于后期维护更新,另一方面可以个性化调取reads信息。本篇代码涵盖了pysam的常用方法,其他参数详解可见官网https://pysam.readthedocs.io/en/latest/usage.html。