目录

环境导入

关键函数定义

运行前设定

数据准备

正式运行与保存

可视化与概率调整


偶然发现的一个好用的transfer方法,计算效率相当高,解了我的燃眉之急hh

原方法来自由以色列耶路撒冷希伯来大学的Mor Nitzan、美国麻省理工学院-哈佛大学博德研究所Aviv Regev和Johanna Klughammer共同通讯发表在Nature Biotechnology的研究成果。

环境导入

所需要的安装条件已经详细列出https://github.com/simonwm/tacco

这里不再赘述,我们先导入需要的环境包

import os
import sys
import cv2
import seaborn as sns
import anndata as ad
import argparse
import pandas as pd
import numpy as np
import tacco as tc
import scanpy as sc
import matplotlib.pyplot as plt
from matplotlib.transforms import Affine2D

关键函数定义

一些后续需要使用到的可视化以及修改函数定义(直接使用可跳过)

def cluster_small_multiples(adata, clust_key, size=10, frameon=False, **kwargs):fig, axes = plt.subplots(figsize=(7*len(celltype_order), 3))tmp = adata.copy()for i, clust in enumerate(adata.obs[clust_key].cat.categories):tmp.obs[clust] = adata.obs[clust_key].isin([clust]).astype('category')tmp.uns[clust+'_colors'] = ['#d3d3d3', adata.uns[clust_key+'_colors'][i]]sc.pl.scatter(tmp, groups=tmp.obs[clust].cat.categories[1:].values, color=adata.obs[clust_key].cat.categories.tolist(), size=size, frameon=frameon, **kwargs)def markers_plot(adata, clust_key, df, **kwargs):adata = adata.copy()# Normalizing to median total countssc.pp.normalize_total(adata)# Logarithmize the datasc.pp.log1p(adata)markers = {i['celltype']: [j for j in i['marker'].split(',') if j in adata.var_names] for (_, i) in df.iterrows()}sc.pl.dotplot(adata, markers, groupby=clust_key, **kwargs)def update_celltype_proportions(df, modifications, ct_lowres='celltype_lowres', ct_hires="celltype_hires"):# 计算每个粗注释的细胞比例celltype_proportions = df[ct_lowres].value_counts(normalize=True)# 对每个粗注释分组,然后计算每个粗注释中其细分群的细胞比例hires_proportions = df.groupby(ct_lowres)[ct_hires].value_counts(normalize=True)grouped_proportions = hires_proportions.mul(celltype_proportions, level=0)if modifications is None:return celltype_proportions, grouped_proportions# 计算未被修改的细胞类型的当前总比例current_remaining_proportion = celltype_proportions.drop(modifications.keys()).sum()# 计算修改后剩余的比例remaining_proportion = 1 - sum(modifications.values())# 更新未被修改的细胞类型的比例celltype_proportions.update(celltype_proportions.drop(modifications.keys()) * remaining_proportion / current_remaining_proportion)# 更新指定的粗注释细胞比例celltype_proportions.update(pd.Series(modifications))# 调整每个细分群的细胞比例grouped_proportions = hires_proportions.mul(celltype_proportions, level=0)return celltype_proportions, grouped_proportions

运行前设定

这里假设我要批量用一个注释好的单细胞转录组数据,去映射一组空间数据

sc_path = "/data/your_annotated_sc_data.h5ad"
sp_dir = "/data/your_sp_data_path/"
output_dir = "/data/output/"
os.makedirs(output_dir, exist_ok=True)  # 创建输出目录,如果不存在

数据准备

读取单细胞参考和所有空间数据,这里prob默认按照原单细胞注释中细胞比例来设定,但后续可以手动调整这个比例,从而调整映射效果

# 读取单细胞参考数据
reference = sc.read_h5ad(sc_path)
reference = reference[reference.obs['annotation'] != 'Other']
table = reference.obs["annotation"].value_counts()
prob = reference.obs["annotation"].value_counts() / reference.obs["annotation"].size# 获取空间转录组数据目录下的所有文件
sp_files = [f for f in os.listdir(sp_dir) if f.endswith('.h5ad')]

正式运行与保存

