前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Squidpy空转分析教程:基于Xenium数据的空间转录组分析

Squidpy空转分析教程:基于Xenium数据的空间转录组分析

作者头像
天意生信云
发布于 2025-05-08 06:10:23
发布于 2025-05-08 06:10:23
22700
代码可运行
举报
运行总次数:0
代码可运行

本文将基于 Squidpy 官方教程(Squidpy Xenium Tutorial),梳理一个典型的空间转录组学数据分析指南。Squidpy 是一个功能强大的 Python 库,专为空间组学数据分析设计,支持从数据读取、预处理到高级分析和交互式可视化的完整流程。以下内容将详细介绍 Squidpy 的功能及其在空转数据分析中的具体应用步骤。

Squidpy 的功能

Squidpy 提供了丰富的工具集,能够处理多种类型的空间组学数据,并支持从空间邻近计算到图像特征提取的多种分析需求。

空间邻近计算

空间邻近分析是空转研究的基础,用于构建细胞间的邻居图(neighbor graph),以揭示空间组织结构和细胞间相互作用。但是空间邻近的计算时常要考虑数据来源,Squidpy集成了多种软件和方法,支持多种数据来源:

  • Spot 类型:如 ST、Visium、DBit-seq 等基于斑点的数据。
  • Image-base 类型:如 seq-Fish、MERFISH、CyCif、4i 等基于图像的高分辨率数据。

Squidpy 根据数据特性自动调整邻居图的构建方式,确保分析的灵活性和准确性。

图像数据管理与交互式可视化

空间组学数据通常附带高清显微图像,这些图像包含形态学和生物学特征信息。Squidpy 提供了以下功能来管理和分析这些数据:

  • ImageContainer 对象:基于 xArray 和 Dask 构建,用于高效管理图像数据,支持读取、滑窗和多线程处理。ImageContainer 包含空间坐标和分子图谱信息,为图像与分子数据的交互分析奠定基础。
  • Napari 集成:通过 Napari 的 API,Squidpy 实现在 Jupyter Notebook 中的交互式可视化。用户可以对图像和分子信息进行裁剪、区域选择等操作。
  • 特征提取:支持基于机器学习的形态学特征和纹理特征提取,进一步挖掘图像数据中的生物学意义。

全面的分析功能

Squidpy 几乎覆盖了空间多组学分析的全部需求,包括:

  • 空间高变基因分析:识别在空间上显著变化的基因。
  • 配-受体分析:研究细胞间的配体-受体相互作用。
  • 细胞共现分析:分析不同细胞类型在空间上的共存模式。
  • 聚类分析:基于分子表达、空间位置和形态学特征进行细胞聚类。

使用 Squidpy 分析空转数据的流程

以下是使用 Squidpy 分析空间转录组数据的完整流程,以人类肺癌 Xenium 数据集为例进行说明。

安装 Squidpy

Squidpy 可通过以下方式安装:

● 使用 pip:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install squidpy -i https://mirrors.aliyun.com/pypi/simple

● 使用 conda:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda install -c conda-forge squidpy

建议在虚拟环境中安装以避免依赖冲突。

数据读取

导入必要的包

首先导入分析所需的 Python 库:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 格式以便高效存储和读取:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 指定数据集路径和 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 读取器时,坐标会自动设置。对于其他复杂数据,可能需要手动指定:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
adata = sdata.tables["table"]
adata

adata.obs
adata.obsm["spatial"]

数据预处理

在分析之前,需对数据进行质量控制和标准化处理。Squidpy 与 Scanpy 无缝兼容,可利用 Scanpy 的工具完成这些步骤。

使用scanpy.pp.calculate_qc_metrics计算质量控制指标:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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}")

接下来,我们绘制每个细胞的总转录本、每个细胞的独特转录本、分割细胞的面积以及细胞核面积与其细胞的比率。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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],
)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 过滤低质量细胞
sc.pp.filter_cells(adata, min_genes=200)
sc.pp.filter_genes(adata, min_cells=3)

标准化与数据变换

  • 使用scanpy.pp.normalize_total进行标准化,
  • 使用sc.pp.log1p函数取对数,
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 标准化数据
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聚类。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 主成分分析
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的核心优势在于空间分析能力:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 计算空间邻居图
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)。它是描述空间依赖性的统计量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 计算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数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from napari_spatialdata import Interactive

Interactive(sdata)

图中显示了所有细胞中AREG的表达:

Squidpy 是一个功能全面的空间转录组学分析工具,支持从数据读取到高级分析的完整流程。其与 Scanpy 和 Napari 的兼容性极大提升了分析效率和可视化体验通过上述步骤,研究者可以系统地探索空转数据,揭示细胞间相互作用和空间组织的生物学意义。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BioOmics 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Squidpy 的功能
    • 空间邻近计算
    • 图像数据管理与交互式可视化
    • 全面的分析功能
  • 使用 Squidpy 分析空转数据的流程
    • 安装 Squidpy
    • 数据读取
    • 数据预处理
    • 标准化与数据变换
    • 降维与聚类分析
    • 空间特征提取和可视化
    • 空间自相关分析
    • 空间数据交互式可视化
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档