首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python版的singler单细胞注释工具

python版的singler单细胞注释工具

作者头像
用户11414625
发布于 2024-12-20 08:48:54
发布于 2024-12-20 08:48:54
17800
代码可运行
举报
文章被收录于专栏:生信星球520生信星球520
运行总次数:0
代码可运行

网上可以搜到大量的R语言singleR的代码和教程,但python版的就比较少啦,恭喜你找到了我。

1.文件读取

输入的数据是10X标准的三个文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import singlecellexperiment as sce
import scanpy as sc
import os
print(os.listdir("01_data"))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['barcodes.tsv', 'genes.tsv', 'matrix.mtx']

用read_10x_mtx读取

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
adata = sc.read_10x_mtx("01_data/")
print(adata.shape)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(2700, 32738)

2. 质控

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sc.pp.filter_cells(adata,min_genes=200)
sc.pp.filter_genes(adata,min_cells=3)
adata.var['mt']=adata.var_names.str.startswith('MT-')
sc.pp.calculate_qc_metrics(adata,qc_vars=['mt'],log1p=False,percent_top=None,inplace=True)
sc.pl.violin(adata,["n_genes_by_counts", "total_counts", "pct_counts_mt"],jitter=0.4, multi_panel=True)

adata=adata[adata.obs.n_genes_by_counts>200]
adata=adata[adata.obs.n_genes_by_counts<2500]
adata=adata[adata.obs.pct_counts_mt<20]

print(adata.shape)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(2693, 13714)

3.降维聚类分群

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sc.pp.normalize_total(adata,target_sum=1e4)
sc.pp.log1p(adata)
adata.raw=adata

sc.pp.highly_variable_genes(adata,n_top_genes=2000)
sc.pp.scale(adata)
sc.pp.pca(adata)
sc.pp.neighbors(adata,n_pcs=15)
sc.tl.leiden(adata,flavor="igraph",n_iterations=2,resolution=0.5)
sc.tl.umap(adata)
sc.pl.umap(adata,color='leiden')

4.singler自动注释

singler的资料实在太少,文档也很简洁,我学习到这个地方时,请教了包的作者两个问题:

1.如何按照cluster完成注释?

作者回答可以用scranpy的aggregate_across_cells函数按簇整合;

Q: In the R package singleR, I am able to utilize the cluster parameter; however, it appears that this parameter does not exist in the Python version of singler.Did I miss anything? A: scranpy has an aggregate_across_cells() function that you can use to get the aggregated matrix that can be used in classify_single_reference(). That should be the same as what SingleR::SingleR() does under the hood. I suppose we could add this argument, but to be honest, the only reason that cluster= still exists in SingleR() is for back-compatibility purposes. It's easy enough to do the aggregation outside of the function and I don't want to add more responsibilities to the singler package.

2.应该选择raw count还是lognormalized data 还是scaled data?

作者回答都可以

Q: Thank you. I've been learning singler recently. According to the quick start guide on the pip website,the test_data parameter seems to require the original count data:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data = sce.read_tenx_h5("pbmc4k-tenx.h5", realize_assays=True)
mat = data.assay("counts")

However, the R version of SingleR typically uses log-normalized data. The documentation also mentions,”or if you are coming from scverse ecosystem, i.e. AnnData, simply read the object as SingleCellExperiment and extract the matrix and the features.“,but data processed with Scanpy could be extracted as scaled data. Could you provide advice on which matrix I should use, or if either would be suitable?

A: For the test dataset, it doesn't matter. Only the ranks of the values are used by SingleR itself, so it will give the same results for any monotonic transformation within each cell.

IIRC the only place where the log/normalization-status makes a difference is in SingleR::plotMarkerHeatmap() (R package only, not in the Python package yet) which computes log-fold changes in the test dataset to prioritize the markers to be visualized in the heatmap. This is for diagnostic purposes only.

Of course, the reference dataset should always be some kind of log-normalized value, as log-fold changes are computed via the difference of means, e.g., with getClassicMarkers().

其实使用哪个数据还是会产生一些差别的,我们就沿用log-normalized数据吧(当然其他的也可以)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mat = adata.raw.X.T # 矩阵
features = list(adata.raw.var.index) #矩阵的行名-基因
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import scranpy
m2 = scranpy.aggregate_across_cells(mat,adata.obs['leiden']) #按照聚类结果整合单细胞矩阵
m2
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SummarizedExperiment(number_of_rows=13714, number_of_columns=8, assays=['sums', 'detected'], row_data=BiocFrame(data={}, number_of_rows=13714, column_names=[]), column_data=BiocFrame(data={'factor_1': StringList(data=['0', '2', '3', '4', '1', '5', '6', '7']), 'counts': array([452, 350, 226, 252, 713, 226, 450,  24], dtype=int32)}, number_of_rows=8, column_names=['factor_1', 'counts']), column_names=['0', '2', '3', '4', '1', '5', '6', '7'])