for sp_file in sp_files:print(f"Processing {sp_file}...")sp_path = os.path.join(sp_dir, sp_file)adata = sc.read_h5ad(sp_path)adata.X = adata.X.astype('float32')# 使用 Tacco 进行细胞类型注释tc.tl.annotate(adata, reference, "annotation",result_key='pred_celltype', annotation_prior=prob, verbose=False)# 提取预测结果prediction = adata.obsm['pred_celltype'].copy()prediction['pred_celltype'] = prediction.idxmax(1)prediction['max_score'] = prediction.iloc[:, :-1].max(1)pred_prob = prediction['pred_celltype'].value_counts(normalize=True)mse = ((pred_prob - prob) ** 2).mean()remove_celltype = pred_prob[pred_prob == 0].index.tolist()# 更新 adata 的注释信息adata.obs['pred_celltype'] = prediction['pred_celltype']adata.obs["pred_celltype"] = adata.obs["pred_celltype"].cat.remove_categories(remove_celltype)# 保存预测后的 h5ad 文件output_h5ad_path = os.path.join(output_dir, f"{sp_file.split('.')[0]}_predicted.h5ad")adata.write(output_h5ad_path)print("All files processed successfully.")

这里就得到了所有预测标签,放置在‘pred_celltype’标签下

可视化与概率调整

这里可以轻松地通过注释标签可视化预测的标签空间分布情况

