The SCTC Python package provides tools for calculating Single-Cell Transcriptional Complexity (SCTC) from scRNA-seq data. This metric helps to characterize cell developmental potential and infer single-cell pseudotime.
You can install the SCTC package using pip
:
The complexity_index
function computes the Cell Complexity Index (CCI) and Gene Complexity Index (GCI) for a given single-cell transcriptome dataset.
import sctc # Load your scRNA-seq gene expression matrix as a numpy array 'mcg' # mcg should have cells as rows and genes as columns cci, gci = sctc.complexity_index(mcg)
cci
: CCI for each cell (normalized between 0 and 1).gci
: GCI for each gene (normalized between 0 and 1).The complexity_order
function calculates the Nth-complexity of cells and genes.
import sctc # Load your scRNA-seq gene expression matrix as a numpy array 'mcg' # mcg should have cells as rows and genes as columns kc, kg = sctc.complexity_order(mcg, nmax=30)
kc
: Nth-complexity for each cell with N ranges from 0 to nmax (normalized between 0 and 1).kg
: Nth-complexity for each gene with N ranges from 0 to nmax (normalized between 0 and 1).The convert_to_ranking
function convert a 2D complexity array into a 2D ranking array.
The ranking_plot
function visualize the rankings.
import sctc # Load a 2D array of complexities. ranking_lists = convert_to_ranking(complexity_array) fig, ax = ranking_plot(ranking_lists)
fig
: matplotlib.figure.Figure.ax
: matplotlib.axes._subplots.AxesSubplot.The gene_proximity
function calculates gene proximity based on the gene expression matrix.
The gene_space
function constructs a gene space network using a spanning tree approach.
import sctc # Load your scRNA-seq gene expression matrix as a numpy array 'mcg' # mcg should have cells as rows and genes as columns gene_proxim = sctc.gene_proximity(mcg) gene_space = sctc.gene_space(gene_proxim)
gene_space
: An igraph object representing the maximum spanning tree.import scanpy as sc import numpy as np import igraph as ig import sctc import matplotlib.pyplot as plt # Load scRNA-seq data and ensure the count matrix is a numpy array adata = sc.read_h5ad('./data/hnd.h5ad') if not isinstance(adata.X, np.ndarray): adata.X = adata.X.toarray() # Preprocessing sc.pp.filter_cells(adata, min_genes=1) sc.pp.filter_genes(adata, min_cells=1) sc.pp.normalize_total(adata) sc.pp.log1p(adata) # Calculate Cell Complexity Index (CCI) and Gene Complexity Index (GCI) cci, gci = sctc.complexity_index(adata.X) # Calculate Nth-order complexity of cells (kcn) and genes (kgn) kcn, gcn = sctc.complexity_order(adata.X) # Choosing a subset of cells for visualization of cell ranking n_choice = 50 choice = np.random.choice(kcn.shape[1], n_choice, replace=False) choice_kc = kcn[:, choice] choice_cci = cci[choice] # Converting complexity scores to rankings N_list = list(range(0, 16, 2)) complexity_array = choice_kc[N_list] complexity_array = np.vstack([complexity_array, choice_cci]) complexity_array = np.transpose(complexity_array) ranking = sctc.convert_to_ranking(complexity_array) # Creating a color map cmap = plt.cm.get_cmap('Spectral', len(set(adata.obs['Day']))) cmap = [cmap(i) for i in range(len(set(adata.obs['Day'])))] cmap = dict(zip(adata.obs['Day'].unique(), cmap)) colors = [cmap[day] for day in adata.obs['Day'][choice]] # Plotting the ranking fig, ax = sctc.ranking_plot(ranking, colors, marker_size=20, line_width=2) fig.set_size_inches(7, 19) xticks = [] xticks.extend([str(i) for i in N_list]) xticks.append('CCI') ax.set_xticks(range(len(xticks))) ax.set_xticklabels(xticks) ax.set_xlabel('N') ax.set_ylabel('Index') plt.savefig('./results/ranking.png') # Selecting a subset of genes for visualization selected_indices = np.random.choice(adata.n_vars, 1500, replace=False) adata = adata[:, selected_indices].copy() # Creating a gene space network gene_proxim = sctc.gene_proximity(adata.X) gene_space = sctc.gene_space(gene_proxim) layout = gene_space.layout_fruchterman_reingold() gene_space.vs['size'] = 8 gene_space.vs['color'] = 'green' # Plotting the gene space network plot = ig.plot(gene_space, layout=layout) plot.save('./results/gene_space.png')
For more examples, please refer to the tutorials
Hai Lin, Huan Hu, Zhen Feng, Fei Xu, Jie Lyu, Xiang Li, Liyu Liu, Gen Yang, Jianwei Shuai, SCTC: inference of developmental potential from single-cell transcriptional complexity, Nucleic Acids Research, Volume 52, Issue 11, 24 June 2024, Pages 6114–6128, https://doi.org/10.1093/nar/gkae340
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4