多组学数据概述:基因组、转录组、蛋白质组、代谢组、表观组数据的特点与格式

各位同学,大家好。欢迎来到第二章。

上一章我们聊了数据湖的整体架构。但湖里要装什么“水”?这才是关键。多组学数据,说白了就是不同“维度”的生物信息快照。我刚开始接触多组学时,最头疼的就是这些数据的“方言”——格式完全不同。

这一章,我们就把五种核心组学数据的特点和常见格式捋一遍。你想想看,如果连原始数据长什么样都不知道,ETL管线又从何谈起?

基因组学数据(DNA层面)

基因组学,看的是DNA序列的全貌或局部。它的数据有两个核心阶段:测序仪直接吐出来的原始信号,和比对到参考基因组后的结果。

常见格式一览:

格式 存储内容 特点 我的使用场景
FASTQ 原始读段(Reads)与碱基质量分 文本,体积巨大,行数固定(4行/条) 质量控制(QC)和比对前必须有的输入
BAM/CRAM 比对后的比对记录 二进制,可排序/索引,CRAM压缩率更高 变异检测、可视化查看
VCF 变异位点(SNP/InDel/SV) 文本+索引,分列存储 群体遗传分析、GWAS、家系分析
FASTA 参考基因组序列或组装结果 纯文本,按序列头与碱基分行 比对时的参考文件

我个人习惯,拿到VCF文件后第一件事就是检查索引(.tbi或.csi)。没索引的VCF就像一本没有目录的书,很多工具跑起来会非常慢。具体检查命令长这样:

tabix -p vcf sample.vcf.gz
# 看看能不能快速定位一个区域
tabix sample.vcf.gz chr1:1000000-2000000 | head

举个例子,FASTQ记录长这样:

@SEQ_ID
GATTTGGGGTTCAAAGCAGTATCGATCAAATAGTAAATCCATTTGTTCAACTCACAGTTT
+
!''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>>>CCCCCCC65

第一行是标识符,第二行是序列,第三行是分隔符(通常就是一个“+”),第四行是质量分(每个字符对应一个Phred分值)。嗯,这里要注意:质量分如果偏低,说明测序质量差,下游分析就容易出错。

转录组学数据(RNA层面)

转录组看的是哪些基因在“说话”,以及说了多少。它的数据格式和基因组学有交集,但也有独有格式。

  • FASTQ / BAM:和基因组学一样,只是比对时常用剪接感知比对器(比如STAR、HISAT2)。
  • Counts矩阵:行是基因(或转录本),列是样本,值是映射到的reads数量。这是差异表达分析的标准输入。
  • FPKM / TPM / CPM:归一化后的表达量。我最常用TPM(Transcripts Per Million),因为它比FPKM更便于跨样本比较。
  • GTF / GFF:基因注释文件,标注外显子、CDS、UTR等区域。这个文件质量直接影响基因计数的准确性。

这里有个特别容易踩的坑:Counts矩阵如果是整数,那没问题。但如果你看到FPKM/TPM也用整数表示,那就要谨慎了——大概率是上游软件没做归一化,直接把原始counts改了个列名。我曾经接手过一个项目,分析结果一直不理想,最后查出来是Counts矩阵的列标题写错了,把“FPKM”当成了原始计数在用。

GTF文件中一行的结构示例:

chr1    HAVANA  exon    11869   12227   .   +   .   gene_id "ENSG00000223972.5"; transcript_id "ENST00000456328.2";

蛋白质组学数据(蛋白质层面)

蛋白质组学可没有测序仪直接吐序列那么方便。它的核心数据来自质谱仪(Mass Spectrometry)。

主要格式包括:

格式 说明 大小特点
RAW 质谱仪原始文件,厂商专属(Thermo、Bruker等) 几百MB到几GB
MGF 开放的峰列表格式,文本 相对较小,但易读
mzML 标准XML格式,保留完整元数据 比MGF大
Peptide-Spectrum-Matches (PSM) 表格 鉴定结果,列包含肽段序列、蛋白ID、评分、q-value 小,易处理
蛋白定量矩阵 类似RNA的Counts矩阵,行是蛋白,列是样本,值常为iBAQ或LFQ intensity 小,文本

注意:不同质谱仪的RAW格式互不通用的。你在ETL管线里一定要预留一个“格式转换”步骤,用类似ProteoWizard的msConvert工具转成mzML或MGF。如果你跳过这步,直接去解析RAW文件……嗯,我试过,结果就是各种库不支持,浪费时间。

