公共数据集下载(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
注意:ArrayExpress 的 R 包有时会因为服务器更新而连接不上。我去年就踩过这个坑,后来改用 FTP 手动下载。如果报错,试试直接去官网查 FTP 链接: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 这篇数据。步骤如下:

  1. 打开 GEO 网页 (https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE150000),查看样本信息表,找到“SRA”列。
  2. 点开其中一个样本的 SRA 超链接,页面会跳转到 NCBI SRA 记录,显示 SRR 号(如 SRR12345678)。
  3. 复制 SRR 号,在终端用 prefetch 下载。
  4. 下载完成后用 fastq-dump --split-3 --gzip SRR12345678 生成 fastq.gz。
  5. 检查文件大小和 md5,确保完整性。

为了提高速度,可以开多线程并行下载多个 SRR:

# 用 xargs 并行 prefetch
cat srr_list.txt | xargs -P 4 -I {} prefetch {}

# 或者使用 ascp(Aspera)加速
prefetch --transport ascp SRR12345678
大型数据警告:单细胞数据集动辄几十 GB,甚至数百 GB。下载前一定先看 SRA 页面上的“Size”列,评估磁盘空间。我有个朋友曾经把服务器磁盘撑爆了,导致后续分析全挂。

三个数据库对比

数据库所属机构数据类型常用下载工具ID 示例
GEONCBI (美国)表达矩阵、元数据GEOquery (R)GSE150000
ArrayExpressEBI (欧洲)表达矩阵、原始数据链接ArrayExpress (R)E-MTAB-1234
SRANCBI原始 fastq / sra 文件SRA Toolkit(prefetch, fastq-dump)SRR12345678

你想想看,这三者关系其实是这样:GEO 和 ArrayExpress 是“入口”,给你搜数据、看元数据;SRA 是“仓库”,给你拿原始分子。实际工作中,我通常是先逛 GEO 或 ArrayExpress 选数据集,记下 SRA 访问号,然后回到终端批量下载。

公共数据集下载流程 公共数据集下载流程 1. 检索数据 GEO / ArrayExpress 2. 获取SRA Accession SRP / SRR 号 3. prefetch 下载 生成 .sra 文件 4. fastq-dump 转换 生成 fastq.gz 5. 质量检查 fastQC / md5sum 💡 小贴士 • 先查看数据大小 • 用 --split-3 处理10x • 用 ascp 加速大文件 • 磁盘用完前及时清理 ArrayExpress GEO

这张图把流程串起来了:从 GEO 或 ArrayExpress 出发,到 SRA 拿到 SRR 号,用 prefetch 下到本地,再用 fastq-dump 解出 fastq,最后做质量检查。我自己在跑这个流程时,会把每个步骤写成一个 shell 脚本,这样下次换数据集只要改 SRR 列表就行。

一点经验:SRA Toolkit 的版本非常重要。我有一回用旧版 fastq-dump,结果它把 barcode 拆错了,导致 downstream mapping 全部错乱。后来升级到 3.0+ 才解决。建议你装完先跑 fastq-dump --version 确认版本,我目前用的是 v3.0.8。