当前位置: 首页 > news >正文

对 fastq 和 bam 进行 downsample

对 fastq 和 bam 进行 downsample

  • 一、Fastq
  • 1、seqtk
  • 二、Bam
    • 1、samtools
    • 2、Picard DownsampleSam
    • 3、比较
  • 并行采样模板

一、Fastq

1、seqtk

Seqtk 是一种快速轻量级的工具,用于处理 FASTA 或 FASTQ 格式的序列。 它可以无缝解析 FASTA 和 FASTQ 文件,这些文件也可以通过 gzip 进行压缩。其中的seqtk sample可以用来从fastq中采样。具体用法如下:

#对于pair-end数据需保证R1/R2的随机种子相同

seqtk sample -s 100 R1.fq.gz 0.5 > R1.0_5.fq.gz
seqtk sample -s 100 R2.fq.gz 0.5 > R2.0_5.fq.gz
#!/bin/bash
set -e
input=$1
output=$2
frac=$3  # 0.2seqtk sample -s 1011 ${input} ${frac}  > ${output}

可以指定一个整数提取一定数目的reads,也可以指定一个小数提取一定比例的reads。

二、Bam

1、samtools

samtools view提供了一个参数可以用于downsample,方法如下:

samtools view -s seed.freq input.bam -b -o downsample.bam

其中seed表示随机种子int类型的整数;freq为downsample的频率,float类型的小数。100.5表示以随机种子为100,取出50%的数据。

2、Picard DownsampleSam

该工具对SAM或BAM文件应用下采样算法。该算法中Pair-end的reads要么都保留,要么都丢弃。标记为non-primary的reads pair取将全部丢弃。每次读取被保留的概率为P,因此,使用完全相同的输入以相同的顺序和RANDOM_SEED的相同值执行的运行将产生相同的结果。

其使用方法与常规Picard的方法一致,Picard的一些公共参数该算法也包括。该算法主要有以下参数:

java -jar picard.jar DownsampleSam \I=input.bam \O=downsampled.bam \P=0.5 \R=100 \ACCURACY=0.00001 \STRATEGY=ConstantMemory 

–INPUT/-I, 指定输入bam文件
–OUTPUT/-O, 指定输出bam文件
–ACCURACY/-A, 算法的精度,误差尽可能保证在该精度范围,默认1e-4
–RANDOM_SEED/-R, 设定随机种子,默认1
–PROBABILITY/-P, downsample的比例,默认1.0
–STRATEGY/-S, 采用策略,默认ConstantMemory

使用STRATEGY选项可以支持许多不同的下采样策略:

  • ConstantMemory:使用哈希投影策略在固定内存中运行。适用大量的输入。准确性会随着输出数据的降低而降低。
  • HighAccuracy:尽可能的保证准确性,即做到降采样的比例接近约定的比例。因此,该策略需要与输入的数据流中模板名称数量成比例的内存,因此在运行大型输入文件时将需要大量内存。适用于较小的数据输入
  • Chained:是一个折衷的策略,综合了ConstantMemory和HighAccuracy的一些优点。使用 ConstantMemory策略downsample到大约期望的比例,然后使用HighAccuracy策略精确完成。在一次传递中工作,将提供接近(但往往不如)HighAccuracy的精度,同时需要与从ConstantMemory策略到HighAccuracy策略发出的读取集成比例的内存。当对大的输入进行小比例的下采样时(例如,对数亿次读取进行下采样,只保留2%),效果很好。当输入包含>= 50,000个reads-pair时,应该有99.9%的准确率。适用于从大数据中取较低比例的数据。
    3.两种方式的比较
    我们测试了两种从bam中downsample的的方法,从相同的bam出发,设定不同的梯度和随机种子进行测试。

3、比较

首先计算了每个梯度的数据量与理论上的数据量。两种方法得到的数据与理论值具有很好的一致性。但是对于相同频率不同随机种子之间得到的数据量会存在细微的差距。

其次,比较了两个重复之间的一致性,发现设置相同的随机种子和频率时,得到的两个文件完全一致,MD5检验值相同。

最后,比较了时间上的差异,采用相同的计算资源,Picard要比samtools至少节约80%的时间。

并行采样模板

#!/bin/bash
set -e
input_dir=$1
out_dir=$2
frac=$3   # 0.5i=1
for fq1 in `ls ${input_dir} |grep R1.fastq.gz`
dofastq_name=`echo $fq1 |sed 's/.R1.fastq.gz//' `fq2=`echo $fq1 | sed 's/R1/R2/' `#echo $fq1 $fq2seqtk sample -s 1011 ${input_dir}/${fq1} ${frac} |gzip > ${out_dir}/${fastq_name}.R1.fastq.gz &seqtk sample -s 1011 ${input_dir}/${fq2} ${frac} |gzip > ${out_dir}/${fastq_name}.R2.fastq.gz &n=$[ i % 5 ]if [ $n -eq 0 ]; thenwaitfii=$[ i + 1 ]wait
done

参考
https://www.cnblogs.com/Sunny-King/p/Bioinformatics-Downsample.html

http://www.lryc.cn/news/159144.html

相关文章:

  • 网络爬虫:如何有效的检测分布式爬虫
  • elementUI可拖拉宽度抽屉
  • OpenPCDet系列 | 8.4 nuScenes数据集数据调用和数据分析
  • WeiTitlePopupWindow
  • qemu/kvm学习笔记
  • android 车载widget小部件部分详细源码实战开发-千里马车载车机framework开发实战课程
  • 如何使用CSS画一个三角形
  • 第15章_锁: (表级锁、页级锁、行锁、悲观锁、乐观锁、全局锁、死锁)
  • python音频转文字调用baidu
  • 靶场溯源第二题
  • mysql 的增删改查以及模糊查询、字符集语句的使用
  • Python Django框架中文教程:学习简单、灵活、高效的Web应用程序框架
  • Docker认识即安装
  • chrome 谷歌浏览器 导出插件拓展和导入插件拓展
  • fastjson漏洞批量检测工具
  • Vue进阶(六十七)页面刷新路由传参丢失问题分析及解决
  • 阿里云ubuntu服务器搭建ftp服务器
  • 03 卷积操作图片
  • 软考:中级软件设计师:程序语言基础:表达式,标准分类,法律法规,程序语言特点,函数传值传址
  • Java“牵手”1688商品详情数据,1688商品详情API接口,1688API接口申请指南
  • stable diffusion实践操作-批次出图
  • LeetCode热题100 【cpp】题解(一)哈希表和双指针
  • Python爬虫常见代理池实现和优化
  • 前端面试的话术集锦第 3 篇:进阶篇上
  • 【文字到语音的论文总结】
  • E. Data Structures Fan(思维 + 异或前缀和)
  • 初学python爬虫学习笔记——爬取网页中小说标题
  • The WebSocket session [x] has been closed and no method (apart from close())
  • 前端实现展开收起的效果 (react)
  • ABY2.0:更低的通信开销