大家好,今天介绍一款空间转录组整合分析的python软件——stlearn。
如果你还不会安装,可以看下之前的推文,windows系统本地安装stlearn:本地安装jupyterlab,并创建conda小环境——以空间转录组细胞互作之stlearn安装为例。如果大家感兴趣,后期再写Linux服务器安装stlearn的教程。下面从三个方面进行stlearn的空间转录组整合分析。
1. 为什么空间转录数据需要整合分析?
2. stlearn整合空间转录组样本的思路
3. stlearn整合空转数据代码实战
1.为什么空转数据需要整合分析?
提高数据分析的准确性和可靠性:空转数据通常具有较高的噪声和异质性,整合分析可以通过融合来自不同来源的数据来提高数据的准确性和可靠性。
发现新的生物学信息:空转数据整合分析可以帮助发现新的生物学信息,例如细胞类型之间的相互作用、基因表达的空间模式等。
通常10x的空转测序数据都是4张slide为一组,因此我们大概率会用到多个空转样本的整合分析。那么如何进行多个样本的空转数据的整合分析呢?
注意:这里的整合不是单细胞和空间转录组整合,而是多个空间转录组测序样本的整合
先把多个样本merge到一起之后;
然后使用harmony去除批次效应,降维聚类分群;
进而得到每个细胞(barcode)的亚群;
最后把每个细胞的亚群信息放回单个样本中。
https://stlearn.readthedocs.io/en/latest/tutorials/Integration_multiple_datasets.html
import stlearn as st
import scanpy as sc
import numpy as np
?
st.settings.set_figure_params(dpi=150) # 设置图形输出分辨率
?
?
1?#数据处理
# 连接两个样品
adata_concat = block1.concatenate(block2)
?
# 预处理
# 过滤基因:过滤表达细胞少于 3 个的基因
sc.pp.filter_genes(adata_concat, min_cells=3)
# 归一化数据
sc.pp.normalize_total(adata_concat, target_sum=1e4)
# 对数转换
sc.pp.log1p(adata_concat)
# 保存原始数据
adata_concat.raw = adata_concat.copy()
# 提取高变异基因
sc.pp.highly_variable_genes(adata_concat, min_mean=0.0125, max_mean=3, min_disp=0.5)
adata_concat = adata_concat[:, adata_concat.var.highly_variable]
# 缩放数据
sc.pp.scale(adata_concat, max_value=10)
?
# 降维:主成分分析(PCA)
sc.pp.pca(adata_concat, n_comps=30, svd_solver='arpack')
?
?
?
2 #整合分析:Harmony
# 准备元数据和 PCA 结果
meta_data = adata_concat.obs # 获取观察表(cell metadata)
data_mat = adata_concat.obsm["X_pca"] # 获取 PCA 降维后数据
?
# 导入并运行 Harmony
import harmonypy as hm
ho = hm.run_harmony(data_mat, meta_data, "batch") # 运行 Harmony,根据 "batch" 列进行批次校正
?
3 # 将结果映射回 AnnData 对象
adata_concat.obsm["X_pca"] = ho.Z_corr.T # 将校正后的数据替换原 PCA 数据
Use code with caution. Learn more
4?#聚类和可视化
# 建立 KNN 图并运行 UMAP
sc.pp.neighbors(adata_concat, n_pcs =30)
sc.tl.umap(adata_concat)
?
# Leiden 聚类
sc.tl.leiden(adata_concat, resolution=0.4)
?
# UMAP 可视化
sc.pl.umap(adata_concat, color=["batch","leiden"]) # 同时以批次和聚类结果着色
Use code with caution. Learn more
?
?
5?映射结果回原始样本
?
st.settings.set_figure_params(dpi=150)
?
# 将 Leiden 聚类结果映射回分块 A 第 1 个样品
block1.obs["leiden"] = adata_concat.obs[adata_concat.obs.batch=="0"].leiden.values # 根据 "batch" 列选择对应样品的数据
?
# 绘制聚类结果
st.pl.cluster_plot(block1,use_label="leiden")
?
# 将 Leiden 聚类结果映射回分块 A 第 2 个样品
block2.obs["leiden"] = adata_concat.obs[adata_concat.obs.batch=="1"].leiden.values
?
# 绘制聚类结果
st.pl.cluster_plot(block2,use_label="leiden")
?
# 手动合并图像并调整坐标
# 这是将两个样品放在同一个 AnnData 对象中的方法
?
# 初始化空间信息
adata_concat.uns["spatial"] = block1.uns["spatial"]
?
# 水平拼接两个样品的高分辨率图像
combined = np.hstack([block1.uns["spatial"]["V1_Breast_Cancer_Block_A_Section_1"]["images"]["hires"],
block2.uns["spatial"]["V1_Breast_Cancer_Block_A_Section_2"]["images"]["hires"]])
?
# 将拼接后的图像映射到合并的 AnnData 对象