当前位置: 首页 > news >正文

scNiche识别空间组细胞微环境

目录

环境构建与导入

数据准备

预处理

训练分群

结果可视化


在空间转录组的研究中,与单纯依靠表达量分群的单细胞转录组数据不同,我们经常要考虑细胞之间的免疫微环境进行分群,测试一下近期的一个新方法GitHub - ZJUFanLab/scNiche: a computational framework to identify and characterize cell niches from spatial omics data at single-cell resolution

环境构建与导入

我这里是依据Github建议的方法在conda环境中构建的

import scniche as sn
import scanpy as sc
import pandas as pd
from sklearn.metrics import adjusted_rand_score
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')print("Last run with scNiche version:", sn.__version__)# set seed
sn.pp.set_seed()

数据准备

这里需要的输入数据可以是带有注释标签的不同分辨率的空间组数据,转化成python读取的anndata格式,我这里读取示例数据如下

adata = sc.read('/data/work/scNiche-main/scniche/datasets/simulated_data.h5ad')
adata

这里注释标签为‘Cell_type’,空间组坐标位于obsm中的‘Spatial’

预处理

在进行正式训练前需要对我们的空间组数据进行一定的预处理

cutoff = 20#邻域细胞数量
lr = 0.01#学习率
epochs = 100#训练迭代次数
adata = sn.pp.cal_spatial_neighbors(adata=adata, celltype_key='Cell_type', mode='KNN', k_cutoff=cutoff, verbose=False)
adata = sn.pp.cal_spatial_exp(adata=adata, mode='KNN', k_cutoff=cutoff, is_pca=True, n_comps=50, verbose=False)
adata = sn.pp.prepare_data(adata=adata, verbose=False)

参数选择可以参照原文献或者Github,这里仅作测试

训练分群

训练过程中可以自定义需要的分群数量target_num,这里是根据注释分群的数量进行设定

model = sn.tr.Runner(adata=adata, device='cpu', verbose=False)#GPU可以替换成相应的设备
adata = model.fit(lr=lr, epochs=epochs)
# clustering
target_num = len(set(adata.obs['Cell_type']))
adata = sn.tr.clustering(adata=adata, target_k=target_num)

结果可视化

训练结束会自动生成一个“scNiche”的注释列和对应的坐标,29000左右的细胞数CPU使用默认参数,大约耗时4h,总体训练效率可以接受

plt.rcParams["figure.figsize"] = (3, 3)
sc.pl.embedding(adata, basis="spatial", color=['predict_Celltype', 'scNiche'], s=20, show=False)
plt.tight_layout()
plt.show()

最后简单展示我的数据分群情况,能看到明显的层次关系,但是该方法具体的生物学效应有待深入探索,可能更适宜较高分辨率下的病理学切片研究。

http://www.dtcms.com/a/201812.html

相关文章:

  • Index-AniSora模型论文速读:基于人工反馈的动漫视频生成
  • 系统思考:团队策略辅导
  • 02 if...else,switch,do..while,continue,break
  • List更简洁的编码构建
  • 基于C#的Modbus通信协议全面解析与实现指南
  • CSS 背景全解析:从基础属性到视觉魔法
  • Qt文件:XML文件
  • 使用 adb 命令截取 Android 设备的屏幕截图
  • CI/CD的演进之路
  • SpringBoot-4-Spring Boot项目配置文件和日志配置
  • RabbitMQ ⑤-顺序性保障 || 消息积压 || 幂等性
  • PyCharm2025的字体的设置
  • 【常用算法:进阶篇】13.位运算全解析:从底层原理到高效算法
  • 易路 AI 招聘:RPA+AI 颠覆传统插件模式,全流程自动化实现效率跃迁
  • 音视频之H.265/HEVC速率控制
  • 图的几种存储方法比较:二维矩阵、邻接表与链式前向星
  • 利用Spring Boot和Redis构建高性能缓存系统
  • 使用MybatisPlus实现sql日志打印优化
  • 洛谷P1093 [NOIP 2007 普及组] 奖学金
  • 丝杆升降机在锂电行业的自动化应用有什么?
  • MySQL 存储过程优化实践:项目合同阶段数据自动化处理
  • 基于 ABP vNext + CQRS + MediatR 构建高可用与高性能微服务系统:从架构设计到落地实战
  • 源码分析之Leaflet中TileLayer
  • Linux Bash 中 $? 的详细用法
  • 每日算法 -【Swift 算法】寻找两个有序数组的中位数(O(log(m+n)))详细讲解版
  • 深挖navigator.webdriver浏览器自动化检测的底层分析
  • k8s1.27版本集群部署minio分布式
  • jQuery Ajax中dataType 和 content-type 参数的作用详解
  • MySQL 8.0 OCP 英文题库解析(六)
  • Java中字符串(String类)的常用方法