专栏名称: 生信菜鸟团
生信菜鸟团荣誉归来,让所有想分析生物信息学数据的小伙伴找到归属,你值得拥有!
目录
相关文章推荐
生物制品圈  ·  盘点 | 北京市12家兽用疫苗企业及产品管线 ·  6 天前  
BioArt  ·  Cell | ... ·  5 天前  
BioArt  ·  Nat Biotechnol | ... ·  5 天前  
生物学霸  ·  让文献按影响因子大小排列的神器在此 ·  6 天前  
51好读  ›  专栏  ›  生信菜鸟团

我们开发的单细胞分析框架超过500个点赞拉!

生信菜鸟团  · 公众号  · 生物  · 2025-01-08 19:55

正文

2024年12月24日,平安夜,OmicVerse在Github上的🌟刚好500个了!对比传统的scanpy的2k个🌟,我们成功实现了国人在这方面0的突破。OmicVerse可以说是应用层的一个统一接口。

对比刚发表时,OmicVerse已经迭代到了1.6.10版本,迭代了快20个版本。因此,有很多论文中没有介绍的新特性,我们希望能在本推文中向大家介绍一下:

1.单细胞分析模块

1.1 预处理-双胞过滤算法sccomposite

这是一个今年新发表在Nat.Commun上的双细胞检测算法,其性能要超越传统的scrublet。我们在OmicVerse可以通过一行代码简单调用:

%%time
adata=ov.pp.qc(adata,
              tresh={'mito_perc'0.2'nUMIs'500'detected_genes'250},
               doublets_method='sccomposite',
              batch_key=None)
adata

1.2 预处理-原始表达矩阵恢复

很多时候,我们从网上下载的数据,只给了标准化和对数化后的数据,部分单细胞算法需要原始矩阵,因此我们根据标准化和对数化后的原理,选取最小的值为1,反演了每一个基因的counts。

X_counts_recovered, size_factors_sub=ov.pp.recover_counts(adata.X, 50*1e450*1e5, log_base=None
                                                          chunk_size=10000)
adata.layers['recover_counts']=X_counts_recovered
adata[:,'CD3D'].to_df(layer='recover_counts').T

1.3 预处理-模块分解cNMF

在肿瘤上皮细胞中,由于肿瘤细胞的多样性/异质性,常规的marker注释亚群较为困难,因此我们会采用非负矩阵分解的方法如cNMF来进行分析:

import numpy as np
## Initialize the cnmf object that will be used to run analyses
cnmf_obj = ov.single.cNMF(adata,components=np.arange(5,11), n_iter=20, seed=14, num_highvar_genes=2000,
                          output_dir='example_dg1/cNMF', name='dg_cNMF')
## Specify that the jobs are being distributed over a single worker (total_workers=1) and then launch that worker
cnmf_obj.factorize(worker_i=0, total_workers=4)
cnmf_obj.combine(skip_missing_files=True)
cnmf_obj.k_selection_plot(close_fig=False)

1.4 预处理-批次效应去除算法CellANOVA

CellANOVA 是一个 Python 软件包,用于批量集成单个单元数据中的信号恢复。它建立在现有的单细胞数据集成方法的基础上,并使用一个对照样本池来量化批量效应,并从不需要的批量变化中分离出有意义的生物变化。

## construct control pool
control_dict = {
    'pool1': ['s1d3','s2d1'],
}

ov.single.batch_correction(adata,batch_key='batch',n_pcs=50,
                           methods='CellANOVA',control_dict=control_dict)
adata

1.5 注释-自动注释算法GPT4CellType

今年在Nature Method上发表了一个利用GPT4进行细胞类型自动注释的算法,该包为R语言撰写的,实际上该算法仅是设计了一个Prompt。因此我们在OmicVerse中重新实现了该算法,并且提供了国产大模型作为接口:

os.environ['AGI_API_KEY'] = 'sk-**'  # Replace with your actual API key
result = ov.single.gptcelltype(all_markers, tissuename='PBMC', speciename='human',
                      model='qwen-plus', provider='qwen',
                      topgenenumber=5)
result

1.6 注释-大语言模型自动注释scMulan

清华大学张学工课题组10月份在Biorxiv上预印了scMulan,并提供了一个基础大模型的checkpoint以及自动注释的函数,我们也将其整合到了OmicVerse中方便调用

scml = ov.externel.scMulan.model_inference(ckp_path, adata_GS_uniformed)
base_process = scml.cuda_count()
scml.get_cell_types_and_embds_for_adata(parallel=True, n_process = 1)
# scml.get_cell_types_and_embds_for_adata(parallel=False) # for only using CPU, but it is really slow.

1.7 轨迹分析-CytoTrace2预测细胞发育潜能

对于拟时序分析而言,确定发育的起点是至关重要的,因此我们在OmicVerse中整合了CytoTrace2来预测单细胞数据中每个细胞的分化潜能。

results =  ov.single.cytotrace2(adata,
    use_model_dir="cymodels/5_models_weights",
    species="mouse",
    batch_size = 10000,
    smooth_batch_size = 1000,
    disable_parallelization = False,
    max_cores = None,
    max_pcs = 200,
    seed = 14,
    output_dir = 'cytotrace2_results'
)

1.8 轨迹分析-最好的无需Velocity的轨迹分化算法StaVIA

这是港中文课题组发表的VIA的2.0版本,不过我不太喜欢作者的可视化效果,因此我将其整合进OmicVerse的同时,更新了一系列绘图函数的参数:

