4、公共数据库介绍:GEO、SRA、ENA、ArrayExpress、TCGA、GTEx

做模型验证,最头疼的不是算法调参,而是「去哪找数据」。我刚入行那会儿,为了找一套合适的结直肠癌RNA-seq数据,愣是在PubMed和各个数据库之间来回切了三天。后来摸清了门道,发现其实主流公共数据库就那么几个,各有各的脾气。

这一节,我把几个最常用的数据库掰开揉碎了讲。把这些资源搞明白,你后续的数据获取至少能省一半时间。

4.1 核心数据库全景图

先看一张总览图,了解这些数据库在生态里的位置。

公共测序数据库全景图 原始测序数据层 SRA / ENA 处理表达数据层 GEO / ArrayExpress 特定项目数据层 TCGA / GTEx SRA (Sequence Read Archive) • NCBI 维护,测序原始 FASTQ • 支持 SRA Toolkit 下载 • 极擅长高通量数据 ENA (European Nucleotide Archive) • EMBL-EBI 维护 • 与 SRA 数据互通 • 对 European 项目友好 GEO (Gene Expression Omnibus) • NCBI 维护,最常用 • 存储表达矩阵+原始数据 • 搜 Series / Samples / Platforms ArrayExpress • EMBL-EBI 维护,GEO 对应物 • 对 ArrayExpress 提交严格 • 功能基因组的官方库 TCGA (The Cancer Genome Atlas) • 33 种癌症,10K+ 样本 • RNA-seq + WGS + 临床 • 必用 GDC Data Portal GTEx (Genotype-Tissue Expression) • 54 个健康组织,17K+ 样本 • 正常组织表达基线 • 与 TCGA 互补 对于 RNA-seq 模型鲁棒性验证 GEO/ArrayExpress 搜研究 → SRA/ENA 下原始数据 → TCGA/GTEx 做大样本验

这张图怎么看?从上往下看:原始数据层(SRA、ENA)存着最底层的FASTQ文件,处理数据层(GEO、ArrayExpress)存着表达量矩阵和元数据,特定项目层(TCGA、GTEx)则是针对癌症或正常组织的大规模资源库。我的经验是——模型验证时优先从GEO找,做泛癌种泛组织验证则绕不开TCGA和GTEx。

4.2 GEO:数据搜索的起点

GEO,说白了就是全球最大的基因表达数据仓库。我第一次用它的时候,还傻乎乎地只看看Series(GSE)数据,后来发现Sample(GSM)和Platform(GPL)一样重要。嗯,这里要注意,代码里如果加载GEO数据集,经常要同时处理这三个ID:GSE、GSM、GPL。

# 示例:通过 GEOquery 包搜索数据(R 语言)
# 安装:BiocManager::install("GEOquery")
library(GEOquery)

# 搜索与 "colorectal cancer" 相关的 RNA-seq 数据集
gse_list <- getGEO("GSE50760")  # 用一个具体 GSE ID
expr_mat <- exprs(gse_list[[1]])  # 提取表达矩阵

我给一个新团队培训时,最常说的是这句话:别只看摘要,去查「Supplementary file」里有没有 counts 矩阵。

  • GEO 三大组件:Series(研究简述)、Sample(样本详情)、Platform(平台信息)
  • 最值钱的字段:Expression profiling by high throughput sequencing(RNA-seq)
  • 数据规模:50万+ 研究,涵盖几乎所有已知生物

4.3 SRA 与 ENA:原始数据的出处

GEO里的表达矩阵固然方便,但如果你想完全复现别人的分析流程,得去SRA或ENA下载FASTQ。

我个人习惯是从GEO里看到某个GSE,然后在页面底部找到SRA accession(比如SRPXXXXX),再用SRA Toolkit下载。

# 命令行示例:用 fasterq-dump 将 SRA 转为 FASTQ
fasterq-dump --split-files --threads 8 SRR1234567 -O ./data/

说到ENA,欧洲的兄弟姐妹们都爱用这个。我记得有一次同事从GEO下载失败,转投ENA一把就下来了。数据其实是互通的,但ENA的HTTP下载有时比NCBI的FTP稳一些。

避坑指南:SRA Toolkit 的 prefetch 经常因为网络问题卡死。加一个 --max-size 50G 参数能缓解。如果断连了,重跑 prefetch 会接着上次继续,别删重下。

