Skip to content

Commit

Permalink
Spateo-空间转录组的瑞士军刀-教程3:重构3D组织——切片对齐:基础使用
Browse files Browse the repository at this point in the history
  • Loading branch information
ixxmu committed Dec 12, 2024
1 parent ca05ea4 commit 7dbcaad
Showing 1 changed file with 15 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
title: "Spateo-空间转录组的瑞士军刀-教程3:重构3D组织——切片对齐:基础使用"
date: 2024-12-12T23:38:37Z
draft: ["false"]
tags: [
"fetched",
"生信钱同学"
]
categories: ["Acdemic"]
---
Spateo-空间转录组的瑞士军刀-教程3:重构3D组织——切片对齐:基础使用 by 生信钱同学
------
<div><p><strong>之前关于Spateo的介绍已经分享两期了</strong></p><p><a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzkwMzY2NjkwNg==&amp;mid=2247490276&amp;idx=1&amp;sn=c8a76e544ab305f23b85840a84aead73&amp;scene=21#wechat_redirect" textvalue="Spateo-空间转录组的瑞士军刀-教程1:细胞分割" linktype="text" imgurl="" imgdata="null" data-itemshowtype="0" tab="innerlink" data-linktype="2">Spateo-空间转录组的瑞士军刀-教程1:细胞分割</a></p><p><a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzkwMzY2NjkwNg==&amp;mid=2247490321&amp;idx=1&amp;sn=0986ab4f3cfba40fb9d1ec7c65e7dc59&amp;scene=21#wechat_redirect" textvalue="Spateo-空间转录组分析流程2:空间可变基因" linktype="text" imgurl="" imgdata="null" data-itemshowtype="0" tab="innerlink" data-linktype="2">Spateo-空间转录组分析流程2:空间可变基因</a><br></p><p>空间转录组通过对组织切片进行 mRNA 的原位标记,使研究人员能够在二维水平上解析基因的位置特征及其生物学意义。然而,组织通常是三维结构,由多个细胞层堆叠形成。通过对样本进行连续切片采样,并对切片数据进行对齐,空间转录组技术能够将这些数据堆叠重构为组织的三维结构,从而在真正的空间维度上深入理解基因的位置特征及其功能意义。</p><p><span>准确对齐空间转录组切片,从而<strong>重构三维结构</strong>,为后续的三维甚至四维分析奠定了基础。Spateo 开发了能够进行非刚性和部分对齐的数学模型。在 GPU 加速、随机变分推断(SVI)、引导变量和稀疏计算的帮助下,Spateo 实现了非常高的效率和可扩展性。在这里,我们介绍下Spateo 如何执行基本的切片对齐,并学习如何在 Spateo 中利用非刚性和部分对齐。</span></p><p><span><strong><span>Spateo 2D 切片对齐的基本使用方法</span></strong></span></p><p>简要介绍 Spateo 对 2D 切片对齐的基本使用方法。这一步需要两张连续的空间转录组切片,每张切片包含基因表达数据和空间坐标。在切片、文库准备和测序之后,细胞/spot在各切片之间的相对坐标通常会丢失。我们的目标是将这两个样本进行对齐,使得它们之间对应的<span>细胞/spot</span>具有相似的表达数据,同时保留样本中spot的空间分布。</p><section><ul><li><li><li><li><li><li><li><li><li><li><li><li><li><li><li><li><li><li><li></ul><pre data-lang="python"><code><span><span>import</span> os</span></code><code><span>os.environ[<span>'CUDA_VISIBLE_DEVICES'</span>] = <span>'0'</span></span></code><code><span><br></span></code><code><span><span>import</span> torch</span></code><code><span>device = <span>'cuda'</span> <span>if</span> torch.cuda.is_available() <span>else</span> <span>'cpu'</span></span></code><code><span>print(<span>"Running this notebook on: "</span>, device)</span></code><code><span><br></span></code><code><span><span>import</span> spateo <span>as</span> st</span></code><code><span>print(<span>"Last run with spateo version:"</span>, st.__version__)</span></code><code><span><br></span></code><code><span><span># Other imports</span></span></code><code><span><span>import</span> warnings</span></code><code><span>warnings.filterwarnings(<span>'ignore'</span>)</span></code><code><span><span>import</span> matplotlib.pyplot <span>as</span> plt</span></code><code><span><span>import</span> scanpy <span>as</span> sc</span></code><code><span><span>import</span> anndata <span>as</span> ad</span></code><code><span><br></span></code><code><span>%config InlineBackend.print_figure_kwargs={<span>'facecolor'</span> : <span>"w"</span>}</span></code><code><span>%config InlineBackend.figure_format=<span>'retina'</span></span></code></pre></section><p>教程中,使用来自小鼠胚胎 E9.5 发育阶段的数据,这些数据是通过 Stereo-Seq 技术获得的。具体来说,我们将使用切片 #32 和 #33 作为示例数据。这些切片分别包含 17,425 个和 19,939 个细胞。</p><p><strong>下载数据</strong></p><section><ul><li><li></ul><pre data-lang="nginx"><code><span><span>wget</span> https://drive.google.com/file/d/16gh_vApgzlvrplzbxYe-eODjZhvdNM4Z/view?usp=drive_link</span></code><code><span>wget https://drive.google.com/file/d/1n49YCLeqjTlYyHHBzJKmIisbIau8N9Fp/view?usp=drive_link</span></code></pre></section><p>加载数据</p><section><ul><li><li><li><li><li></ul><pre data-lang="makefile"><code><span><span># Load the slices</span></span></code><code><span>slice1 = st.read('./data/basic_usage_demo_1.h5ad')</span></code><code><span>slice2 = st.read('./data/basic_usage_demo_2.h5ad')</span></code><code><span><br></span></code><code><span>slice1, slice2</span></code></pre></section><p>(可选且推荐)数据预处理<br>在进行下一步之前,建议进行一些基本的质量控制、归一化和特征选择。这些预处理步骤可以增强下游应用程序的稳定性和性能,包括 Spateo 包中的 3D 对齐。参考 Scanpy 中针对 scRNA-seq 数据的标准预处理工作流程,并分别处理这两张切片。<strong><span></span></strong></p><section><ul><li><li><li><li><li><li><li><li><li><li><li><li><li><li><li><li><li><li><li><li><li><li><li></ul><pre data-lang="bash"><code><span><span># preprocess slice1</span></span></code><code><span>sc.pp.filter_cells(slice1, min_genes=10) <span># we use min_genes=10 as 100 is too large for ST data</span></span></code><code><span>sc.pp.filter_genes(slice1, min_cells=3)</span></code><code><span><span># Saving count data</span></span></code><code><span>slice1.layers[<span>"counts"</span>] = slice1.X.copy()</span></code><code><span><span># Normalizing to median total counts</span></span></code><code><span>sc.pp.normalize_total(slice1)</span></code><code><span><span># Logarithmize the data</span></span></code><code><span>sc.pp.log1p(slice1)</span></code><code><span><span># annotates highly variable genes</span></span></code><code><span>sc.pp.highly_variable_genes(slice1, n_top_genes=2000)</span></code><code><span><br></span></code><code><span><span># preprocess slice1</span></span></code><code><span>sc.pp.filter_cells(slice2, min_genes=10)</span></code><code><span>sc.pp.filter_genes(slice2, min_cells=3)</span></code><code><span><span># Saving count data</span></span></code><code><span>slice2.layers[<span>"counts"</span>] = slice2.X.copy()</span></code><code><span><span># Normalizing to median total counts</span></span></code><code><span>sc.pp.normalize_total(slice2)</span></code><code><span><span># Logarithmize the data</span></span></code><code><span>sc.pp.log1p(slice2)</span></code><code><span><span># annotates highly variable genes</span></span></code><code><span>sc.pp.highly_variable_genes(slice2, n_top_genes=2000)</span></code></pre></section><p>在对齐前可视化切片<br>使用 Spateo 的绘图功能可视化这两张切片的空间分布。这两张切片没有对齐,这为后续的 3D 分析带来了挑战。</p><section><ul><li><li><li><li><li><li><li><li><li><li><li><li></ul><pre data-lang="php"><code><span>spatial_key = <span>'spatial'</span></span></code><code><span>cluster_key = <span>'cellbin_SpatialDomain'</span></span></code><code><span><br></span></code><code><span>st.pl.slices_2d(</span></code><code><span> slices = [slice1, slice2],</span></code><code><span> label_key = cluster_key,</span></code><code><span> spatial_key = spatial_key,</span></code><code><span> height=<span>4</span>,</span></code><code><span> center_coordinate=<span>True</span>,</span></code><code><span> show_legend=<span>True</span>,</span></code><code><span> legend_kwargs={<span>'loc'</span>: <span>'upper center'</span>, <span>'bbox_to_anchor'</span>: (<span>0.5</span>, <span>0</span>) ,<span>'ncol'</span>: <span>5</span>, <span>'borderaxespad'</span>: <span>-4</span>, <span>'frameon'</span>: <span>False</span>},</span></code><code><span>)</span></code></pre></section><p><img data-imgfileid="100006424" data-ratio="0.7074074074074074" data-src="https://mmbiz.qpic.cn/mmbiz_png/7At0Eia3NQFuZvau9Ksyt9IcibBEoiame8Do2yc5sj90WaEjrsnFJDMlMPTEZj2VodUS9sRqEw4QWasRbVnxn5d0g/640?wx_fmt=png&amp;from=appmsg" data-type="png" data-w="1080" src="https://mmbiz.qpic.cn/mmbiz_png/7At0Eia3NQFuZvau9Ksyt9IcibBEoiame8Do2yc5sj90WaEjrsnFJDMlMPTEZj2VodUS9sRqEw4QWasRbVnxn5d0g/640?wx_fmt=png&amp;from=appmsg"></p><p>(可选且推荐)在两张切片之间进行 PCA<br>主成分分析(PCA)是一种经典的线性降维算法,可以从数据中提取主要特征,同时去噪。与直接使用原始的高维基因表达矩阵相比,利用 PCA 特征生成映射概率通常能获得更好的性能。此外,使用较少维度的特征可以显著减少计算相似度矩阵时的计算开销。</p><p>需要注意的是,PCA 应该在两张切片之间进行,而不是分别在每张切片上独立执行,以确保特征表示在 PCA 空间中的对齐。因此,在接下来的步骤中,我们首先将两张切片合并为一个数据集,然后使用 Scanpy 提供的函数执行 PCA。最后,我们使用“batch”键提取相应的 PCA 特征。</p><section><ul><li><li><li></ul><pre data-lang="javascript"><code><span>st.align.group_pca([slice1,slice2], pca_key=<span>'X_pca'</span>)</span></code><code><span><br></span></code><code><span>slice1, slice2</span></code></pre></section><p><span></span><span>Spateo 对齐:</span><span>Spateo 对齐操作简单易用、可扩展且高效。</span><span>通过简单调用 </span><span>st.align.morpho_align</span><span>,您可以在几秒钟内获得对齐后的切片和对应的映射矩阵(如果支持 CUDA,速度更快)。</span><span>在本例中,我们将使用之前提取的高变基因及其 PCA 表示来进行对齐。</span><span>以下是对该函数输入参数的解释:</span></p><ul><li><p>models:需要对齐的切片,使用的是高变基因。</p></li><li><p>rep_layer:要使用的表示名称。</p></li><li><p>rep_field:在 AnnData 中存储表示的字段。</p></li><li><p>dissimilarity:计算相似度的方法。</p></li><li><p>spatial_key:AnnData 中 .obsm 对应空间坐标的键。</p></li><li><p>key_added:对齐后的空间坐标将添加到 .obsm 中的键。</p></li><li><p>device:用于计算的设备,可以是 "cpu" 或 "cuda"。</p></li></ul><section><ul><li><li><li><li><li><li><li><li><li><li><li><li><li><li><li></ul><pre data-lang="properties"><code><span><span>key_added</span> = <span>'align_spatial'</span></span></code><code><span><span># spateo return aligned slices as well as the mapping matrix</span></span></code><code><span><span>aligned_slices,</span> <span>pis = st.align.morpho_align(</span></span></code><code><span> <span>models</span>=<span>[slice1, slice2],</span></span></code><code><span><span> ## Uncomment this if use highly variable genes</span></span></code><code><span><span> # models=[slice1[:, slice1.var.highly_variable], slice2[:, slice2.var.highly_variable]],</span></span></code><code><span><span> ## Uncomment the following if use pca embeddings</span></span></code><code><span><span> # rep_layer='X_pca',</span></span></code><code><span><span> # rep_field='obsm',</span></span></code><code><span><span> # dissimilarity='cos',</span></span></code><code><span> <span>verbose</span>=<span>False,</span></span></code><code><span> <span>spatial_key</span>=<span>spatial_key,</span></span></code><code><span> <span>key_added</span>=<span>key_added,</span></span></code><code><span> <span>device</span>=<span>device,</span></span></code><code><span><span>)</span></span></code></pre></section><p>可视化对齐完成后,我们可以通过可视化两张切片的叠加结果来检查对齐效果。这可以通过调用 st.pl.overlay_slices_2d 来轻松实现。在接下来的步骤中,我们将可视化刚性对齐和非刚性对齐的结果。刚性对齐解决了旋转和平移的问题,而非刚性对齐则更好地拟合局部结构。</p><section><ul><li></ul><pre data-lang="javascript"><code><span>st.pl.overlay_slices_2d(slices = aligned_slices, spatial_key = key_added, height=<span>5</span>, overlay_type=<span>'backward'</span>)</span></code></pre></section><p><img data-imgfileid="100006425" data-ratio="1.0481927710843373" data-src="https://mmbiz.qpic.cn/mmbiz_png/7At0Eia3NQFuZvau9Ksyt9IcibBEoiame8DkpeVC6uzibzfGdMNlaDhH9UmgFiaYhGWf8E9jbQUV3lqnPjPEJO5fU2g/640?wx_fmt=png&amp;from=appmsg" data-type="png" data-w="830" src="https://mmbiz.qpic.cn/mmbiz_png/7At0Eia3NQFuZvau9Ksyt9IcibBEoiame8DkpeVC6uzibzfGdMNlaDhH9UmgFiaYhGWf8E9jbQUV3lqnPjPEJO5fU2g/640?wx_fmt=png&amp;from=appmsg"></p><section><ul><li></ul><pre data-lang="javascript"><code><span>st.pl.overlay_slices_2d(slices = aligned_slices, spatial_key = key_added+<span>'_nonrigid'</span>, height=<span>5</span>, overlay_type=<span>'backward'</span>)</span></code></pre></section><p><img data-imgfileid="100006426" data-ratio="1.0469314079422383" data-src="https://mmbiz.qpic.cn/mmbiz_png/7At0Eia3NQFuZvau9Ksyt9IcibBEoiame8D7agZ096SNV0BRYyPkpmYS1BdvQjuSfDtIKzM1N0HBdYN81icnRQsyMw/640?wx_fmt=png&amp;from=appmsg" data-type="png" data-w="831" src="https://mmbiz.qpic.cn/mmbiz_png/7At0Eia3NQFuZvau9Ksyt9IcibBEoiame8D7agZ096SNV0BRYyPkpmYS1BdvQjuSfDtIKzM1N0HBdYN81icnRQsyMw/640?wx_fmt=png&amp;from=appmsg"><span>Spateo 对齐功能</span><span>简单易用,又精确高效。</span><span>Spateo 提供了许多其他强大的功能,包括 2D 切片对齐、3D 空间转录组重构、3D 感知数字化/细胞间相互作用以及 4D 时空映射。</span></p><p><span><strong><span>这次生信的大纲内容进行全面的调整,想了解生信的,跟班的,可以看下面</span><strong>👇这个文章</strong></strong></span></p><p><a target="_blank" href="http://mp.weixin.qq.com/s?__biz=MzkwMzY2NjkwNg==&amp;mid=2247489898&amp;idx=1&amp;sn=36e03c6c81e651b9c81eaf558e07aa24&amp;chksm=c09394dff7e41dc94b801cad43f802037589975b4c01de6659d39027f3efa91c5989d88f5cca&amp;scene=21#wechat_redirect" textvalue="这次可不是只学单细胞,基本上从基础到多组学、空间、机器学习一条龙全打通了" linktype="text" imgurl="" imgdata="null" data-itemshowtype="11" tab="innerlink" data-linktype="2" hasload="1"><span><strong>这次可不是只学单细胞,基本上从基础到多组学、空间、机器学习一条龙全打通了</strong></span></a></p><p><span><strong><span>单细胞数据分析需求的可以看<strong><strong>👇这个文章</strong></strong></span></strong></span></p><p><span><strong><span><strong><strong><a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzkwMzY2NjkwNg==&amp;mid=2247490275&amp;idx=1&amp;sn=200ccc0a415860f9d73b9068657096ff&amp;scene=21#wechat_redirect" textvalue="没有服务器,单细胞数据搞不定?我们目前做好了这些pipeline,可以帮你做" linktype="text" imgurl="" imgdata="null" data-itemshowtype="0" tab="innerlink" data-linktype="2" hasload="1">没有服务器,单细胞数据搞不定?我们目前做好了这些pipeline,可以帮你做</a>(近期又添加了21 年发表在了 Cell上面的单细胞转录组分析代谢的分析——compass<a target="_blank" href="https://mp.weixin.qq.com/s?__biz=MzkwMzY2NjkwNg==&amp;mid=2247484892&amp;idx=1&amp;sn=16ad7a7bc2f1000c8fd71c4ad84a4841&amp;scene=21#wechat_redirect" textvalue="从前天的Nature中,我学到了21 年 Cell开发的单细胞代谢状态的计算——一起学代码" linktype="text" imgurl="" imgdata="null" data-itemshowtype="0" tab="innerlink" data-linktype="2">从前天的Nature中,我学到了21 年 Cell开发的单细胞代谢状态的计算——一起学代码</a>)</strong></strong></span></strong></span></p><p><mp-style-type data-value="3"></mp-style-type></p></div>
<hr>
<a href="https://mp.weixin.qq.com/s/06dfWM37MR7BH2WY4ReFsA",target="_blank" rel="noopener noreferrer">原文链接</a>

0 comments on commit 7dbcaad

Please sign in to comment.