公共数据库获取数据:GEO / TCGA / SRA 的检索与下载方法

做RNA-seq分析,第一步就是拿到数据。你可能会问:数据从哪来?

其实最常用的就三个公共仓库:GEO(基因表达综合库)、TCGA(癌症基因组图谱)和SRA(序列读取档案)。它们背后的管理机构不同,检索和下载方式也各有特色。我刚开始接触时也被搞晕过,所以今天就把这三个数据库的用法捋清楚。

核心原则:先检索元数据(研究描述、样本信息),再根据研究编号下载原始测序文件。千万别直接拿项目ID去瞎下,容易下错文件。

1. GEO —— 基因表达综合库

GEO由NCBI维护,主要存储基因表达数据(如芯片、RNA-seq的count表或原始数据)。如果你要找某个疾病相关的公开表达谱,GEO通常是首选。

检索入口

我个人习惯直接用GEO DataSets或GEO Profiles搜索。但更批量化的方式是用R包GEOquery。

举个栗子:搜索“lung adenocarcinoma RNA-seq”并下载表达矩阵。

# 安装Geoquery
if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")
BiocManager::install("GEOquery")

# 获取数据集
library(GEOquery)
gse <- getGEO("GSE116959", GSEMatrix = TRUE)
# 查看表达矩阵
exprs_data <- exprs(gse[[1]])
head(exprs_data)

我曾经在项目里直接用这个方法拉了一个GSE系列的全部样本,几分钟搞定。但要注意,getGEO()默认下载的是处理后的表达矩阵,不是原始fastq。如果你需要原始fastq,得去GEO页面看“Supplementary file”列表,或者通过SRA accession跳转。

避坑指南:GEO的SuppFile有时是压缩的CEL或TXT,不一定包含原始测序数据。如果是RNA-seq,通常会在描述里注明对应的SRA号(比如SRPxxx或SRRxxx)。

2. TCGA —— 癌症基因组图谱

TCGA包含33种癌症类型的多组学数据(RNA-seq、WES、甲基化等)。数据可以通过GDC Data Portal网页或命令行工具gdc-client下载。

检索方式

我建议先通过GDC Data Portal(https://portal.gdc.cancer.gov/)按癌症类型、数据类型(RNA-Seq)、实验策略(Stranded或Unstranded)过滤,然后获取manifest文件。

# 用gdc-client下载
gdc-client download -m gdc_manifest.txt -d ./TCGA_data

这个manifest文件里包含所有文件的UUID和md5。gdc-client会自动校验完整性,非常省心。

另外,如果你更喜欢R,可以用TCGAbiolinks包。它封装了查询、下载、预处理的一整套流程。

library(TCGAbiolinks)
query <- GDCquery(project = "TCGA-LUAD",
                  data.category = "Transcriptome Profiling",
                  data.type = "Gene Expression Quantification",
                  workflow.type = "STAR - Counts")
GDCdownload(query)
data <- GDCprepare(query)

嗯,这里要注意:GDCdownload会自动调用gdc-client,所以你得确保机器上装了gdc-client,并且加入了PATH。

3. SRA —— 序列读取档案

SRA是NCBI下的另一个姊妹库,专门存原始测序数据(fastq格式)。许多GEO和TCGA的原始数据最终都在SRA里有备份。

检索与下载

我常用的工具是SRA Toolkit。先用prefetch下载.sra文件,再用fasterq-dump或fastq-dump转成fastq。

# 下载SRA文件
prefetch SRR12345678
# 转成fastq (双端)
fasterq-dump --split-files SRR12345678

如果你在集群上跑,强烈推荐用fasterq-dump而不是fastq-dump,因为它支持多线程,速度能快几倍。我之前在项目中处理200个SRA时,用fasterq-dump把总时间从3小时压缩到了40分钟。

当然,你也可以在浏览器里直接去SRA Run Selector页面可视化选择样本,然后生成下载脚本。但不建议手动一个个点,太累了。

小技巧:如果你只要metadata(比如样本ID、疾病状态、测序平台),可以直接用csvtk或pandas解析NCBI的SRA RunInfo表,远比翻网页快。

4. 三个数据库的对比与选择

为了帮你快速决策,我整理了一张表格,你看看:

数据库主要数据内容典型检索工具下载命令适合场景
GEO表达矩阵、芯片、已处理数据GEOquery(R)getGEO()快速获取表达量做差异分析
TCGA多组学原始counts、临床信息GDC Data Portal / TCGAbiolinksgdc-client download癌症多组学联合分析
SRA原始fastq文件SRA Run Selector / SRA Toolkitprefetch + fasterq-dump从头组装、变异检测、自建pipeline

在实际工作中,我经常会遇到这样一个场景:想用某个GEO数据集做验证,但发现它只提供了原始SRA链接,没有现成的count矩阵。这时就没必要死磕GEO了,直接从SRA拉原始fastq,然后跑一遍我自己的align和count流程,反而更可控。

5. 公共数据库检索与下载流程总览

下面这张SVG图总结了三个数据库的检索和下载核心逻辑,方便你对照操作。

公共RNA‑seq数据检索与下载流程 GEO TCGA / GDC SRA GEOquery / 网页 GDC Portal / TCGAbiolinks SRA Run Selector / prefetch getGEO() 获取矩阵 或SRA跳转 gdc-client download 或GDCprepare() prefetch + fasterq-dump 生成fastq 表达矩阵 / 原始fastq 可根据需要选择不同路径

你看,整个路径并不复杂:先确定数据库,用对应的检索工具拿到元数据和文件清单,再用专用客户端或R包下载。说白了,就是“检索 → 清单 → 下载”三步走。

核心经验:我建议你在本地建立一个 metadata/ 目录,把所有研究的SRA表、GEO系列描述、TCGA的manifest都存一份。下次需要相同数据时就不用重新检索了,直接拿manifest重新下载就行。