首页    数据分析    一个工具搞定空间转录组全流程分析!

一个工具搞定空间转录组全流程分析!

创建时间:2024-06-19 15:47

 空转数据分析工具五花八门,层出不穷。本文将通过介绍Squidpy数据分析的python库,以及它用到的Anndata和ImageContainer对象,来展示Squidpy如何高效地管理着大规模的基因表达数据,如何巧妙地整合组织切片图像,使得空间信息与基因表达的关联分析变得触手可及!

 

1. 认识Squidpy:

·       Squidpy工具的目的:实现对空转图像数据存储,处理和分析。主要通过Spatial graph和ImageContainer的管理来实现。

·       Squidpy工具特定的功能:Squidpy能够处理2D甚至3D数据的形态学特征整合挖掘,此外,其还集成了Scikit-image、Napari、Dask(Fig.1)。Squidpy可谓是目前空转的集大成者,其能够完成空间高变基因、配-受体分析(基于CellphoneDB和Omnipath)、细胞共现分析、基于分子/空间位置/形态学的聚类分析等,可以说能够一站式的完成空间多组学数据的分析(Fig.1)。

Fig.1 Squidpy软件框架和数据分析流程

Fig.1 Squidpy软件框架和数据分析流程

 

2. 认识Anndata object:

不熟悉Annadata object的小伙伴可以在这里停留一下,了解一下Anndata框架(Fig.2)。因为数据分析第一步是利用squidpy导入空转示例数据文件,得到Anndata object。

Fig.2 Anndata object框架

Fig.2 Anndata object框架

其中重要部分的含义如下:

·       Anndata.obs:Dataframe,对细胞的注释,单细胞数据集一般是在无监督(没有标签的背景下分析的),为此我们需要对细胞进行注释,比如通过聚类,比如通过其他的方式(多模态表面蛋白标注)。样本的临床信息也可以保存在里面。

·       Anndata.var: Dataframe,对基因的注释,我们同时某些基因也非常关注,比如某些基因是否是marker基因,某些基因是否是线粒体基因等等,这些对基因的注释都存储在Anndata.var中。

·       Anndata.obsm:类字典的AxisArrays,对细胞可视化的注释。通过这些降维手段后每个细胞都在embedding(降低后的维度)有个坐标信息,这个Anndata.obsm则是储存这个obs的坐标信息的。

现在我们可以正式开始导入数据,开始我们的代码分析啦~

=========================================================================

导入需要的包
import squidpy as sq
import scanpy as sc
import matplotlib.pyplot as plt

空转示例数据 TOF data
adata = sq.datasets.mibitof()
adata 
样本含三张图,共有3309个细胞, 36个基因

=========================================================================

·       output:

img3

=========================================================================

adata.var_names # 36个基因名字

=========================================================================

·       output:

img4

=========================================================================

adata.obs.library_id # spot location

=========================================================================

·       output:

img5

=========================================================================

聚类结果和细胞类型可视化
fig, ax = plt.subplots(ncols=3, nrows=1, figsize=(14, 3))
i = 0
for library_id in adata.uns["spatial"].keys():
    sc.pl.spatial(
        adata[adata.obs["library_id"] == library_id], color="Cluster",
        library_id=library_id, title=library_id, frameon=False, ax=ax[i], show=False
    )
    i += 1

=========================================================================

·       output:

img6

3、认识ImageContainer对象:

接下来的代码分析就要用到ImageContainer了。ImageContainer 是Squidpy中引入的用于存储和处理图像数据的一个对象。在空间转录组学中,图像数据通常与基因表达数据相结合,以提供关于细胞在组织中的空间分布的直观信息。

ImageContainer的功能如下:

1.       多图像存储:存储多个图像,例如不同的组织切片或不同染色的图像。

2.       与基因表达数据关联:与 AnnData 对象关联,将基因表达模式与相应的组织图像相匹配。

3.       图像处理:提供了基本的图像处理功能,如图像的裁剪、缩放、旋转等。

4.       空间对齐:支持对图像进行空间对齐,确保图像数据与 AnnData 中的基因表达数据在空间上是一致的。

5.       可视化:用于生成图像的可视化,例如,将基因表达数据叠加到组织图像上,以展示特定基因的空间表达模式。

6.       数据整合:整合来自不同来源的图像数据,例如,将来自不同实验或不同技术(如免疫荧光、H&E染色等)的图像整合到同一个分析流程中。

 

好了,我们继续代码分析示例:

 

3.1 Build Image object based on ImageContainer

=========================================================================

基于ImageContainer构建Image object
imgs = []
for library_id in adata.uns["spatial"].keys():
    print(len(adata.uns["spatial"][library_id]["images"]["hires"][0][0]))
    img = sq.im.ImageContainer(adata.uns["spatial"][library_id]["images"]["hires"], library_id=library_id, layer='image')
    print(library_id)
    #print(len(adata.uns["spatial"][library_id]["images"]["segmentation"][0][0]))
    img.add_img(adata.uns["spatial"][library_id]["images"]["segmentation"], library_id=library_id, layer="segmentation")
    img["segmentation"].attrs["segmentation"] = True
    imgs.append(img)
img = sq.im.ImageContainer.concat(imgs)
img.show(layer='image')

# 145_CD45 - a immune cell marker (cyan青色).
# 174_CK - a tumor marker (magenta品红色).
# 113_vimentin - a mesenchymal cell marker (yellow).

=========================================================================

·       output:

img7

3.2 Subset images

=========================================================================

提取裁剪图像
## 以起始点为中心,crop一个半径为100的正方形
img.crop_center(y=.15, x=.65, radius=100).show(layer='image')

=========================================================================

·       output:

img8

3.3 Subset anndata based on cropped-images

=========================================================================

提取裁剪图像的基因表达数据
subset_img= img.crop_corner(y=0.052, x=.552, size=200)
adata_crop = subset_img.subset(adata)

library_id = 'point8'
sc.pl.spatial(
        adata_crop[adata_crop.obs["library_id"] == 'point8'], color=["CD8""PD1"],
        library_id=library_id, frameon=False, cmap='Spectral_r', size=1.3
    )

=========================================================================

·       output:

img9

今天的分享就到这里啦,还有很多实用的空转工具会在后面一一介绍,让我们一起多多尝试不同的方法,从不同的角度去挖掘空转大数据吧。

 

参考文献

Palla, G., Spitzer, H., Klein, M. et al. Squidpy: a scalable framework for spatial omics analysis. Nat Methods 19, 171–178 (2022). https://doi.org/10.1038/s41592-021-01358-2. 

 

 

请关注微信公众号,更多精彩内容实时更新中

                                                               


本网站发布所有原创内容,版权归属尖端生物及相关版权方,内容仅供学术交流,如有侵权请联系删除。未经授权的转载是侵权行为,版权方保留追究法律责任的权利。投稿,转载或版权问题,请联系:submit@advanced-biotech.cn;商务合作请联系:cc@advanced-biotech.cn

 

 

 

热点资讯