第3章 数据获取:公共数据库下载与格式归纳
做多模态整合,第一步就是搞数据。
说实话,这块坑不少。我自己刚入行时,光下载就折腾了两天,后来发现是格式没搞明白。今天我把三个主流数据源——GEO、10X Genomics官网、Spatial Transcriptomics专用库——给你们梳理清楚。
3.1 三大数据源,到底有啥不同?
我习惯把它们按应用场景分成三类:
| 数据源 | 典型数据类型 | 格式特点 | 下载方式 |
|---|---|---|---|
| GEO | scRNA-seq、芯片数据 | 多为HDF5、MTX、CSV | GEO网页 / SRA Toolkit |
| 10X Genomics | 官方Visium / Chromium | 标准MEX / H5 / Loom | 官网直接下载 |
| SpatialDB等 | 空间转录组专用 | TIFF + JSON + H5AD | 专用API或FTP |
嗯,这里要注意:GEO的格式最乱,没有之一。我遇到过同一个项目里,有些样本是10X格式,有些是Smart-seq2。你得学会识别。
黄金法则:先看发布者的README,再看文章Supplemental部分。格式不对,强行跑scripts会出事。
3.2 GEO:低门槛但高污染的数据源
GEO(Gene Expression Omnibus)是老大哥。但老大哥的格式管理嘛……一言难尽。我曾在GSE134355项目里找过一批10X样本,结果发现原始数据用的是SRA格式,没有barcodes.tsv。
我的个人习惯:先搜GSE编号,查Series Matrix File,再看Supplementary File列表。如果有h5或mtx.gz,优先选。
下载方式一般有两种:
- 网页直接点:适合小文件(< 500MB)
- SRA Toolkit走命令行:适合批量下载,比如几百个样本
# 安装SRA Toolkit(macOS为例)
brew install sratoolkit
# 下载SRA文件
prefetch SRR12345678
# 转成FASTQ(用于STARsolo或cellranger)
fasterq-dump --split-files SRR12345678
转出来的FASTQ,再跑一遍cellranger count。但说实话,我更推荐直接用作者提供的count矩阵,省时省力。
我曾经踩过坑:SRA下载下来的FASTQ,有时候read名字格式不标准,导致cellranger报错。解决方案是加--split-files参数,并且检查一下read1和read2的命名是否一致。
3.3 10X Genomics官网:标准化程度最高
10X官网的数据质量最好。格式统一,barcodes.tsv、features.tsv.gz、matrix.mtx.gz三件套,清晰明了。
我常用的下载入口是:10X Datasets。里面有人鼠、不同组织的空间转录组数据。
下载时,你会看到两种格式:
- MEX格式:稀疏矩阵,适合Seurat和Scanpy
- H5格式:单个文件,适合HDF5处理流
我个人倾向用MEX。为什么呢?因为我在项目里发现,H5文件在Python里读取时容易内存爆掉,而MEX是按需加载的。嗯,这里要注意。
# 下载示例:一个1k PBMC数据
wget https://cf.10xgenomics.com/samples/cell-exp/3.0.0/pbmc_1k/pbmc_1k_filtered_feature_bc_matrix.tar.gz
tar -xzf pbmc_1k_filtered_feature_bc_matrix.tar.gz
# 查看结构
ls pbmc_1k_filtered_feature_bc_matrix/
# barcodes.tsv.gz features.tsv.gz matrix.mtx.gz
小技巧:下载前注意看“Chemistry”字段。3' v3和5' v2的基因捕获效率差异很大。我在整合数据集时,这一点经常被忽略,结果批次效应怎么也消不掉。
3.4 Spatial Transcriptomics专用库
空间转录组数据,除了10X官网,还有几个专用库:
- SpatialDB:老牌空间转录组库,涵盖多种技术平台
- STOmics DB:华大Stereo-seq专用,分辨率极高
- Zenodo:常见于Cell / Nature子刊的补充数据
这些库的格式特点——往往包含空间坐标!
举个例子,一个标准Visium数据包应该包含:
- tissue_hires_image.png(病理图)
- tissue_positions_list.csv(spot坐标)
- filtered_feature_bc_matrix.h5(count矩阵)
- scalefactors_json.json(图像比例参数)
我开始做空间转录组时,第一次搞不清 scalefactors_json 是干嘛的,结果图像对齐全乱套了。你想想看,spot坐标是从原始像素坐标出发的,但病理图可能被缩放过了,没这个json文件,坐标映射就全废了。
# 我常用wget或curl下载
curl -L -o st_data.tar.gz https://zenodo.org/record/1234567/files/ST10X_brain.zip?download=1
# 查看关键配置文件
unzip -l st_data.tar.gz | grep -E "tissue|json|h5"
特别注意:空间转录组数据下载完后,先检查tissue_positions_list.csv里的像素坐标范围,再和tissue_hires_image.png的分辨率对比。我曾经有一次图像分辨率是两千、坐标范围只到几百,就知道scalefactors没对。
3.5 格式归纳:从原始到整合
多模态整合时,你手里的数据可能来自不同来源。格式归纳一下,其实就三大类:
| 整合层 | 格式 | 常用工具 | 典型用途 |
|---|---|---|---|
| 原始层 | FASTQ / SRA / TIFF | cellranger / sratk | 表达量化、图像配准 |
| 表达层 | MTX / H5 / Loom | Seurat / Scanpy | 降维聚类、差异分析 |
| 整合层 | H5AD / RDS | Scanpy / Seurat | 多模态融合、空间注释 |
你想想看,如果一开始数据格式都不统一,后面做整合就像拿英语和法语聊天。我建议:
- 从GEO下的数据,先转成Anndata或SeuratObject
- 10X官网的数据直接读就行
- 空间数据必须保留坐标和图像字段
3.6 避坑指南 & 最佳实践
我曾经吃过的大亏:下载GEO数据时,没检查作者是否用了“cellranger aggr”聚合。结果同一个文件夹下有多个样本的barcodes,却共用同一个features.tsv。读取时barcode冲突,白白浪费一天debug时间。解决方案是:下载后立刻用du -sh *检查文件夹结构,确认每个样本独立。
另一个常见坑是空间坐标的单位混乱。有的文章用μm,有的用像素。我在整合两个数据集时,坐标单位对不上,差点硬对齐——其实只要查一下spot_size_um参数就行。
我个人的最佳工作流:先花10分钟写一个校验脚本,检查文件完整性、格式统一性、关键列名是否一致。不要急着跑分析,数据质量决定了结果质量。这一步省下来的时间,后面能还回来十倍。
3.7 一句话总结
数据获取不是体力活,是技术活。我见过太多人花一周下载、花两周清洗。其实从GEO、10X、空间库三方入手,把格式摸透,一天就能搞定。