1. 单细胞空间数据概述:技术原理、常用平台、数据类型与结构
做空间转录组分析这几年,我最大的感触是:数据质控(QC)的质量,直接决定了后续分析的上限。很多同学一上来就急着跑聚类、找差异基因,结果被噪声数据带偏了方向。所以这门课的第一章,我们先打好基础——搞懂我们手里的数据到底是什么,从哪儿来,长什么样。
1.1 技术原理:两种思路,一个目标
单细胞空间转录组,说白了就是在组织原位检测每个细胞的基因表达。它不像普通单细胞测序那样把组织解离成单细胞悬液,而是保留细胞在组织中的物理位置。
我个人习惯把空间转录组技术分成两大类:基于成像的 和 基于测序的。
- 基于成像的方法(如 MERFISH、seqFISH+):通过荧光探针反复杂交、成像,直接“看见”RNA分子在细胞里的位置。好处是分辨率高,能达到单分子级别。坏处是通量有限,一次只能测几十到几百个基因。
- 基于测序的方法(如 10x Visium、Slide-seq):把组织切片放在带有空间条形码的捕获阵列上,让RNA扩散到捕获点,然后建库测序。好处是能捕获整个转录组,坏处是分辨率受限于捕获点大小。
我记得2019年刚接触这个领域时,被一个问题困扰了很久:“到底选哪种技术?”后来我总结了一个简单判断标准——看你的研究目标是发现新基因还是定位已知基因。
1.2 常用平台:选对工具,事半功倍
下面这张表,是我在实际项目中对比过的几个主流平台。搞懂了它们的差异,你选型的时候心里就有底了。
| 平台 | 原理 | 分辨率 | 通量 | 优点 | 局限 |
|---|---|---|---|---|---|
| 10x Visium | 捕获阵列 + 测序 | 55μm(~1-10细胞) | 全转录组 | 商业成熟,操作规范,稳定性好 | 分辨率较低,单spot可能混合多个细胞 |
| Slide-seqV2 | 捕获阵列 + 测序 | 10μm(~1-2细胞) | 全转录组 | 分辨率高,灵活可定制 | 覆盖均匀性略差,数据稀疏度高 |
| MERFISH | 成像 + 荧光杂交 | ~100nm(单分子) | 几百个基因 | 亚细胞分辨率,定量准确 | 基因通量受限,实验成本高 |
| seqFISH+ | 成像 + 荧光杂交 | ~100nm(单分子) | 近万个基因 | 高分辨率 + 高通量 | 实验流程复杂,数据分析难度大 |
| HDST | 捕获阵列 + 测序 | 2μm | 全转录组 | 极高分辨率 | 覆盖稀疏,技术尚未广泛普及 |
嗯,这里要注意,表格里的分辨率只是参考值。实际项目中,组织类型、切片质量、数据密度都会影响真实分辨率。
1.3 数据类型与结构:拆解空间数据的“三件套”
空间转录组数据,说白了由三部分组成:表达矩阵(Expression Matrix)、空间坐标(Spatial Coordinates) 和 图像数据(Imaging Data)。
表达矩阵和普通单细胞RNA-seq差不多,行是基因,列是捕获点(spot),值是UMI计数。但空间数据多了一个空间坐标信息,告诉你每个spot在组织上的具体位置。
我记得第一次处理Visium数据时,拿到的是一个叫 filtered_feature_bc_matrix 的文件夹,里面的结构是这样的:
filtered_feature_bc_matrix/
├── barcodes.tsv.gz # 每个spot的条形码
├── features.tsv.gz # 基因列表(含ENSEMBL ID和Symbol)
└── matrix.mtx.gz # UMI计数矩阵(稀疏格式)
spatial/
├── tissue_image.png # H&E染色图像
├── tissue_positions_list.csv # spot坐标与组织区域标记
└── scalefactors_json.json # 图像缩放参数
简单解释下这几个文件:
- barcodes.tsv.gz:一行一个spot条形码,对应捕获阵列上的物理位置。
- features.tsv.gz:三列,ENSEMBL ID、基因名、Feature类型(Gene / CRISPR等)。
- matrix.mtx.gz:Market Exchange格式的稀疏矩阵。
我记得刚开始教团队新人时,他们总是不理解为什么用稀疏矩阵。你想想看,一个组织切片上有5000个spot,检测20000个基因,那就是1亿个数据点。但实际上大部分基因在单个spot里是0表达。稀疏矩阵就是专门处理这种“大部分是0”的情况的,存储和计算效率都高得多。
barcode:spot唯一标识in_tissue:是否在组织区域内(0或1)array_row / array_col:捕获阵列上的网格坐标pxl_row / pxl_col:对应H&E图像上的像素坐标
举个例子,tissue_positions_list.csv 的前几行是这样的:
barcode,in_tissue,array_row,array_col,pxl_row,pxl_col
AAATGCCCAACGACG-1,0,0,0,0,0
AAAGAACGTCTGCCG-1,1,0,1,201,252
AAAGAACGGGATGAT-1,1,0,2,205,505
AAAGAACGGTGATTG-1,1,0,3,212,764
这里有个关键点:in_tissue=1 的spot才是我们真正要分析的。in_tissue=0 的spot在组织边界外,虽然也被捕获了,但基本只有背景噪声。
1.4 数据解析流程:一张图串起从组织到结果
我用一张图把整个流程串起来,方便你建立整体认知。
这张图把空间转录组数据从组织切片到下游分析的完整路径串起来了。我一般在项目启动前,会让团队先对着这张图过一遍,确保每个人都清楚数据流。
1.5 常见数据格式:统一规范,少走弯路
实践中,我们最常打交道的无非这三种格式:
- HDF5(.h5):10x Visium官方输出,一个文件包含表达矩阵、基因注释、条形码。适合归档和传输。
- AnnData(.h5ad):Python生态(Scanpy / Squidpy)的标准格式,支持分层存储,读写快。
- Seurat对象(.rds):R生态的标准格式,配合Seurat包做空间分析。
这里有个小经验:如果你团队里既有R用户又有Python用户,建议统一用h5ad格式做中转。我在一个跨组合作项目里吃过亏——R组给了Seurat对象,Python组读不了,来回转换浪费了一周时间。
# 使用 zellkonverter 包在 R 和 Python 之间互转
# Python → R
import anndata
adata = anndata.read_h5ad("data.h5ad")
adata.write_zarr("data.zarr")
# R → Python
library(zellkonverter)
sce <- readH5AD("data.h5ad")
# 或直接读取 zarr 格式
- 空间转录组分成像法和测序法两大类,选型要看研究目标和组织类型
- 10x Visium 适合入门和全转录组筛查,MERFISH / Slide-seq 适合高分辨率需求
- 数据由 表达矩阵 + 空间坐标 + 图像 三部分组成
- QC 第一步:过滤非组织区域的 spot(in_tissue = 0)
- 跨组协作时,统一数据格式(如 .h5ad)能省去大量麻烦
嗯,第一章就到这里。基础概念打牢了,后面讲QC实操的时候你才能理解每一步在干什么。