用Bedtools进行集合运算

转自:https://zhuanlan.zhihu.com/p/52322803

之前已经讲过BED 文件和它的衍生文件的格式,链接在这里:[数据格式] (2)BED 格式的四种写法 。

但是当我们想对两个或多个BED文件的区域求它们的交集,找它们之间的overlap时,就很麻烦。手动操作太痛苦,用awk也不是很合适。

Bedtools是Quinlan AR 和 Hall IM 在2010年发布在Bioinformatics上的工具,可以通过它对同一参考基因组的BED文件进行交,并,补集的操作,还有其他的功能,比如注释和格式转换,这篇主要讲利用 Bedtools 对BED格式的文件进行操作。

Bedtools的安装很简单,有conda用conda,没有conda可以去它的GitHub下载。 顺便说一下,Bedtools发布了它的python版本pyBedtools,对环境有洁癖的朋友也可以在Bedtools的GitHub网页上找到它,链接:arq5x/bedtools2

Bedtools的应用:

集合运算(注:都是链接,可以点开看详细转换方法):

1. 交集运算 intersect

不同参数结果输出不同的区域,A和B是输入的两个BED文件。不输入参数输出结果为两个BED文件的交集,-wa保留和b文件有重叠的全部A文件区域,-v 输出结果为-wa的补集,即B中没有A重叠的区域。可以用图表示为:

image.png

命令为:

bedtools intersect [OPTIONS] -a  \
                             -b 
#or
intersectBed [OPTIONS] -a  \
                       -b 

2. 并集运算 merge

将一个BED文件中所有的重叠区域和相邻merge为一个大的区域,可以将结果转换为其他格式的数据,可以通过参数设置相距多远的两个区域,可以取他们的并集:

image.png

命令为:

bedtools merge [OPTIONS] -i 
#or
mergeBed [OPTIONS] -i 

3. 补集运算 complement,找到基因组上所有和给定区域无重叠的区域:

image.png

命令:

bedtools complement -i  -g 
 #or:
complementBed -i  -g 

4. 差集运算 subtract,用A中的区域减去B中的区域,通过参数-A可以实现有重叠区域的全部剔除:

image.png

命令:

bedtools subtract [OPTIONS] -a  -b 
#or:
subtractBed [OPTIONS] -a  -b 

此外,还有类似于intersect的window,可以看区域上下游的重叠情况;cluster,类似于merge,将有重叠的区域归在一起,但是不会合并为一个大的区域。

附Bedtools的数据格式转换:

  • bamtobed
  • bamtofastq
  • bed12tobed6
  • bedpetobam
  • bedtobam

Bedtools还有很多很多的功能,它对于我们得到的数据非常有帮助,可以说是做二代测序人手必备的神器。

很幸运的是,Bedtools的说明书写的非常详细,链接:bedtools: a powerful toolset for genome arithmetic

最后补一句:多用sort,少点麻烦!

你可能感兴趣的:(用Bedtools进行集合运算)