代谢组学数据(代谢物层面)

代谢组学关注的是小分子代谢物。它的数据也来自质谱或核磁共振(NMR)。

  • LC-MS/GC-MS原始文件:和蛋白质组学的RAW类似,通常也是厂商专属格式。
  • 峰表(Peak Table):经过峰检测、对齐后的结果。包含保留时间(RT)、质荷比(m/z)、各样本的峰面积。
  • mzXML / mzML:开放的XML格式。
  • 代谢物丰度矩阵:就是最终的定量矩阵,行是代谢物,列是样本。

代谢组学的一个麻烦点:同一代谢物可能在不同数据库里有不同名字(比如“葡萄糖”在HMDB、PubChem、KEGG中的ID不一样)。怎么办?我个人建议在ETL里建立一个“统一命名映射表”,用InChI Key或SMILES作为anchor。

表观组学数据(调控层面)

表观组学看的是染色质状态、DNA甲基化、组蛋白修饰等。它的数据格式比较多样。

技术 常见格式 典型数据内容
ChIP-seq / ATAC-seq FASTQ → BAM → BED/BigWig → Peak BED(narrowPeak) 峰区域、信号密度
BS-seq / WGBS FASTQ → BAM(经BSMAP/Bismark) → CpG甲基化比率矩阵 每个CpG位点甲基化比率
Hi-C FASTQ → BAM → .cool / .hic 染色质交互矩阵

以BED格式为例,narrowPeak文件前几列:

chr1    10060   10280   peak1   1000    .   7.83   -1    -1   150

数据格式对比表

为了帮你更快理清思路,我把几种关键格式的适用阶段整理成了表格:

格式 组学 阶段 数据湖是否适合直接存储
FASTQ 基因组/转录组/表观组 原始 是,但建议压缩(.fastq.gz/.fastq.bz2)
BAM 基因组/转录组/表观组 比对后 是,但需要索引文件
VCF 基因组 变异 是,推荐用bcftools压缩
Counts矩阵 转录组 定量 是,小文件,可存Parquet
mzML 蛋白质组/代谢组 质谱处理后 是,XML体积中等
narrowPeak 表观组 峰调用后 是,小文件

我建议你把所有文本格式(FASTQ、VCF、Counts矩阵)在数据湖里都存一份Parquet版本。查起来特别快,而且Spark能直接读。怎么转?用Python的pandas或PyArrow就行:

import pandas as pd
# 假设你有一个CSV格式的counts矩阵
df = pd.read_csv("gene_counts.csv", sep="\t")
df.to_parquet("gene_counts.parquet", index=False)

多组学数据整合流程逻辑

如果你是第一次接触多组学,可能觉得这些格式很乱。别急,它们其实有清晰的逻辑关系:从原始数据逐步加工,最后汇总到统一的数据湖。

多组学数据整合流程 原始数据层 处理数据层 统一整合层 基因组 FASTQ/BAM 转录组 Counts矩阵 蛋白质组 RAW/mzML 代谢组 峰表/mzML 表观组 FASTQ/BED 甲基化比率矩阵 变异 VCF 表达谱 TPM/FPKM 蛋白定量 iBAQ 代谢物丰度矩阵 Peak文件 narrowPeak 交互矩阵 .cool/.hic 数据湖 Parquet + 索引 数据清洗 格式统一

图里展示了一个典型的多组学数据流向。左侧是原始数据,中间是经过初级处理后的格式,最终汇聚到数据湖。我们在设计ETL管线时,最好把每一层的处理都独立模块化,这样管线才更容易维护和扩展。

本章核心总结

  • 基因组学:原始用FASTQ,比对用BAM,变异用VCF。
  • 转录组学:Counts矩阵是定量基础,TPM更利于样本间比较。
  • 蛋白质组学:厂商RAW格式必须转换,推荐mzML。
  • 代谢组学:峰表是关键产物,命名映射要提前规划。
  • 表观组学:BED/narrowPeak是标准峰值格式,BS-seq需要甲基化比率。
  • 数据湖策略:所有文本格式建议转存Parquet,既压缩又支持列式查询。

理解这些数据格式,是设计ETL管线的前提。搞错一个格式,后面的分析全都白搭。我见过太多项目因为FASTQ和FASTA混淆、VCF和Counts矩阵混在一起,导致管线调试了半个月。