4、公共数据库介绍:GEO、SRA、ENA、ArrayExpress、TCGA、GTEx
做模型验证,最头疼的不是算法调参,而是「去哪找数据」。我刚入行那会儿,为了找一套合适的结直肠癌RNA-seq数据,愣是在PubMed和各个数据库之间来回切了三天。后来摸清了门道,发现其实主流公共数据库就那么几个,各有各的脾气。
这一节,我把几个最常用的数据库掰开揉碎了讲。把这些资源搞明白,你后续的数据获取至少能省一半时间。
4.1 核心数据库全景图
先看一张总览图,了解这些数据库在生态里的位置。
这张图怎么看?从上往下看:原始数据层(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稳一些。
--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/
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取大样本。这个流程目前我跑了快三年,还没踩过大坑。