подмножество anndata на основе кластеров жалюзи

Я хочу подмножество anndata на основе кластеров, но не могу понять, как это сделать.

Я использую конвейер scVelo, и в нем я запустил tl.louvainфункция кластера ячеек на основе лувен. У меня было около 32 кластеров, из которых меня интересуют кластеры 2 и 4, и мне нужно запустить конвейер только на этих кластерах. (Изначально у меня был файл ткацкого станка, который я прочитал в scVelo, так что теперь у меня есть данные.)

Я пробовал использовать adata.obs["louvain"] который дал мне информацию о кластере, но мне нужно написать новую anndata только с двумя кластерами и продолжить обработку.

Пожалуйста, помогите о том, как подмножество anndata. Любая помощь высоко ценится. (Поскольку я новичок в этом, мне трудно получить)

2 ответа

Решение

Если на вашем сайте adata.obs есть столбец "лувен", которого я ожидал бы после запуска tl.louvain, вы можете сделать подмножество какadata[adata.obs["louvain"] == "2"]если вы хотите получить один кластер иadata[adata.obs['louvain'].isin(['2', '4'])]для получения кластера 2 и 4.

Не стесняйтесь использовать эту функцию, которую я написал для своей работы.

      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)]
Другие вопросы по тегам