FASTQ格式 (skbio.io.format.fastq
)¶
FASTQ文件格式 (fastq
)以简单的纯文本格式存储生物(如核苷酸)序列及其质量分数,既可读又易于解析。该文件格式由Wellcome Trust Sanger Institute的Jim Mullikin发明,但并未给出正式定义,尽管它非正式地成为存储高吞吐量序列数据的标准文件格式。有关格式及其变体的更多信息,请参阅 [1] 和 [2].
从概念上讲,FASTQ文件类似于配对的FASTA和QUAL文件,因为它同时存储生物序列及其质量分数。FASTQ与FASTA/QUAL不同,因为质量分数与生物序列数据存储在同一个文件中。
包含两个DNA序列及其质量分数的FASTQ格式文件示例:
@seq1 description 1
AACACCAAACTTCTCCACCACGTGAGCTACAAAAG
+
````Y^T]`]c^cabcacc`^Lb^ccYT\T\Y\WF
@seq2 description 2
TATGTATATATAACATATACATATATACATACATA
+
]KZ[PY]_[YY^```ac^\\`bT``c`\aT``bbb
格式支持¶
有嗅探员:是的
读者 |
writer |
对象类 |
---|---|---|
是的 |
是的 |
发电机 |
是的 |
是的 |
|
是的 |
是的 |
|
是的 |
是的 |
|
是的 |
是的 |
|
是的 |
是的 |
格式规范¶
FASTQ文件包含一个或多个生物序列及其相应的质量分数,顺序存储为 记录 .每个 记录 包括四个部分:
序列标题行,由序列标识符(ID)和描述(两个都是可选的)组成
生物序列数据(通常使用标准的IUPAC词典存储),可以选择分割成多行
将序列数据与质量分数分开的质量标题行(可选地从序列标题行重复ID和描述)
质量分数为可打印的ASCII字符,可选择拆分为多行。质量分数的解码将取决于指定的FASTQ变体(详见下文)
有关完整的FASTQ格式规范,请参见 [1]. scikit-bio的FASTQ实现遵循了本优秀出版物中描述的格式规范,包括根据该出版物的补充数据中提供的FASTQ示例文件验证实现。
备注
id和description将以与FASTA头完全相同的方式从序列头行解析 (skbio.io.format.fasta
). id、描述和质量分数也以与FASTA相同的方式存储在sequence对象上并从中写入。
备注
只允许在文件的开头、FASTQ记录之间或文件末尾使用空白行或空白行。标题行之后、序列内或质量分数内的空白行或空白行将引发错误。
scikit-bio将在阅读时忽略每行的前导和尾随空格字符。
备注
根据数据被读入的对象类型,可以执行验证。此行为与FASTA文件的行为相匹配。
备注
scikit-bio将以标准化格式编写FASTQ文件,每个记录节都在一行上。因此,每个记录将由 确切地 四行。质量标题行不会重复序列ID和描述。
备注
lowercase 支持的功能与FASTA相同。
质量分数变量¶
FASTQ将质量分数与序列数据相关联,每个质量分数编码为一个可打印的ASCII字符。在scikit bio中,所有质量分数都被解码为Phred质量分数。这是最常见的质量分数指标,但也有其他指标(如Solexa质量分数)。不幸的是,不同的测序器有不同的方式将质量分数编码为ASCII字符,特别是Sanger和Illumina。下表列出了scikit bio支持的不同编码变体,并列出了开放生物信息学基金会(OBF)中使用的等效变体名称 [3] 项目(例如,Biopython、BioPerl等)。
变体 |
ASCII范围 |
偏移量 |
质量范围 |
笔记 |
---|---|---|---|---|
桑格 |
33至126 |
33 |
0到93 |
相当于OBF的fastq sanger。 |
illumina1.3 |
64至126 |
64 |
0至62 |
相当于OBF的fastq illumina。如果您的数据是使用Illumina 1.3-1.7软件生成的,请使用此选项。 |
illumina1.8 |
33至95 |
33 |
0至62 |
相当于桑格,但质量分数范围检查为0到62。如果您的数据是使用Illumina 1.8软件或更高版本生成的,请使用此选项。 |
索莱克斯 |
59至126 |
64 |
-5至62 |
目前尚未实施。 |
备注
写作时,语法质量分数将被截断到变量范围内的最大值,并发出警告。这与OBF项目一致。
读取时,如果解码的质量分数超出变量的范围,则会引发错误。
格式参数¶
以下参数适用于所有FASTQ格式的读写器:
variant
:一个字符串,表示用于解码/编码Phred质量分数的质量分数变量。一定是其中之一sanger
,illumina1.3
,illumina1.8
或solexa
. 此参数优先于phred_offset
因为可以执行额外的质量分数范围检查和转换。它也更加明确。phred_offset
:一个整数,表示用于解码/编码Phred质量分数的ASCII码偏移量。一定在范围内[33, 126]
. 所有解码后的分数将被假定为Phred分数(即,不进行额外的转换)。喜欢使用variant
只要有可能,就在这个参数上。
备注
你必须提供 variant
或 phred_offset
读写FASTQ文件时。 variant
和 phred_offset
不能同时提供两者。
以下附加参数与FASTA格式中的参数相同 (skbio.io.format.fasta
):
constructor
见constructor
FASTA格式的参数seq_num
见seq_num
FASTA格式的参数id_whitespace_replacement
见id_whitespace_replacement
FASTA格式的参数description_newline_replacement
见description_newline_replacement
FASTA格式的参数lowercase
见lowercase
FASTA格式的参数
示例
假设我们有以下两个DNA序列的FASTQ文件:
@seq1 description 1
AACACCAAACTTCTCCACC
ACGTGAGCTACAAAAG
+seq1 description 1
''''Y^T]']C^CABCACC
`^LB^CCYT\T\Y\WF
@seq2 description 2
TATGTATATATAACATATACATATATACATACATA
+
]KZ[PY]_[YY^'''AC^\\'BT''C'\AT''BBB
请注意,第一个序列及其质量分数被拆分为多行,而第二个序列及其质量分数都在一行上。还要注意,第一个序列在quality标题行上有一个重复的ID和description,而第二个序列没有。
让我们将内存中的这个文件定义为 StringIO
,但这可能是一个真正的文件路径、文件句柄或scikit bio的I/O注册表实际支持的任何内容:
>>> from io import StringIO
>>> fs = '\n'.join([
... r"@seq1 description 1",
... r"AACACCAAACTTCTCCACC",
... r"ACGTGAGCTACAAAAG",
... r"+seq1 description 1",
... r"''''Y^T]']C^CABCACC",
... r"'^LB^CCYT\T\Y\WF",
... r"@seq2 description 2",
... r"TATGTATATATAACATATACATATATACATACATA",
... r"+",
... r"]KZ[PY]_[YY^'''AC^\\'BT''C'\AT''BBB"])
>>> fh = StringIO(fs)
将序列加载到 TabularMSA
,我们运行:
>>> from skbio import TabularMSA, DNA
>>> msa = TabularMSA.read(fh, constructor=DNA, variant='sanger')
>>> msa
TabularMSA[DNA]
-----------------------------------
Stats:
sequence count: 2
position count: 35
-----------------------------------
AACACCAAACTTCTCCACCACGTGAGCTACAAAAG
TATGTATATATAACATATACATATATACATACATA
请注意,质量分数是从Sanger解码的。将第二个序列作为 DNA
:
>>> fh = StringIO(fs) # reload the StringIO to read from the beginning again
>>> seq = DNA.read(fh, variant='sanger', seq_num=2)
>>> seq
DNA
----------------------------------------
Metadata:
'description': 'description 2'
'id': 'seq2'
Positional metadata:
'quality': <dtype: uint8>
Stats:
length: 35
has gaps: False
has degenerates: False
has definites: True
GC-content: 14.29%
----------------------------------------
0 TATGTATATA TAACATATAC ATATATACAT ACATA
写我们的 TabularMSA
以质量分数编码的FASTQ文件 illumina1.3
变体:
>>> new_fh = StringIO()
>>> print(msa.write(new_fh, format='fastq', variant='illumina1.3').getvalue())
@seq1 description 1
AACACCAAACTTCTCCACCACGTGAGCTACAAAAG
+
FFFFx}s|F|b}b`ab`bbF}ka}bbxs{s{x{ve
@seq2 description 2
TATGTATATATAACATATACATATATACATACATA
+
|jyzox|~zxx}FFF`b}{{FasFFbF{`sFFaaa
>>> new_fh.close()
请注意,该文件是以规范化格式编写的:序列和质量分数只出现在一行中,序列标题行在质量标题行中不重复。还要注意,质量分数是不同的,因为它们是用不同的变体编码的。
引用