4.4 ArrayExpress:GEO的欧洲姐妹

ArrayExpress和GEO就像是EMBL-EBI跟NCBI各自撑起的半边天。其实很多高水准期刊要求数据必须同时提交到ArrayExpress和GEO,所以数据质量相对统一。

我曾在ArrayExpress上找到一个别人没发现的睡眠剥夺RNA-seq数据集,里面正好有血和组织配对样本,用来验证模型跨组织泛化能力特别合适。关键是你得会用它的REST API。

# 用 curl 查询 ArrayExpress 数据(命令行)
# 搜索 "aging" 相关实验
curl -X GET "https://www.ebi.ac.uk/arrayexpress/json/v3/experiments?keywords=aging&species=human"

ArrayExpress的元数据比GEO更规范。它强制要求填写MAGE-TAB格式的表头,从试剂到归一化方法都列得清清楚楚。这对做模型验证来说是天大的好事——meta信息越整齐,你评估噪声的时候心里越有底。

4.5 TCGA:癌症研究的数据金矿

TCGA,即使你不是做肿瘤的,也应该知道它。33种癌症类型、超过11,000个样本,每个样本都做了RNA-seq,还配了WGS、甲基化、临床信息。它的价值不在于数据量大,而在于统一标准。

我最常用TCGA做「跨癌种泛化验证」。比如一个模型在乳腺癌上训练,想看看在肝癌上效果如何——直接从GDC Data Portal拉数据就行。

# 用 gdc-client 下载 TCGA RNA-seq counts
# 首先下载 manifest 文件(在 Portal 上勾选后导出)
gdc-client download -m gdc_manifest.txt -d ./tcga_data/
避坑指南:TCGA的RNA-seq数据有两个版本——FPKM和Counts。做差异表达、做模型输入时务必使用Counts。FPKM跨样本归一化后的数据用于模型输入会产生系统性偏差。我曾经吃过这个亏,模型训练得漂漂亮亮,放到Counts数据上直接崩盘。

4.6 GTEx:正常组织的表达基线

模型验证里一个容易被忽略的问题是:你的模型在「正常组织」上会不会乱报差异?GTEx就是用来回答这个问题的。它收录了来自54个健康组织的17,382个样本。

举个例子,我想测一个类器官模型跟真实组织的相似度。用GTEx拿到肺、肝、脑组织的表达分布,再跟模型输出算一个Spearman相关,就能看出差距在哪。

# 通过 GTEx Portal API 获取数据(Python 示例)
import requests

# 获取 GTEx 中肺组织的基因表达中位数
url = "https://gtexportal.org/api/v2/expression/medianExpression"
params = {"gencodeId": "ENSG00000141510.10", "tissueSiteDetailId": "Lung"}
r = requests.get(url, params=params)
print(r.json())

4.7 六大数据库对比速查

我把这几个数据库的核心参数列成了一张表,用熟了之后直接查表会比点网页快得多。

数据库 管理机构 数据类型 数据规模(样本级) 适用场景
GEO NCBI 表达矩阵 + 原始FASTQ 50万+ 研究 广泛搜索,模型验证初始数据集
SRA NCBI FASTQ + 对齐文件 数百万样本 从零构建pipeline时获取原始read
ENA EMBL-EBI FASTQ + 对齐文件 与SRA互通 欧洲数据倾向,HTTP下载稳定
ArrayExpress EMBL-EBI 表达矩阵 + 元数据表格 ~5万研究 需高度规范元数据的研究
TCGA NCI / NHGRI RNA-seq Counts / FPKM + 临床 11,000+ 癌症多癌种泛化验证
GTEx NIH RNA-seq Counts / TPM + 组织注释 17,382 正常组织表达基线验证

我自己的数据获取优先级是:先从GEO/ArrayExpress搜到目标研究,如果需要FASTQ就从SRA/ENA下,如果验证泛癌种或跨组织泛化就直接从TCGA/GTEx取大样本。这个流程目前我跑了快三年,还没踩过大坑。

一个小技巧:在GEO里搜完记得点开“Supplementary file”,很多作者会直接上传 counts 表,这比从SRA重新跑一遍快一整天。