本文将基于 Squidpy 官方教程(Squidpy Xenium Tutorial),梳理一个典型的空间转录组学数据分析指南。Squidpy 是一个功能强大的 Python 库,专为空间组学数据分析设计,支持从数据读取、预处理到高级分析和交互式可视化的完整流程。以下内容将详细介绍 Squidpy 的功能及其在空转数据分析中的具体应用步骤。
Squidpy 提供了丰富的工具集,能够处理多种类型的空间组学数据,并支持从空间邻近计算到图像特征提取的多种分析需求。
空间邻近分析是空转研究的基础,用于构建细胞间的邻居图(neighbor graph),以揭示空间组织结构和细胞间相互作用。但是空间邻近的计算时常要考虑数据来源,Squidpy集成了多种软件和方法,支持多种数据来源:
Squidpy 根据数据特性自动调整邻居图的构建方式,确保分析的灵活性和准确性。
空间组学数据通常附带高清显微图像,这些图像包含形态学和生物学特征信息。Squidpy 提供了以下功能来管理和分析这些数据:
Squidpy 几乎覆盖了空间多组学分析的全部需求,包括:
以下是使用 Squidpy 分析空间转录组数据的完整流程,以人类肺癌 Xenium 数据集为例进行说明。
Squidpy 可通过以下方式安装:
● 使用 pip:
pip install squidpy -i https://mirrors.aliyun.com/pypi/simple
● 使用 conda:
conda install -c conda-forge squidpy
建议在虚拟环境中安装以避免依赖冲突。
导入必要的包
首先导入分析所需的 Python 库:
import spatialdata as sd
from spatialdata_io import xenium
import matplotlib.pyplot as plt
import seaborn as sns
import scanpy as sc
import squidpy as sq
加载 Xenium 数据集
我们使用官网提供的人类肺癌 Xenium 数据集,并将其转换为 Zarr 格式以便高效存储和读取:
# 指定数据集路径和 Zarr 文件存储位置
xenium_path = "./Xenium/"
zarr_path = "./Xenium.zarr"
# 使用 Xenium Reader 加载数据到 SpatialData 对象
sdata = xenium(xenium_path)
# 转换为 Zarr 格式
sdata.write(zarr_path)
# 读取 Zarr 文件
sdata = sd.read_zarr(zarr_path)
print(sdata)
细胞坐标设置
Squidpy 默认在 .obsm["spatial"]
中查找细胞的空间坐标。使用 spatialdata-io
的 Xenium 读取器时,坐标会自动设置。对于其他复杂数据,可能需要手动指定:
adata = sdata.tables["table"]
adata
adata.obs
adata.obsm["spatial"]
在分析之前,需对数据进行质量控制和标准化处理。Squidpy 与 Scanpy 无缝兼容,可利用 Scanpy 的工具完成这些步骤。
使用scanpy.pp.calculate_qc_metrics计算质量控制指标:
sc.pp.calculate_qc_metrics(adata, percent_top=(10, 20, 50, 150), inplace=True)
#控制探针和控制代码词的百分比可以从 adata.obs 中计算得出。
cprobes = (
adata.obs["control_probe_counts"].sum() / adata.obs["total_counts"].sum() * 100
)
cwords = (
adata.obs["control_codeword_counts"].sum() / adata.obs["total_counts"].sum() * 100
)
print(f"Negative DNA probe count % : {cprobes}")
print(f"Negative decoding count % : {cwords}")
接下来,我们绘制每个细胞的总转录本、每个细胞的独特转录本、分割细胞的面积以及细胞核面积与其细胞的比率。
fig, axs = plt.subplots(1, 4, figsize=(15, 4))
axs[0].set_title("Total transcripts per cell")
sns.histplot(
adata.obs["total_counts"],
kde=False,
ax=axs[0],
)
axs[1].set_title("Unique transcripts per cell")
sns.histplot(
adata.obs["n_genes_by_counts"],
kde=False,
ax=axs[1],
)
axs[2].set_title("Area of segmented cells")
sns.histplot(
adata.obs["cell_area"],
kde=False,
ax=axs[2],
)
axs[3].set_title("Nucleus ratio")
sns.histplot(
adata.obs["nucleus_area"] / adata.obs["cell_area"],
kde=False,
ax=axs[3],
)
# 过滤低质量细胞
sc.pp.filter_cells(adata, min_genes=200)
sc.pp.filter_genes(adata, min_cells=3)
scanpy.pp.normalize_total
进行标准化,sc.pp.log1p
函数取对数,# 标准化数据
sc.pp.normalize_total(adata, target_sum=1e4)
sc.pp.log1p(adata)
# 识别高变异基因
sc.pp.highly_variable_genes(adata, min_mean=0.0125, max_mean=3, min_disp=0.5)
print(f"高变异基因数量: {sum(adata.var.highly_variable)}")
# 可视化高变异基因
sc.pl.highly_variable_genes(adata)
# 仅保留高变异基因进行后续分析
adata_hvg = adata[:, adata.var.highly_variable].copy()
sc.pp.pca
做主成分分析,sc.pp.neighbors
计算邻域图,sc.tl.umap
降维,sc.tl.leiden
聚类。# 主成分分析
sc.pp.pca(adata_hvg, svd_solver='arpack')
sc.pl.pca_variance_ratio(adata_hvg, n_pcs=50)
# UMAP降维
sc.pp.neighbors(adata_hvg, n_neighbors=10, n_pcs=30)
sc.tl.umap(adata_hvg)
# Leiden聚类
sc.tl.leiden(adata_hvg, resolution=0.5)
# 将聚类结果转移到原始数据
adata.obs['leiden'] = adata_hvg.obs['leiden']
# 可视化聚类结果
sc.pl.umap(adata_hvg, color="leiden")
Squidpy的核心优势在于空间分析能力:
# 计算空间邻居图
sq.gr.spatial_neighbors(adata, coord_type="generic", delaunay=True)
# 计算空间连通性
sq.gr.nhood_enrichment(adata, cluster_key="leiden")
# 可视化空间富集情况
sq.pl.nhood_enrichment(adata, cluster_key="leiden")
#
sdata.tables["subsample"] = sc.pp.subsample(adata, fraction=0.5, copy=True)
adata_subsample = sdata.tables["subsample"]
# 可视化空间中的聚类分布
sq.pl.spatial_scatter(adata_subsample, color="leiden", shape=None, size=2, ax=ax[1])
通过计算Moran's I 的得分表示全局空间自相关统计量。Moran's I 是一种常用的空间自相关统计指标,用于评估某种特征(如基因表达)的空间分布模式是聚集(clustered)、分散(dispersed)还是随机(random)。它是描述空间依赖性的统计量。
# 计算Moran's I空间自相关指数
sq.gr.spatial_autocorr(
adata,
mode="moran",
genes=adata_hvg.var_names[:15], # 选择前15个高变异基因
n_perms=100,
n_jobs=1,
)
# 可视化空间自相关结果
sq.pl.spatial_scatter(
adata_subsample,
library_id="spatial",
color=[
"AREG",
"MET",
],
shape=None,
size=2,
img=False,
)
可以使用 squidpy.pl.spatial_scatter 可视化其中的一些基因。我们还可以通过设置 mode='geary' 来计算一个与之密切相关的自相关统计量,即 Geary's C。
此外,可以使用napari-spatialdata通过交互式GUI可视化Xenium数据:
from napari_spatialdata import Interactive
Interactive(sdata)
图中显示了所有细胞中AREG的表达:
Squidpy 是一个功能全面的空间转录组学分析工具,支持从数据读取到高级分析的完整流程。其与 Scanpy 和 Napari 的兼容性极大提升了分析效率和可视化体验。通过上述步骤,研究者可以系统地探索空转数据,揭示细胞间相互作用和空间组织的生物学意义。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有