查看都有哪些可选的注释

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import celldex
refs = celldex.list_references() #这句也有可能因为网络问题而报错,不过可以不运行,只是为了知道下面可以写什么注释和什么版本。
print(refs[["name", "version"]])
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                        name     version
0                       dice  2024-02-26
1           blueprint_encode  2024-02-26
2                     immgen  2024-02-26
3               mouse_rnaseq  2024-02-26
4                       hpca  2024-02-26
5  novershtern_hematopoietic  2024-02-26
6              monaco_immune  2024-02-26

celldex的参考数据是会下载的,经常有网络问题下载困难,导致运行失败,可以存本地文件,只有第一次运行时会下载,但要注意换了参考数据则fr和fetch_reference里两处要修改

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import os
import pickle

fr = "ref_blueprint_encode_data.pkl" 
if not os.path.exists(fr):
    ref_data = celldex.fetch_reference("blueprint_encode", "2024-02-26", realize_assays=True)
    with open(fr, 'wb') as file:
        pickle.dump(ref_data, file)
else:
    with open(fr, 'rb') as file:
        ref_data = pickle.load(file)

完成注释

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import singler
results = singler.annotate_single(
    test_data = m2,
    test_features = features,
    ref_data = ref_data,
    ref_labels = "label.main"
)

将注释结果添加到anndata对象里,并画图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dd = dict(zip(list(m2.column_data.row_names), results['best']))
dd
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{'0': 'CD8+ T-cells',
 '2': 'B-cells',
 '3': 'Monocytes',
 '4': 'NK cells',
 '1': 'CD4+ T-cells',
 '5': 'CD8+ T-cells',
 '6': 'Monocytes',
 '7': 'Monocytes'}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
adata.obs['singler']=adata.obs['leiden'].map(dd)

sc.pl.umap(adata,color = 'singler')

自动注释不一定是完全准确的,你换一个参考数据也会发现结果会变。发现有问题就要结合背景知识(比如marker基因)去检查一下。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信星球 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring Cloud Alibaba - 18 Nacos Config配置中心加载相同微服务的不同环境下的通用配置
举个例子,同一个微服务,通常我们的servlet-context 都是相同的,不区分生产环境、测试环境, 那类似这样公共的配置,我们可以每个自己单独配置一份,有没有更好的方式呢?
小小工匠
2022/02/05
8660
Spring Cloud Alibaba - 18 Nacos Config配置中心加载相同微服务的不同环境下的通用配置
Spring Cloud Alibaba - 19 Nacos Config配置中心加载不同微服务的通用配置的两种方式
Spring Cloud Alibaba - 18 Nacos Config配置中心加载相同微服务的不同环境下的通用配置 这里说了相同的服务,不同环境下的配置。
小小工匠
2022/02/05
1.7K0
Spring Cloud Alibaba - 19 Nacos Config配置中心加载不同微服务的通用配置的两种方式
Spring Cloud Alibaba 系列之 Nacos 配置中心
  Nacos 除了通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现以外,还可以通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。Nacos 作为配置中心时是可以动态变更的,不像 Spring Cloud Config 需要配合 Spring Cloud Bus 实现半自动。☞ 官方文档
Demo_Null
2020/11/24
1.7K0
Spring Cloud Alibaba 系列之 Nacos 配置中心
19.SpringCloud实战项目-整合Nacos配置中心
这种方式的缺点是什么呢?如果要修改配置参数,则需要重新启动服务。如果服务很多,则需要重启所有服务,非常不方便。
悟空聊架构
2022/05/13
5670
19.SpringCloud实战项目-整合Nacos配置中心
使用Nacos作为配置中心(四)
通过之前文章的学习我们已经学会了使用Nacos完成服务的注册与发现。同时也介绍了Spring Cloud中不同风格的服务消费方式。接下来,我们再来学习下Nacos的另一个重要功能:配置管理
用户1212940
2022/04/13
1.4K0
使用Nacos作为配置中心(四)
一文读懂Nacos注册中心
—般来说,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。当前主流的服务如Spring cloud和Dubbo服务,都适用于AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例。
Blue_007
2023/11/02
1.5K0
一文读懂Nacos注册中心
Nacos统一配置中心
  nacos管理配置文件方式是在自己所在的服务器上形成一个版本库,因此不需要再创建远程版本库。   Nacos作为统一配置中心管理配置文件时,同样也是存在版本控制。
