多组学数据概述:基因组、转录组、蛋白质组、代谢组、表观组数据的特点与格式
各位同学,大家好。欢迎来到第二章。
上一章我们聊了数据湖的整体架构。但湖里要装什么“水”?这才是关键。多组学数据,说白了就是不同“维度”的生物信息快照。我刚开始接触多组学时,最头疼的就是这些数据的“方言”——格式完全不同。
这一章,我们就把五种核心组学数据的特点和常见格式捋一遍。你想想看,如果连原始数据长什么样都不知道,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)
多组学数据整合流程逻辑
如果你是第一次接触多组学,可能觉得这些格式很乱。别急,它们其实有清晰的逻辑关系:从原始数据逐步加工,最后汇总到统一的数据湖。
图里展示了一个典型的多组学数据流向。左侧是原始数据,中间是经过初级处理后的格式,最终汇聚到数据湖。我们在设计ETL管线时,最好把每一层的处理都独立模块化,这样管线才更容易维护和扩展。
本章核心总结
- 基因组学:原始用FASTQ,比对用BAM,变异用VCF。
- 转录组学:Counts矩阵是定量基础,TPM更利于样本间比较。
- 蛋白质组学:厂商RAW格式必须转换,推荐mzML。
- 代谢组学:峰表是关键产物,命名映射要提前规划。
- 表观组学:BED/narrowPeak是标准峰值格式,BS-seq需要甲基化比率。
- 数据湖策略:所有文本格式建议转存Parquet,既压缩又支持列式查询。
理解这些数据格式,是设计ETL管线的前提。搞错一个格式,后面的分析全都白搭。我见过太多项目因为FASTQ和FASTA混淆、VCF和Counts矩阵混在一起,导致管线调试了半个月。