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