2020-01-11 了解FASTQ格式并处理FASTQ文件

FASTQ文件格式是测序仪展示数据的标准格式,可以看成FASTA文件的变种(FASTA+Q),因为其包含了对序列中每个碱基的Qualify Measurement。(如:碱基A出错的可能性是1/1000)

FASTQ格式详述

FASTQ格式包括4个部分,每个部分1行,格式同FASTA相似,但缺陷也更多:

  1. 类似FASTA的头部,以@而非>起始,后跟ID描述文本
  2. 测定的序列,通常为1行,但有时也会换行,最后以+指示下一部分
  3. +表示(后面有时会跟着和第一部分相同的id和header)
  4. 编码第2部分测定序列的质量值,长度必须同第2部分相同,换行方式也要同第2部分相同

    第4部分看着有点奇怪,其实是通过转码将两位数字的Phred Score转换为1个字符的Quality Score

第一行为FASTQ quality codes
第二行为Quality Score (Q)/Phred Score (P)

Sanger(+33)格式

错误率公式:Error=10ˆ(-P/10)

编码为I,P=40,错误率为10^(-40/10)=0.01%

以前还用过一种老的+64格式的FASTQ编码:

如果你的FASTQ文件中Quality Score为小写,代表你的FASTQ是老版本

可以使用seqtk命令进行转换
seqtk seq -Q64 input.fq > output.fa

FASTQ文件header中的额外信息

参考维基百科fastq format词条

EAS139:仪器,
136:run编号,
FC706VJ:流通池编号,
2:泳道,
2104:tile编号,
(15343,197393):xy坐标,
1: the member of a pair, 1 or 2 (paired-end or mate-pair reads only)
Y: Y if the read is filtered, N otherwise
18: 0 when none of the control bits are on, otherwise it is an even number
ATCACG指索引序列
此信息针对特定仪器/供应商,可能会随仪器的不同版本或版本而变化。但对于回答可能影响仪器的质量控制或系统性技术问题是很有用的。

通过命令行转换FASTQ质量编码

略,在书p185

进阶FASTQ处理

介绍使用SeqKit操作FASTA/Q,SeqKit支持FASTA/Q文件和FASTA/Q的压缩格式:

seqkit命令

seqkit的学习笔记可参考

《fasta/fq文件处理万能工具——Seqkit学习记录》https://www.jianshu.com/p/f0e65738b7c7

还需要使用csvtk(CSV/TSV):
下载
https://github.com/shenwei356/csvtk/releases
安装csvtk的方式:
https://bioinf.shenwei.me/csvtk/#installation

#作者目前尚不推荐使用conda进行安装
curl http://app.shenwei.me/data/csvtk/csvtk_linux_amd64.tar.gz > csvtk_linux_amd64.tar.gz
tar -zxvf csvtk_linux_amd64.tar.gz
sudo cp csvtk bin

1. 示例数据

使用一个FASTQ文件(Sample Reads,1M)和两个FASTA文件(NCBI RefSeq数据库中的病毒DNA和蛋白质序列,60M+40M)。

#wget -nc指若要覆盖已有文件则不要下载
wget -nc http://data.biostarhandbook.com/reads/duplicated-reads.fq.gz
wget -nc ftp://ftp.ncbi.nih.gov/refseq/release/viral/viral.2.1.genomic.fna.gz
wget -nc ftp://ftp.ncbi.nih.gov/refseq/release/viral/viral.2.protein.faa.gz
# fna文件和faa文件
# *.fna = FASTA Nucleic Acid file
# *.faa = FASTA Amino Acid file

2. FASTQ文件概览

seqkit stat *.gz

3. 得到GC含量

seqkit fx2tab将FASTA/Q转换为3列表格形式(1:名称/ID,2:序列,3:质量),还可以在新列中提供各种信息,包括序列长度、GC内容/GC skew、alphabet
seqkit fx2tab -n -i -g viral.2.1.genomic.fna.gz | head
-n, --name only print names (no sequences and qualities)
-i, --only-id print ID instead of full head
-g, --gc print GC content
可以尝试分别去掉这些参数

