空间转录组分析新手必看:如何用stlearn搞定多样本整合(附完整代码)
空间转录组分析实战指南用stlearn实现多样本整合的完整流程第一次接触空间转录组数据分析时我被那些复杂的空间坐标和基因表达矩阵搞得晕头转向。直到发现stlearn这个工具才真正体会到空间组学分析的魅力——它不仅能保留组织结构的空间信息还能整合多个样本的数据让我们从更宏观的角度理解生物学问题。如果你正在处理来自不同实验批次或不同患者的多个空间转录组样本这篇文章将带你一步步完成整合分析的全流程。1. 空间转录组多样本整合的核心挑战空间转录组技术让我们能够同时获取基因表达数据和细胞的空间位置信息这在肿瘤微环境研究、发育生物学和神经科学等领域具有独特优势。但当面对多个样本时三个主要问题会直接影响分析结果的可靠性批次效应不同实验批次、不同操作人员甚至不同试剂都可能引入技术变异。我曾遇到过两个相同条件的样本由于处理时间相差一周基因表达模式出现了明显差异。样本间异质性即使是相同组织类型不同个体间也存在生物学差异。比如在分析阿尔茨海默症患者脑组织时疾病阶段不同会导致细胞组成显著不同。空间信息保留传统单细胞整合方法会丢失关键的空间坐标信息。想象一下如果忽略了肿瘤核心区和边缘区的空间分布很多重要发现就会被掩盖。表空间转录组多样本整合的关键考量因素考量维度技术挑战解决方案数据质量不同样本测序深度差异标准化和基因过滤批次效应非生物因素导致的技术变异Harmony或BBKNN校正空间保持坐标系统不一致相对位置对齐生物学差异真实存在的样本间变异保留有意义的差异stlearn通过结合Scanpy的预处理流程和专门的空间分析方法提供了一套完整的解决方案。它的优势在于直接兼容10x Genomics等主流平台数据格式内置空间特异性基因检测算法支持将整合结果映射回原始空间坐标2. 环境配置与数据准备2.1 安装stlearn及依赖推荐使用conda创建独立的Python环境避免包冲突conda create -n stlearn_env python3.8 conda activate stlearn_env pip install stlearn harmonypy scanpy对于国内用户可以添加清华镜像源加速安装pip install -i https://pypi.tuna.tsinghua.edu.cn/simple stlearn2.2 数据加载与初步检查假设我们有两个乳腺癌组织样本block1和block2每个样本都包含基因表达矩阵adata.X空间坐标adata.obsm[spatial]样本元数据adata.obsimport stlearn as st import scanpy as sc # 加载样本数据 block1 sc.read_10x_h5(block1_filtered_feature_bc_matrix.h5) block1.var_names_make_unique() block2 sc.read_10x_h5(block2_filtered_feature_bc_matrix.h5) block2.var_names_make_unique() # 添加空间坐标信息 spatial_coords1 pd.read_csv(block1_tissue_positions.csv, index_col0) block1.obsm[spatial] spatial_coords1.loc[block1.obs_names].values spatial_coords2 pd.read_csv(block2_tissue_positions.csv, index_col0) block2.obsm[spatial] spatial_coords2.loc[block2.obs_names].values # 标记样本来源 block1.obs[batch] sample1 block2.obs[batch] sample2提示务必检查空间坐标与表达矩阵的细胞barcode是否一一对应这是后续分析的基础。3. 多样本整合的核心步骤3.1 数据预处理与合并首先对每个样本单独进行质量控制然后合并# 基因和细胞过滤 sc.pp.filter_cells(block1, min_genes200) sc.pp.filter_genes(block1, min_cells3) sc.pp.filter_cells(block2, min_genes200) sc.pp.filter_genes(block2, min_cells3) # 合并样本 adata_concat block1.concatenate(block2, batch_keybatch) # 标准化处理 sc.pp.normalize_total(adata_concat, target_sum1e4) sc.pp.log1p(adata_concat) sc.pp.highly_variable_genes(adata_concat, min_mean0.0125, max_mean3, min_disp0.5) adata_concat adata_concat[:, adata_concat.var.highly_variable]3.2 批次校正与降维使用Harmony进行批次效应校正# PCA降维 sc.pp.scale(adata_concat, max_value10) sc.pp.pca(adata_concat, n_comps50) # Harmony整合 import harmonypy as hm ho hm.run_harmony(adata_concat.obsm[X_pca], adata_concat.obs, batch) adata_concat.obsm[X_harmony] ho.Z_corr.T # 基于校正后的嵌入进行聚类 sc.pp.neighbors(adata_concat, use_repX_harmony, n_neighbors15) sc.tl.umap(adata_concat) sc.tl.leiden(adata_concat, resolution0.5)3.3 空间信息映射将整合结果映射回原始空间坐标# 将聚类结果传回原始样本 block1.obs[leiden] adata_concat[adata_concat.obs[batch]sample1].obs[leiden] block2.obs[leiden] adata_concat[adata_concat.obs[batch]sample2].obs[leiden] # 可视化空间聚类 st.pl.cluster_plot(block1, use_labelleiden, size10) st.pl.cluster_plot(block2, use_labelleiden, size10)4. 结果验证与高级分析4.1 整合质量评估检查批次效应是否被有效去除# 批次混合评估 sc.pl.umap(adata_concat, color[batch, leiden], wspace0.5) # 计算批次混合指标 from scib.metrics import pcr_comparison batch_score pcr_comparison(adata_concat, batch, leiden) print(f批次混合得分为: {batch_score:.3f})理想情况下不同批次的细胞应该在UMAP空间中均匀混合同时保持生物学相关的聚类结构。4.2 空间差异表达分析识别在特定空间区域保守或特异的基因# 计算空间变异基因 st.spatial.marker_gene(adata_concat, cluster_keyleiden) # 可视化标记基因的空间分布 marker_genes [CD3D, EPCAM, PECAM1] for gene in marker_genes: st.pl.gene_plot(block1, gene, size15) st.pl.gene_plot(block2, gene, size15)4.3 跨样本空间模式比较使用stlearn的空间自相关分析比较不同样本的组织结构# 计算Morans I空间自相关 st.spatial.autocorrelation(block1, genesmarker_genes) st.spatial.autocorrelation(block2, genesmarker_genes) # 构建空间邻域网络 st.spatial.neighbors(block1) st.spatial.neighbors(block2)在实际项目中我发现肿瘤样本的边缘区通常表现出更强的免疫细胞浸润信号这种模式在不同患者间往往具有保守性。通过stlearn的多样本整合我们能够系统性地验证这类发现。