scPTR / src /scptr /tools /_rank_genes.py
bryan7264's picture
Add files using upload-large-folder tool
925ee3b verified
Raw
History Blame Contribute Delete
1.76 kB
"""Rank genes by differential gamma across PT states."""
from __future__ import annotations
import numpy as np
import pandas as pd
from anndata import AnnData
from .._constants import GAMMA, PT_STATE
from .._utils import get_layer, require_layers, require_obs, log_params
def rank_pt_genes(
adata: AnnData,
groupby: str = PT_STATE,
method: str = "t-test",
n_genes: int = 100,
) -> pd.DataFrame:
"""Rank genes by differential degradation rate across groups.
Uses scanpy's ``rank_genes_groups`` on the gamma matrix.
Parameters
----------
adata
Annotated data matrix with ``gamma`` layer and group labels.
groupby
Column in ``adata.obs`` defining groups.
method
Statistical test: ``'t-test'``, ``'wilcoxon'``, etc.
n_genes
Number of top genes to return per group.
Returns
-------
DataFrame with ranked genes per group.
"""
import scanpy as sc
require_layers(adata, GAMMA)
require_obs(adata, groupby)
gamma = get_layer(adata, GAMMA)
# Temporary AnnData for ranking
gamma_adata = AnnData(X=gamma.copy())
gamma_adata.obs_names = adata.obs_names.copy()
gamma_adata.var_names = adata.var_names.copy()
gamma_adata.obs[groupby] = adata.obs[groupby].values
sc.tl.rank_genes_groups(
gamma_adata,
groupby=groupby,
method=method,
n_genes=n_genes,
)
# Store results back
adata.uns["rank_pt_genes"] = gamma_adata.uns["rank_genes_groups"]
# Build a summary DataFrame
result = sc.get.rank_genes_groups_df(gamma_adata, group=None)
log_params(adata, "rank_pt_genes", {
"groupby": groupby,
"method": method,
"n_genes": n_genes,
})
return result