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

对象类

是的

是的

发电机 skbio.sequence.Sequence 物体

是的

是的

skbio.alignment.TabularMSA

是的

是的

skbio.sequence.Sequence

是的

是的

skbio.sequence.DNA

是的

是的

skbio.sequence.RNA

是的

是的

skbio.sequence.Protein

格式规范

FASTQ文件包含一个或多个生物序列及其相应的质量分数,顺序存储为 记录 .每个 记录 包括四个部分:

  1. 序列标题行,由序列标识符(ID)和描述(两个都是可选的)组成

  2. 生物序列数据(通常使用标准的IUPAC词典存储),可以选择分割成多行

  3. 将序列数据与质量分数分开的质量标题行(可选地从序列标题行重复ID和描述)

  4. 质量分数为可打印的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质量分数的质量分数变量。一定是其中之一 sangerillumina1.3illumina1.8solexa . 此参数优先于 phred_offset 因为可以执行额外的质量分数范围检查和转换。它也更加明确。

  • phred_offset :一个整数,表示用于解码/编码Phred质量分数的ASCII码偏移量。一定在范围内 [33, 126] . 所有解码后的分数将被假定为Phred分数(即,不进行额外的转换)。喜欢使用 variant 只要有可能,就在这个参数上。

备注

你必须提供 variantphred_offset 读写FASTQ文件时。 variantphred_offset 不能同时提供两者。

以下附加参数与FASTA格式中的参数相同 (skbio.io.format.fasta ):

  • constructorconstructor FASTA格式的参数

  • seq_numseq_num FASTA格式的参数

  • id_whitespace_replacementid_whitespace_replacement FASTA格式的参数

  • description_newline_replacementdescription_newline_replacement FASTA格式的参数

  • lowercaselowercase 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()

请注意,该文件是以规范化格式编写的:序列和质量分数只出现在一行中,序列标题行在质量标题行中不重复。还要注意,质量分数是不同的,因为它们是用不同的变体编码的。

引用