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分钟写一个校验脚本,检查文件完整性、格式统一性、关键列名是否一致。不要急着跑分析,数据质量决定了结果质量。这一步省下来的时间,后面能还回来十倍。

三种数据源下载与格式归纳流程 数据获取流程:三源归一 GEO SRR / SRA / H5 / MTX 10X Genomics MEX / H5 / FASTQ 空间转录组库 TIFF / JSON / H5AD 格式归一化 统一为 Anndata / SeuratObject 多模态整合 scRNA + 空间坐标 + 图像 ⚠ 注意:GEO格式最乱,10X最标准,空间库需保留坐标。 下载后第一件事——检查文件完整性,再谈整合。

3.7 一句话总结

数据获取不是体力活,是技术活。我见过太多人花一周下载、花两周清洗。其实从GEO、10X、空间库三方入手,把格式摸透,一天就能搞定。