别团等shy哥发育
2023/02/25
8480
Nacos统一配置中心
Java学习笔记-微服务(7)-注册配置中心Nacos
Nacos 的含义是 Dynamic Naming and Configuration Service。
咸鱼程序员
2025/03/08
3230
Java学习笔记-微服务(7)-注册配置中心Nacos
Spring Cloud Alibaba之服务发现组件 - Nacos配置的多文件加载与共享配置(七)
对于Nacos作为配置中心的使用,通过之前的几篇文章,我们已经介绍了如何在Nacos中创建配置内容、Nacos配置内容与Spring应用配置之间的对应关系以及实战中多环境下的配置管理方案。
用户1212940
2022/04/13
7630
Spring Cloud Alibaba之服务发现组件 - Nacos配置的多文件加载与共享配置(七)
Nacos Config--服务配置
使用nacos作为配置中心,其实就是将nacos当做一个服务端,将各个微服务看成是客户端,我们 将各个微服务的配置文件统一存放在nacos上,然后各个微服务从nacos上拉取配置即可。 接下来我们以商品微服务为例,学习nacos config的使用。
用户10196776
2022/11/28
5780
Nacos Config--服务配置
Spring Cloud Alibaba - 03 注册中心Nacos 应用篇(上)
下载地址 :https://github.com/alibaba/Nacos/releases
小小工匠
2022/02/03
3560
Spring Cloud Alibaba - 03 注册中心Nacos 应用篇(上)
Nacos作为服务配置中心实战
  Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取, 拉取配置之后,才能保证项目的正常启动。
别团等shy哥发育
2023/02/25
8710
Nacos作为服务配置中心实战
SpringCloud之Nacos配置中心解读
当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。
一个风轻云淡
2023/10/23
7080
SpringCloud之Nacos配置中心解读
Nacos Config集成SpringCloud使用说明
Nacos config提供了配置中心的解决方案,且功能非常的强大适用,提供单机与集群模式
用户2603479
2019/09/12
2.6K0
Nacos Config集成SpringCloud使用说明
推荐:Spring Cloud 整合 Nacos 实现服务配置中心
在之前的文章 《Nacos 本地单机版部署步骤和使用》 中,大家应该了解了 Nacos 是什么?其中 Nacos 提供了动态配置服务功能
二哥聊运营工具
2021/12/16
5950
推荐:Spring Cloud 整合 Nacos 实现服务配置中心
SpringCloud系列(七)| 集成Nacos配置中心
在说配置中心之前,我们先说说配置文件,关于这个词,我想大家并不陌生。 不管是前端,后端或是其他的各类技术栈,应该都离不来配置文件。我们在早期的代码开发时代,就经常和配置文件打交道, 什么web.xml, applicationContext.xml,mybatis-config.xml、hibernate.cfg.xml, 等等等等(熟悉这些文件名称的应该都是老司机了)。
一缕82年的清风
2023/12/18
1.4K0
SpringCloud系列(七)| 集成Nacos配置中心
Spring Cloud 整合 nacos 实现动态配置中心
上一篇 Spring Cloud 微服务实战——nacos 服务注册中心搭建(附源码) 讲解了Spring Cloud 整合 nacos 实现服务注册与发现,nacos除了有服务注册与发现的功能,还有提供动态配置服务的功能。本文主要讲解Spring Cloud 整合nacos实现动态配置服务。主要参考官方部署手册点我。
用户10384376
2023/02/26
1.3K0
Spring Cloud 整合 nacos 实现动态配置中心
6000 字|20 图|Nacos 手摸手教程
上次我们讲解了 OpenFeign 的架构原理,这次我们要来进入 Nacos 帝国了,Nacos 作为服务注册中心、配置中心,已经非常成熟了,业界的标杆,在讲解 Nacos 的架构原理之前,我先给大家来一篇开胃菜:讲解 Nacos 如何使用。
悟空聊架构
2022/05/13
4350
6000 字|20 图|Nacos 手摸手教程
Nacos Config--服务配置
Apollo是由携程开源的分布式配置中心。特点有很多,比如:配置更新之后可以实时生效,支持灰度发 布功能,并且能对所有的配置进行版本管理、操作审计等功能,提供开放平台API。并且资料也写的很 详细。
IT小马哥
2021/09/03
5130
Nacos Config--服务配置
nacos做服务配置中心
在TestController上加个@RefreshScope注解,然后我们去nacos客户端手动修改config.info的信息,然后重新调用这个/test接口,会发现响应的是修改后的内容。
Java旅途
2020/10/22
1.9K0
推荐阅读
相关推荐
Spring Cloud Alibaba - 18 Nacos Config配置中心加载相同微服务的不同环境下的通用配置
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档