bedtools不合格的使用介绍

简介: 如何使用bedtools处理Rang数据什么是Range数据参考基因组表示的是一种坐标系统,比如说某一个物种基因组大小为100bp,那么他参考基因组就可以表示为[1,100], 之后就可以用任意[x,y]表示这条参考基因组上的位置,这就是一种范围信息,X-Y这段区域可能是外显子,也可能是内含子,可能是编码区,也可能是基因间区,也有可能是一个测序结果。

如何使用bedtools处理Rang数据

什么是Range数据

参考基因组表示的是一种坐标系统,比如说某一个物种基因组大小为100bp,那么他参考基因组就可以表示为[1,100], 之后就可以用任意[x,y]表示这条参考基因组上的位置,这就是一种范围信息,X-Y这段区域可能是外显子,也可能是内含子,可能是编码区,也可能是基因间区,也有可能是一个测序结果。

因此Range数据是生信数据比较常见的存放形式,比如说BED/BAM/BCF/和GFF/BFF/SAM/VCF/,前者以0为始,后者以1为始。

为了操作这种Range数据,Bioconductor在R语言中定义了两个重要的对象,IRange和GenomicRanges,后者仅存放'start','end','width'是后者的基础。后者才能真正存放基因组Range数据。

这一篇不介绍如何在R语言操作Range数据,而是介绍bedtools这款号称基因组Range数据分析的瑞士军当,当时的口号是一款取代10个生信分析师的工具。

Bedtools能够对基因组Range数据进行计数等简单操作,也能和Unix命令行结合起来完成更加复杂的任务。

bed格式简介

在正式介绍bedtools之前,需要先介绍一下BED格式。根据USCSC基因组浏览器的描述,BED格式能够非常简洁的表示基因组特征和注释,尽管BED格式描述中定义了12列,但是仅仅只有3列必须,因此BED格式按照列数继续细分为BED3,BED4,BED5,BED6,BED12。

BED12定义的12列分别为:chrom, start, end, name(BED代表的特征名),score(范围为0~1000,可以是pvalue, 或者是字符串,如"up"), strand(正负链), thickstart, thickednd(额外着色位置, 比如说表示外显子), itemRgb(RGB颜色,如255,0,0), blockCount(区块数量, 如外显子), blockSizes(由逗号隔开的区块大小), blockStarts(由逗号隔开的区块起始位点)。

知道了BED12后,就可以对BED的细分格式进行举例说明

  • BED3:chr1 11873 14409
  • BED4: chr1 11873 14409 uc001aaa.3
  • BED5: chr1 11873 14409 uc001aaa.3 0
  • BED6: chr1 11873 14409 uc001aaa.3 0 +
  • BED12: chr1 11873 14409 uc001aaa.3 0 + 11873 12000 123,123,123 3 354,109,1189, 0,739,1347,
img_94cba6af06ae9abe87e5847ad0fec7ce.jpe
BED12效果

除了官方的BED定义外,BEDtools定义了BEDPE用来表示基因组不连续的特征,比如说结构变异或者双端测序的reads。在定义中10列是必须的,为chrom11, start1, end1, chrom2, start2, end2, name, score, strand1, strand2。 这之后可以增加任意多的其他列。

其他BEDtools支持的格式说明:

Bedtools工具介绍

bedtools的功能非常强大,试图解决你所遇到的所有和基因组位置运算的问题以及周边问题:基因组运算,多文件比较, PE数据操作,格式转换, Fasta数据操作, BAM工具, 统计学相关工具,其他小工具

其中最重要的选项是--help,一个强大的工具提供了许多参数,需要勤读帮助文档。bedtools的官方文档写的非常优秀,绝大部分工具都以图解的方式形象的说明了每个参数的可能效果。因此我写这篇文章的目的就是让迫使自己去熟悉所有的工具而已。

核心:基因组运算

所谓的基因组运算,就是看看看自己手头拿到的区域和你感兴趣的区域的关系如何。bedtools提供了如下工具做一系列你想到或者你想不到的事情。

集合运算:

  • intersect: 交集,也就是看两个区域的重叠
  • window: 和intersect类似也是求交集,但是还会看上下游一定区间内是否有重叠。 比如说看某个基因的上下游是否有peak
  • complement: 补集,根据一个已有区域得到另一个不重叠的区域
  • substract: 差集, 求一个区域减去另一个区域后的结果
  • merge: 合集,将相邻的区间合并成一个
  • cluster: 类似于merge,但是不做合并

