2. 多组学数据概况:四种组学的数据特点与常见格式
大家好,我是这次课的主讲。这一章咱们聊聊多组学数据的“家底”。说白了,就是搞清楚每类组学产出的数据长什么样,有什么坑,以及最常见的文件格式是什么。
我个人习惯,在动手写GPU加速代码之前,一定要先摸清数据格式的边界。为什么?因为GPU最怕的就是不规则的数据布局。你想想看,一个FASTQ文件里每条read长度都不一样,直接塞进显存,warp就全部乱套了。所以,先把数据特点摸透,后面做预处理才能有的放矢。
2.1 基因组学数据
基因组学,研究的是生物体全套DNA序列。数据量最大,存储成本也最高。
数据特点
- 海量短读段:二代测序一次产生几亿到几十亿条reads,每条长度150~300 bp。
- 冗余度高:人类基因组约30亿碱基对,测序深度通常30×以上,意味着每个位置被覆盖30次。
- 存在重复区域:比如ALU序列,在基因组里反复出现,比对时容易出错。
- 需要参考基因组:绝大多数分析要先把reads比对到参考序列上。
常见格式
| 格式 | 说明 | 典型场景 |
|---|---|---|
| FASTQ | 原始测序read + 碱基质量分数 | 下机数据,质控前 |
| FASTA | 仅序列,无质量值 | 参考基因组存储 |
| SAM/BAM | 比对结果(文本/二进制) | 比对、排序、去重 |
| VCF | 变异位点列表 | SNP/INDEL检出 |
我曾经踩过的坑:BAM文件的索引(.bai)必须和BAM放在同目录且同名。有一次我移动了BAM文件没复制.bai,结果下游工具直接报“file not indexed”,排查了一下午才发现。
FASTQ格式示例
@EAS139:136:FC706VJ:2:2104:15343:197393 1:Y:18:ATCACG
GATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT
+
!''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC65
每4行为一条记录:ID行、序列、分隔符、质量行。质量值用ASCII码表示Phred分数。
2.2 转录组学数据
转录组学关注的是细胞中所有RNA分子。关键在于,RNA有剪接、有表达丰度差异。
数据特点
- 表达定量:同一个基因可能表达几百到几万份copy,这是数字信号。
- 可变剪接:同一基因产生多种转录本,长度差异大。
- 链特异性:RNA有正义链反义链,测序protocol不同会影响方向。
- 小RNA占比较少:但功能重要,miRNA、siRNA等。
常见格式
| 格式 | 说明 | 典型场景 |
|---|---|---|
| FASTQ | 与基因组相同,但测序深度通常更低 | 原始RNA-seq数据 |
| Count Matrix | 基因×样本的整数矩阵 | 差异表达分析输入 |
| FPKM/TPM | 归一化后的表达量 | 基因表达比较 |
| GTF/GFF | 基因注释文件 | 定量时指定基因模型 |
个人建议:保存中间结果时,尽量用HDF5或parquet格式替代CSV。CSV在加载大规模count矩阵时慢得让人抓狂。我曾在项目中因为用CSV读30×50K的矩阵,IO时间占整个流程的70%。换成parquet后,加载时间降到了十分之一。
2.3 蛋白质组学数据
蛋白质组学直接测量蛋白质。和核酸不同,蛋白质没有PCR扩增,灵敏度受质谱仪限制。
数据特点
- 质谱原始谱图:由质荷比(m/z)和强度(intensity)组成。
- 动态范围宽:丰度高的蛋白和低的相差6个数量级。
- 翻译后修饰:磷酸化、乙酰化等,让问题更复杂。
- 不连续:许多肽段在检测中丢失,数据缺失率高达30%以上。
常见格式
| 格式 | 说明 | 典型场景 |
|---|---|---|
| MGF (Mascot Generic Format) | 存储MS/MS谱图,每个谱图由m/z、intensity、电荷组成 | 数据库搜索输入 |
| mzML | 标准化的质谱数据格式(基于XML) | 数据交换、存档 |
| MaxQuant output | proteinGroups.txt、peptides.txt等 | 定量后处理 |
| Spectral Library (MSP) | 实验谱图库,用于DIA分析 | SWATH/DIA定量 |
MGF格式片段
BEGIN IONS
TITLE=Scan 1000 [email sample]
PEPMASS=1024.56
CHARGE=2+
RTINSECONDS=2345.6
58.12 234.5
79.14 567.8
112.05 1234.2
END IONS
每段以BEGIN IONS开始,END IONS结束。中间的数值对是m/z 强度。嗯,这里要特别注意:电荷状态必须明确标注,否则搜索引擎会报错。
2.4 代谢组学数据
代谢组学看的是小分子(<1500 Da)代谢物。它的数据特点跟前面三个很不一样。
数据特点
- 非靶向 vs 靶向:非靶向产生成百上千个未知特征(features),靶向则只有几十个已知代谢物。
- 保留时间 + 精确质量:每个特征有保留时间、m/z和强度。
- 批次效应严重:仪器漂移、试剂批次都会造成数据偏移。
- 数据稀疏:很多代谢物只在少数样本中检测到。
常见格式
| 格式 | 说明 | 典型场景 |
|---|---|---|
| mzXML/mzData | XML格式,存储LC-MS原始数据 | XCMS、MZmine输入 |
| CDF (NetCDF) | 老式格式,兼容性好 | 老旧仪器数据 |
| Peak Table (CSV/TSV) | 特征列表:m/z、RT、intensity、sample ID | 统计分析 |
| MSP | 谱库格式,用于代谢物鉴定 | MS/MS匹配 |
特别注意:代谢组学的批次效应校正最好在GPU预处理阶段就做。我在一个大规模队列项目中,样本分两批检测,第一批和第二批之间RT偏移了±0.3 min。如果不在对齐阶段做校正,后面特征匹配会全乱套。
2.5 四种组学的关键差异对比
为了方便你理解,这里做一个横向对比。
| 维度 | 基因组学 | 转录组学 | 蛋白质组学 | 代谢组学 |
|---|---|---|---|---|
| 数据粒度 | 离散碱基/变异 | 基因表达计数 | 肽段/蛋白丰度 | 代谢物峰面积 |
| 数据分布 | 二项/泊松 | 负二项 | 对数正态 | 半正态+零膨胀 |
| 缺失值 | 极少(覆盖不足) | 中等(低表达) | 多(30~50%) | 非常多(>50%) |
| 数据量级 | TB级 | GB~TB级 | GB级 | MB~GB级 |
| 典型输入格式 | FASTQ, BAM | FASTQ, Count Matrix | MGF, mzML | mzXML, Peak Table |
| GPU加速切入点 | 比对、去重 | 定量、归一化 | 数据库搜索 | 峰对齐、聚类 |
2.6 本章知识体系图
下面这张图帮你理清四种组学数据的特点、格式和GPU加速的切入点,一图搞定。
2.7 关于预处理的一些经验
讲完格式和特点,我分享几个实战中归纳出来的原则。
- 格式统一先行:不管原始数据是FASTQ、MGF还是mzXML,最好在第一步就解析成GPU友好的内存布局(比如struct of arrays)。我习惯写一个统一的
RawReader接口,每种格式一个实现。 - 压缩要谨慎:gzip的FASTQ不能直接随机访问。如果要做GPU加速,建议先解压成未压缩文件或者用bgzip配索引。我在项目中吃过亏——试图用mmap读取gzip文件,结果内存被撑爆。
- 元数据至关重要:多组学整合时,样本ID、批次、条件等元数据必须与数据矩阵对齐。一个小建议:把元数据嵌入HDF5文件的attributes里,而不是单独一个CSV。这样永远不会错位。
一句话总结这一章:四种组学数据在格式、分布、缺失模式上差异很大,预处理前必须先识别这些特性,否则GPU加速的优势会被数据不规则性抵消掉。