基于 Louvain 集群对 Anndata 进行子集化

我想在集群的基础上对 anndata 进行子集化,但我无法理解如何做到这一点。

我正在运行 scVelo 管道,并且tl.louvain在 louvain 的基础上运行了对单元进行聚类的函数。我得到了大约 32 个集群,其中集群 2 和 4 是我感兴趣的,我必须仅在这些集群上进一步运行管道。(最初我有在 scVelo 中读取的 loom 文件,所以我现在有了 anndata。)

我尝试使用adata.obs["louvain"]它给了我集群信息,但我需要编写一个只有 2 个集群的新 anndata 并进一步处理。

请帮助了解如何对 andata 进行子集化。非常感谢任何帮助。(因为我是新手,所以很难掌握)


当年话下
浏览 153回答 2
2回答

SMILET

如果您的 adata.obs 在运行后有一个我期望的“louvain”列tl.louvain,您可以进行子集化,就好像 adata[adata.obs["louvain"] == "2"] 您想要获取一个集群并 adata[adata.obs['louvain'].isin(['2', '4'])] 获取集群 2 和 4 一样。

白板的微信

请随意使用我为我的工作编写的这个函数。import AnnDataimport numpy as npdef cluster_sampled(adata: AnnData, clusters: list, n_samples: int) -> AnnData:    """Sample n_samples randomly from each louvain cluster from the provided clusters    Parameters    ----------    adata        AnnData object    clusters        List of clusters to sample from    n_samples        Number of samples to take from each cluster    Returns    -------    AnnData        Annotated data matrix with sampled cells from the clusters    """    l = []    adata_cluster_sampled = adata[adata.obs["louvain"].isin(clusters), :].copy()    for k, v in adata_cluster_sampled.obs.groupby("louvain").indices.items():        l.append(np.random.choice(v, n_samples, replace=False))    return adata_cluster_sampled[np.concatenate(l)]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python