为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

当年话下 2023-08-08 16:20:11
我想在集群的基础上对 anndata 进行子集化,但我无法理解如何做到这一点。我正在运行 scVelo 管道,并且tl.louvain在 louvain 的基础上运行了对单元进行聚类的函数。我得到了大约 32 个集群,其中集群 2 和 4 是我感兴趣的,我必须仅在这些集群上进一步运行管道。(最初我有在 scVelo 中读取的 loom 文件,所以我现在有了 anndata。)我尝试使用adata.obs["louvain"]它给了我集群信息,但我需要编写一个只有 2 个集群的新 anndata 并进一步处理。请帮助了解如何对 andata 进行子集化。非常感谢任何帮助。(因为我是新手,所以很难掌握)
查看完整描述

2 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

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



查看完整回答
反对 回复 2023-08-08
?
白板的微信

TA贡献1883条经验 获得超3个赞

请随意使用我为我的工作编写的这个函数。


import AnnData

import numpy as np


def 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)]


查看完整回答
反对 回复 2023-08-08
  • 2 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信