from omicverse.externel import VIA
v0 = VIA.core.VIA(data=adata.obsm[use_rep][:, 0:ncomps], 
             true_label=adata.obs[clusters], 
             edgepruning_clustering_resolution=0.15, cluster_graph_pruning=0.15,
             knn=knn,  root_user=root_user, resolution_parameter=1.5,
             dataset=dataset, random_seed=v0_random_seed, memory=memory)#, do_compute_embedding=True, embedding_type='via-atlas')

v0.run_VIA()

1.9 细胞结构-通讯分析CellPhoneDB

限制CellPhoneDB应用的一个因素,就是可视化效果不如CellChat,因此我们在OmicVerse中仿CellChat,给出了新的各种不同的可视化图:

ov.pl.cpdb_interacting_heatmap(adata=adata,
                         celltype_key='cell_labels',
                            means=cpdb_results['means'],
                            pvalues=cpdb_results['pvalues'],
                            source_cells=['dNK1','dNK2','dNK3'],
                            target_cells=['eEVT','iEVT'],
                            plot_secret=True,
                            min_means=3,
                            nodecolor_dict=None,
                            ax=None,
                            figsize=(2,6),
                            fontsize=10,)

2. 空转分析模块

2.1 空间域识别-GraphST/BINARY/CAST

由于空间域的识别一直是空转中一个重要的问题,不同的算法识别的空间域有所区别,我们希望有一个函数,可以一键进行各种不同的空间域分析,于是我们在OmicVerse中设计了ov.space.clusters函数。

methods_kwargs={}
methods_kwargs['GraphST']={
    'device':'cuda:0',
    'n_pcs':30
}

adata=ov.space.clusters(adata,
                  methods=['GraphST','CAST','BINARY'],
                  methods_kwargs=methods_kwargs,
                  lognorm=1e4)

2.2 无单细胞的空转解卷积Starfysh

实际上,我们只需要提供细胞类型的marker,理论上也可以对空转的每一个spot进行解卷积分析,因此我们在OmicVerse中引入了Starfysh。

from omicverse.externel.starfysh import (AA, utils, plot_utils, post_analysis)
from omicverse.externel.starfysh import _starfysh as sf_model

# Run models
model, loss = utils.run_starfysh(visium_args,
                                 n_repeats=n_repeats,
                                 epochs=epochs,
                                 #patience=patience,
                                 device=device
                                )

2.3 空间稳态动力学STT

单细胞分辨率的空转技术在2024年近一步涌现,RNA Velocity理论上也应该能应用于空间转录组中,今年新发表的STT便实现了空间吸引子和稳态的分析。

STT_obj=ov.space.STT(adata,spatial_loc='xy_loc',region='Region')
STT_obj.stage_estimate()

2.4 空间通讯分析COMMOT/Flowsig

空间通讯是空间转录组学的研究热点,我们希望能够找到空间通讯的传导过程。在这里,我们介绍了两种集成在一体的方法: COMMOT和flowsig。在 OmicVerse中,我们对 COMMOT 和 Flowsig 算法进行了直接实现:

ov.externel.commot.tl.spatial_communication(adata,
                            database_name='cellchat'
                            df_ligrec=df_cellchat_filtered, 
                            dis_thr=500, heteromeric=True
                            pathway_sum=True)
commot_output_key = 'commot-cellchat'
# We first construct the potential cellular flows from the commot output
ov.externel.flowsig.pp.construct_flows_from_commot(adata,
                                commot_output_key,
                                gem_expr_key = 'X_gem',
                                scale_gem_expr = True,
                                flowsig_network_key = 'flowsig_network',
                                flowsig_expr_key = 'X_flow')

3. 故宫384色的绘图效果

在 OmicVerse,我们提供了一个基于东方美学的颜色系统,具有384个代表性的颜色来自紫禁城。我们将利用这些颜色组合在未来的可视化。

所有的颜色都来自这本书: 《中国传统色彩: 故宫里的色彩美学》(国际标准化组织第9787521716054版)

fb=ov.pl.ForbiddenCity()
from IPython.display import HTML
HTML(fb.visual_color(loc_range=(0,384),
                    num_per_row=24))

后记

感谢你能阅读到这里,如果你有任何希望我们添加的功能,可以到我们的Github上提交issue (https://github.com/Starlitnightly/omicverse/issues),我们会尽力将其整合进入OmicVerse。我们希望,OmicVerse可以成为一个世界范围内最好用的应用层框架,任何好用的单细胞/空转算法,我们都希望能提供一个简单的函数进行直接使用。最后,再次感谢健明老师的大力宣传与帮助。


在GitHub上,每个项目的“星星”(Stars)数量具有以下意义:

  1. 流行度和认可度:星星数量可以作为项目受欢迎程度的一个指标。一个项目获得的星星越多,通常意味着它越受欢迎,或者被社区更广泛地认可。
  2. 兴趣和关注:用户通过给项目添加星星来表示他们对该项目的兴趣。这可以作为他们将来想要回顾或参与项目的提醒。
  3. 社区支持:星星数量可以反映项目获得的社区支持程度。一个拥有大量星星的项目可能有一个活跃的社区,这有助于项目的持续发展和维护。
  4. 影响力:对于开源项目来说,星星数量可以作为其在更广泛技术社区中影响力的一个指标。
  5. 项目质量:虽然星星数量并不直接反映项目的质量,但通常高质量的项目更有可能吸引更多的关注和星星。
  6. 发现和推荐:GitHub用户在浏览或搜索项目时,可能会优先查看那些拥有更多星星的项目,因为它们被认为更可靠或更有价值。
  7. 激励贡献者:对于项目维护者和贡献者来说,看到项目获得星星可以是一种鼓励,这可能会激励他们继续改进和扩展项目。