区间统计:

  • closest: 找到和目标最近的特征区域。比如说ChIP-seq得到的peaks可以根据“距离其最近的基因就是他调控的基因”的假设进行注释。
  • coverage: 计算某个区间的覆盖情况
  • genomecov: 计算全部基因组的覆盖情况
  • map: 在某个区间的应用其他函数, 比如说求和(sum), 均值(mean)
  • annotate: 从其他一系列文件中统计给定区间的覆盖情况

区间工具:

  • flank: 根据已有特征区间,得到两翼位置的新区间
  • slop: 根据已有特征区间,向外衍生
  • shift: 特征区域整体偏移一定位置
  • shuffle: 从基因组区间中随机选择某些位置
  • sample: 从已有的区域随机挑选
  • makewindows: 从基因组上创建等长区间

其他

bedtools的核心工具就是上面几个,剩下的都算是小轮子,解决了你手上轮子不够多的烦恼。

Fasta相关:

  • getfasta: 根据提供的区间提取序列
  • maskfasta: 根据提供的区间对序列进行遮盖
  • nuc: 统计某个区间的碱基含量

BAM格式相关:

  • 格式转换:bamtobed, bedtobam, bamtofastq,bedpetobam,bed12tobed6
  • multicov: 计算某些位点上不同BAM文件覆盖
  • tag: 计算一个BAM在不同位置上覆盖

PE文件操作:

  • pairtobed: 专门用于看其他格式在BEDPE格式上重叠情况
  • pairtopair: 比较两个BEDPE格式的重叠情况

统计学工具:主要是用以不同的统计学方法来衡量两个区间的相似度,有三种: jaccard, reldist, fisher

除了以上,还有一些更加有趣的小工具,比如说igv可以创建IGV自动截图的运行脚本,links可以构建能在UCSC基因组上打开的链接等。

bedtools使用案例【待续】

目录
相关文章
|
6月前
|
敏捷开发 运维 安全
链家网站系统测试设计与实现_kaic
链家网站系统测试设计与实现_kaic
|
6月前
|
Java 测试技术 C#
什么样的自动化测试开发是合格的?
什么样的自动化测试开发是合格的?
|
设计模式 运维 前端开发
如何成为一名合格的程序员
有些东西你必须知道!!!
69 0
如何成为一名合格的程序员
|
运维 安全 算法
如何成为一名真正的、合格的、乃至优秀的程序员?
如何成为一名真正的、合格的、乃至优秀的程序员?
|
设计模式 前端开发 JavaScript
🐞 如何成为一名合格的“中级开发”
和大家一起聊聊怎么做一个专业的开发者,如何突破自己的职业瓶颈,找到方法,在这个内卷的时代,等待破局的机会!一起加油!
71 0
|
运维 Java 程序员
一个合格的程序员,需要哪些必备技能?
对于一个Java开发来说,编程技能毋庸置疑是很重要的。 但是,除了基本的编程开发能力,其他方面的能力也是体现一个程序员的能力的很重要因素。 比如,问题排查能力、线上运维能力、项目管理能力、协调沟通能力等。 本文,主要来简单介绍一下,作为一个合格的Java开发,除了自身技术成长之外,还有哪些方面可以提升。 类开发技能 第一类,并不是纯coding技能,但是也和开发相关,我称之为类开发技能。 Linux系统 很多人的开发机器是windows,所以平时也基本都是图形化开发界面。但是,这并不意味着你就不需要基本的Linux技巧。 因为,你开发出来的应用可能部署在一台Linux机器上,很
672 0
|
Java C++
关于一个不合格萌新
我感觉关于自己没啥好说的,学过c和自学一点数据结构 但我感觉并不太友好对于初学者。 以后想跟大家一起努力 ,找个好工作,能养活自己就行。 但我感觉这些都不重要 互关互关 兄弟们这个才重要。
82 0
关于一个不合格萌新
|
测试技术
软件测试面试题:功能测试用例需要详细到什么程度才是合格的?
软件测试面试题:功能测试用例需要详细到什么程度才是合格的?
158 0
|
人工智能 BI
不合格产品
题目描述:现有n个物品,每个物品有三个参数ai,bi,ci,定义i物品不合格品的依据是:若存在物品j,且aj>ai, bj>bi, cj > ci,则称i物品为不合格品。
1174 0