4. 得到感兴趣碱基的含量

假设想要获得A、C、A+C的含量
seqkit fx2tab -H -n -i -B a -B c -B ac viral.2.1.genomic.fna.gz | head -5
-H, --header-line输出header line
-B, --base-content strings 输出碱基含量,忽略大小写,支持N等alphabet

5. 抽出部分序列和name/list文件

seqkit sample 根据数量或比例对序列进行抽样
-n, --number int 根据数量抽样(匹配可能不精确)
-p, --proportion float 根据比例抽样

seqkit seq seq命令对序列进行操作, (包括revserse, complement, extract ID等...)
-n, --name 只输出名字
-i, --only-id 只输出id而不输出full head

seqkit sample --proportion 0.001 duplicated-reads.fq.gz | seqkit seq --name --only-id > id.txt
head id.txt #id.txt中的记录要用于seqkit grep的检索,格式为每行1个记录

seqkit grep 根据ID/名称/序列/序列motif检索序列,允许错配
-f, --pattern-file string pattern file (one record per line)

seqkit grep --pattern-file id.txt duplicated-reads.fq.gz > duplicated-reads.subset.fq.gz
#用id.txt中的pattern在duplicated-reads.fq.gz中进行匹配

6. 找到包含简并碱基(degenerate base)的序列并定位

seqkit fx2tab --name --only-id --alphabet  viral.1.1.genomic.fna.gz | csvtk --no-header-row --tabs grep --fields 4 --use-regexp --ignore-case --pattern "[^ACGT]"

代码的长参数版本

seqkit fx2tab -n -i -a viral.2.1.genomic.fna.gz | csvtk -H -t grep -f 4 -r -i -p "[^ACGT]"

seqkit fx2tab将FASTA / Q转换为表格格式,并可以在新列中输出序列字母:
-a, --alphabet 输出alphabet
然后可以使用文本搜索工具来过滤表。
csvtk下的参数
-H, --no-header-row 输入的CSV文件没有header行
-t, --tabsinput CSV file由tabs分隔。覆盖-d和-D

csvtk grep下的参数
-f, --fields string comma separated key fields, column name or index. e.g. -f 1-3 or -f id,id2 or -F -f "group" (default "1") 这个参数没看懂
-r, --use-regexp 给出的pattern为正则表达式
-i, --ignore-case 忽略大小写
-p, --pattern strings query pattern (multiple values supported) 这个参数没看懂
pattern为"[^ACGT]" 是一个正则表达式 这个正则表达式没看懂

参考博文:《csvtk——CSV_TSV文本处理万能工具》
https://www.jianshu.com/p/3aa6231ed5c3

保存这些包含简并碱基的序列的ID

seqkit fx2tab -n -i -a viral.2.1.genomic.fna.gz | csvtk -H -t grep -f 4 -r -i -p "[^ACGT]" | csvtk -H -t cut -f 1 > id2.txt

使用seqkit grep命令去除

seqkit grep --pattern-file id2.txt --invert-match viral.1.1.genomic.fna.gz > clean.fa
#或
seqkit grep -P id2.txt --invert-match viral.1.1.genomic.fna.gz > clean.fa

csvtk cut下的参数
-f, --fields string 仅保留fields中的列,例: -f 1,2即保留第1、2列

7. 去除包含重复序列的FASTA/Q记录

8. 定位FASTA/Q序列中的模体/subsequence/酶消化位点

9. 根据序列长度排列FASTA/Q序列

10. 根据header信息spilt FASTA序列

11. 使用文本文件中的character strings在FASTA header中搜索和替换?

12. 从两个paired end reads文件中提取paired reads?

13. 连接两个FASTA序列

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容