公共数据集下载(GEO、ArrayExpress、SRA)
做单细胞RNA-seq分析,第一步往往是找数据。要么自己测,要么用别人的公开数据。公开数据哪里找?GEO、ArrayExpress、SRA 这三巨头基本包揽了主流存储库。我个人习惯是先用 GEO 或 ArrayExpress 检索,然后去 SRA 拿原始 fastq 文件。这节课就带你摸清这三个库的下载门道。
GEO 数据库:检索与下载
GEO(Gene Expression Omnibus)是 NCBI 旗下的老牌数据库,存了海量的基因表达数据,包括单细胞。每个数据集有一个 GSE 编号(比如 GSE123456),每个样本有一个 GSM 编号,对应的平台是 GPL 编号。我刚开始接触时总搞混这三个 ID,后来理清楚了:GSE 是研究项目,GSM 是单个样本,GPL 是芯片或测序平台信息。
下载 GEO 数据有两种常用方式:直接网页下载元数据或用 R 包。我个人推荐用 GEOquery,一条命令就能把表达矩阵和临床信息拉下来。
# 安装和加载
if (!require("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("GEOquery")
library(GEOquery)
# 下载 GSE 数据(以 GSE100000 为例)
gse <- getGEO("GSE100000", GSEMatrix = TRUE)
exprs_data <- exprs(gse[[1]])
pdata <- pData(gse[[1]])
# 查看样本信息
head(pdata[, 1:5])
getGEO 默认会缓存文件在本地,下次再运行直接读缓存,省时间。如果网络慢,可以手动下载 .txt.gz 文件再读。我遇到过不少次,GEO 里的单细胞数据只提供了表达矩阵,没有原始 fastq 文件。这时候就得去 SRA 下载原始数据了。嗯,关于 SRA,咱们后面细说。
ArrayExpress:欧洲仓库
ArrayExpress 是 EBI 旗下的数据库,跟 GEO 类似,但它的单细胞数据整理得更规范。每个实验有一个 E-MTAB- 或 E-GEOD- 开头的 ID。我个人更偏爱用它下载单细胞数据,因为它的样本注释更全,而且很多数据集直接关联了 SRA 或 ENA 的原始数据链接。
用 R 包 ArrayExpress 可以一键下载:
# 安装
if (!require("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("ArrayExpress")
library(ArrayExpress)
# 下载 E-MTAB-xxxx 数据集
ae <- ArrayExpress("E-MTAB-xxxx")
# ae 对象里包含了表达矩阵、样本信息等
exprs_matrix <- ae$expset
sdrf <- ae$sdrf
ftp://ftp.ebi.ac.uk/pub/databases/microarray/data/experiment/MTAB/E-MTAB-xxxx/SRA 数据库:原始测序数据的源头
SRA(Sequence Read Archive)存的是测序原始数据,也就是 fastq 或 sra 文件。单细胞 RNA-seq 的原始数据一般都放这里。SRA 使用 SRP/ERR/DRP 作为项目号,SRR/ERR/DRR 作为 run 号。你从 GEO 页面上翻到一个 GSE,点进去找到“SRA”链接,就能看到对应 SRP 或 SRR 号。
下载 SRA 数据最经典的工具是 SRA Toolkit。它提供了 prefetch 和 fastq-dump 两个主要命令。我的习惯是先用 prefetch 下载 .sra 文件,再用 fastq-dump 拆成 fastq。为什么不直接 fastq-dump 硬拉?因为网络原因中断后,prefetch 支持断点续传,效率高很多。
# 安装 SRA Toolkit
# Linux/macOS: 从 https://github.com/ncbi/sra-tools 下载
# 或使用 conda
conda install -c bioconda sra-tools
# 配置 vdb-config
vdb-config --interactive
# 选择好下载目录
# 用 prefetch 下载 SRR 文件
prefetch SRR12345678
# 快速检查是否下载成功
ls -lh ~/ncbi/public/sra/SRR12345678.sra
# 将 .sra 转为 fastq(单端或双端)
fastq-dump --split-files --gzip SRR12345678
# 对于 10x Genomics 数据,常用 --split-3 参数
fastq-dump --split-3 --gzip SRR12345678
--split-files 用于双端测序(生成 *_1.fastq 和 *_2.fastq);--split-3 能正确分离 10x 的 R1/R2 以及可能存在的 I1(index);--gzip 直接压缩节省空间。我遇到过一个问题:下载 10x 数据时,fastq-dump 默认把 barcode 和 UMI 混到了 R1 里,导致下游 cellranger count 报错。解决方案就是加 --split-3,它能自动识别 10x 的格式。嗯,这点务必记住。
实战:一次完整的下载流程
我以一篇真实的单细胞论文数据为例,演示完整流程:从 GEO 找到 GSE,定位到 SRA,再用 SRA Toolkit 下载 fastq。
假设你想下载 GSE150000 这篇数据。步骤如下:
- 打开 GEO 网页 (
https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE150000),查看样本信息表,找到“SRA”列。 - 点开其中一个样本的 SRA 超链接,页面会跳转到 NCBI SRA 记录,显示 SRR 号(如 SRR12345678)。
- 复制 SRR 号,在终端用
prefetch下载。 - 下载完成后用
fastq-dump --split-3 --gzip SRR12345678生成 fastq.gz。 - 检查文件大小和 md5,确保完整性。
为了提高速度,可以开多线程并行下载多个 SRR:
# 用 xargs 并行 prefetch
cat srr_list.txt | xargs -P 4 -I {} prefetch {}
# 或者使用 ascp(Aspera)加速
prefetch --transport ascp SRR12345678
三个数据库对比
| 数据库 | 所属机构 | 数据类型 | 常用下载工具 | ID 示例 |
|---|---|---|---|---|
| GEO | NCBI (美国) | 表达矩阵、元数据 | GEOquery (R) | GSE150000 |
| ArrayExpress | EBI (欧洲) | 表达矩阵、原始数据链接 | ArrayExpress (R) | E-MTAB-1234 |
| SRA | NCBI | 原始 fastq / sra 文件 | SRA Toolkit(prefetch, fastq-dump) | SRR12345678 |
你想想看,这三者关系其实是这样:GEO 和 ArrayExpress 是“入口”,给你搜数据、看元数据;SRA 是“仓库”,给你拿原始分子。实际工作中,我通常是先逛 GEO 或 ArrayExpress 选数据集,记下 SRA 访问号,然后回到终端批量下载。
这张图把流程串起来了:从 GEO 或 ArrayExpress 出发,到 SRA 拿到 SRR 号,用 prefetch 下到本地,再用 fastq-dump 解出 fastq,最后做质量检查。我自己在跑这个流程时,会把每个步骤写成一个 shell 脚本,这样下次换数据集只要改 SRR 列表就行。
fastq-dump --version 确认版本,我目前用的是 v3.0.8。