一个工具搞定空间转录组全流程分析!
空转数据分析工具五花八门,层出不穷。本文将通过介绍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软件框架和数据分析流程
2. 认识Anndata object:
不熟悉Annadata object的小伙伴可以在这里停留一下,了解一下Anndata框架(Fig.2)。因为数据分析第一步是利用squidpy导入空转示例数据文件,得到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:
=========================================================================
adata.var_names # 36个基因名字
=========================================================================
· output:
=========================================================================
adata.obs.library_id # spot location
=========================================================================
· output:
=========================================================================
# 聚类结果和细胞类型可视化
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:
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:
3.2 Subset images
=========================================================================
# 提取裁剪图像
## 以起始点为中心,crop一个半径为100的正方形
img.crop_center(y=.15, x=.65, radius=100).show(layer='image')
=========================================================================
· output:
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:
今天的分享就到这里啦,还有很多实用的空转工具会在后面一一介绍,让我们一起多多尝试不同的方法,从不同的角度去挖掘空转大数据吧。
参考文献
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
- 2024-08-15
- 2024-08-13
- 2024-08-05
- 2024-07-24
- 2024-07-23
- 2024-07-22
- 2024-07-18
- 2024-07-10