adata = sc.read_h5ad("/data/your_predicted_sp.h5ad")
sc.pl.spatial(adata,color='pred_celltype',spot_size=100,title=f'Tacco Predicted Cell Types',legend_loc='right margin',palette='tab20',show=True,  
#        save=output_png_path)

同时你也可以输出上述默认的“prob”检查预测的细胞比例,如果有需要调整的,或者有异常值的,可以修改之后重新运行如下

# 修改概率
prob["label1"] = 0.5
prob["label2"] = 0.1# 重新运行
tc.tl.annotate(adata, reference, "annotation",result_key='pred_celltype', annotation_prior=prob, verbose=False)# 提取预测结果
prediction = adata.obsm['pred_celltype'].copy()
prediction['pred_celltype'] = prediction.idxmax(1)
prediction['max_score'] = prediction.iloc[:, :-1].max(1)
pred_prob = prediction['pred_celltype'].value_counts(normalize=True)
mse = ((pred_prob - prob) ** 2).mean()
remove_celltype = pred_prob[pred_prob == 0].index.tolist()# 更新 adata 的注释信息
adata.obs['pred_celltype'] = prediction['pred_celltype']
adata.obs["pred_celltype"] = adata.obs["pred_celltype"].cat.remove_categories(remove_celltype)

所有的迁移方法都是服务于我们的科学问题,本身并无好坏之分!主要这个方法真的计算很快,有相关需求的朋友大可以尝试一下~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/912013.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/912013.shtml
英文地址,请注明出处:http://en.pswp.cn/news/912013.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在反向代理环境下精准获取客户端真实 IP 的最佳实践

目录 1 背景 2 常见误区 3 X-Forwarded-For 解析规则 4 real_ip() 函数 —— 一行代码落地 5 与框架方法的协同 6 Nginx 端最小配置 7 生产落地 checklist 8 常见 Q&A 9 总结 在反向代理环境下精准获取客户端真实 IP 的最佳实践 — 基于自定义 real_ip() 函数的完…

华为云Flexus+DeepSeek征文|基于Dify构建抓取金融新闻并发送邮箱工作流

华为云FlexusDeepSeek征文|基于Dify构建抓取金融新闻并发送邮箱工作流 一、构建抓取金融新闻并发送邮箱工作流前言二、构建抓取金融新闻并发送邮箱工作流环境2.1 基于FlexusX实例的Dify平台2.2 基于MaaS的模型API商用服务 三、构建抓取金融新闻并发送邮箱工作流实战…

疲劳检测与行为分析:工厂智能化实践

视觉分析算法赋能工厂疲劳与安全管理 一、背景与需求 在制造业中,疲劳作业是导致安全事故和效率下降的核心因素之一。传统人工巡检存在覆盖面不足、响应滞后等问题,而基于视觉分析的智能监控系统通过多算法协同,可实现全天候、高精度的疲劳…

医院信息化建设的要点

随着医疗技术的不断发展和患者需求的日益多样化,医院信息化建设已经成为提高医疗质量和效率的必要手段。医院信息化建设是指通过信息技术手段对医院日常运营、管理和服务进行数字化、智能化和网络化的改造,以提高医疗服务水平和管理效率。在实施医院信息…

Sql Server常用命令整理篇:根据某个字段删除重复数据

通过比较同一表中的两行数据,删除那些在Text_data或Title字段上有重复值的行,同时保留id较小的行: DELETE t1 FROM data_zq t1 JOIN data_zq t2 WHERE t1.id > t2.id AND (t1.Text_data t2.Text_data OR t1.Title t2.Title);注意事项 备…

Spring AI 入门到实战:我如何用它让系统具备“理解能力”

我向来对“整合大模型进 Java 应用”这件事持谨慎态度。在 GPT 火了之后,我们团队最初是用 HTTP 手动调 OpenAI 接口,把它当成一个 JSON API 用。但随着业务交互变复杂,我意识到:我们需要的是一个语义系统,而不是一个封…

C++链表的虚拟头节点

C链表虚拟头节点(Dummy Head) 虚拟头节点是链表操作中极为实用的设计技巧,它通过在链表真实头部前添加一个特殊节点,有效简化边界条件处理。 一、虚拟头节点的本质与核心作用 1. 定义 虚拟头节点是一个不存储真实数据的特殊节…

使用vllm部署 Nanonets-OCR-s

使用vLLM部署Nanonets-OCR-s模型的完整指南 Nanonets-OCR-s作为基于Qwen2.5-VL-3B的多模态OCR模型,结合vLLM的高效推理引擎可显著提升部署性能。 一、环境准备与依赖安装 1. 安装vLLM与多模态依赖 # 安装vLLM(含CUDA加速) pip install vllm==0.3.21 # 建议使用稳定版本…

大数据在UI前端的应用深化研究:用户行为模式的挖掘与分析

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在数字化用户体验竞争白热化的时代,用户行为数据已成为产品迭代的核心资产。据 Ad…

解决“Belkin USB-C LAN”有一个自分配的IP地址,将无法接入互联网。

MacBookPro使用belkin转换器连接网线,网络不能正常连通,已确定网线、交换机均正常,可以按照如下操作尝试。我自己的情况是通过下面的方式成功解决。如有其他情况后续继续补充。 1. 打开“设置”-“网络”,点击名字为“Belkin USB…

Python 爬虫初学者教程

一、爬虫基础概念 什么是爬虫? 爬虫是模拟浏览器行为,自动获取网页数据的程序,常用于数据采集、信息监控等场景。 爬虫的基本流程: 1. 发送请求获取网页内容 2. 解析内容提取数据 3. 存储数据 二、环境准备 1. 安装 Python&…

windows下 tomcat的安装部署

Tomcat是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。 本文将详细介绍在Windows环境下搭建Tomcat服务器,来搭建小型应用。 要…

ASIO 避坑指南:高效、安全与稳健的异步网络编程

ASIO 避坑指南:高效、安全与稳健的异步网络编程 引言 ASIO是很强大的一个异步io库,但服务器除了高效以外,稳定也是关键,这篇文章主要总结了ASIO使用遇到的典型问题和坑: 如何榨干io_context的性能,让CPU…

鲸孪生中三维模型的常见问题~

鲸孪生是山海鲸中专门负责3D 场景搭建和渲染的组件,可以双击进入编辑,进入编辑之后组件栏也会跟着变化,可以插入更多的 3D 内部的组件。 搭建三维场景经常会使用到模型,包括人物模型、建筑物模型、汽车模型等,这些都可…

PyTorch中实现开立方

技术背景 在PyTorch中,没有直接实现cbrt这一算子。这个算子是用于计算一个数的开立方,例如,最简单的-8开立方就是-2。但这里有个问题是,在PyTorch中,因为没有cbrt算子,如果直接用幂次计算去操作数字&#x…

关于如何在 Git 中切换到之前创建的分支的方法

文章目录 关于如何在 Git 中切换到之前创建的分支的方法一、确保你在项目目录中二、查看所有分支(可选)三、切换到目标分支四、如果分支仅在远程存在五、验证是否切换成功六、常见问题处理七、总结命令流程 PS:下次进入分支时,只需完成步骤1 …

基于深度学习的智能图像语义分割系统:技术与实践

前言 图像语义分割是计算机视觉领域中的一个重要任务,其目标是将图像中的每个像素分配到预定义的语义类别中。这一技术在自动驾驶、医学影像分析、机器人视觉等多个领域有着广泛的应用。近年来,深度学习技术,尤其是卷积神经网络(C…

历史轨迹组件性能优化方案

针对历史轨迹组件的性能优化,可从数据处理、渲染策略、内存管理和交互优化四个方面入手。以下是具体的优化方向和实现方案: 一、数据处理优化 1. 轨迹数据抽稀算法 原理:在不影响轨迹整体形状的前提下,减少轨迹点数量实现方案&…

【论文阅读36】- Graph Attention Network(2025)

这篇论文主要介绍了一种基于改进型图注意力网络(Graph Attention Network, GAT)的滑坡变形异质性监测方法。该方法通过融合多尺度时间嵌入和自适应图学习,能够同时捕捉监测点之间复杂的时空依赖关系,有效反映滑坡的局部与整体变形…

CSS基础3

动画-animation 动画-animation与 transition过渡动画的区别 transition过渡动画:实现两个状态间的变化过程动画animation:实现多个状态间的变化过程,动画过程可控(重复播放、最终画面、是否暂停) 走马灯-使用transiti…