подмножество 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)]