
Scanpy Singlecell
- 14 installs
- 869 repo stars
- Updated June 8, 2026
- beita6969/scienceclaw
scanpy-singlecell is a skill for single-cell RNA-seq analysis using scanpy and anndata, covering preprocessing, clustering, differential expression, and visualization.
About
Scanpy-singlecell is a skill for single-cell RNA-seq analysis using the scanpy and anndata Python libraries. It guides preprocessing and QC, clustering and cell-type annotation, differential expression, trajectory inference, and UMAP/tSNE visualization. A developer uses it when analyzing scRNA-seq datasets and following scanpy best practices.
- Single-cell RNA-seq analysis with scanpy and anndata
- Covers QC, normalization, PCA, neighbors, UMAP/tSNE, Leiden/Louvain clustering
- Differential expression with Wilcoxon and trajectory/pseudotime (diffmap, DPT, PAGA)
Scanpy Singlecell by the numbers
- 14 all-time installs (skills.sh)
- Ranked #1,388 of 2,065 Data Science & ML skills by installs in the Skillselion catalog
- Data as of Aug 2, 2026 (Skillselion catalog sync)
scanpy-singlecell capabilities & compatibility
- Capabilities
- data analysis
- Use cases
- data analysis
What scanpy-singlecell says it does
Single-cell RNA-seq analysis using scanpy and anndata for preprocessing,
Prefer Leiden over Louvain clustering (better modularity optimization).
Use Wilcoxon rank-sum for DE; it is robust and non-parametric.
npx skills add https://github.com/beita6969/scienceclaw --skill scanpy-singlecellAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 14 |
|---|---|
| repo stars | ★ 869 |
| Last updated | June 8, 2026 |
| Repository | beita6969/scienceclaw ↗ |
What it does
Analyze single-cell RNA-seq data end to end with scanpy: QC, clustering, differential expression, and visualization.
Who is it for?
scRNA-seq preprocessing, clustering, differential expression, and trajectory analysis with scanpy.
Skip if: Bulk RNA-seq differential expression (use DESeq2/edgeR), protein structure analysis, or general-purpose statistics.
When should I use this skill?
You are doing scRNA-seq QC, clustering, cell-type annotation, differential expression, or pseudotime work.
What you get
A reproducible scanpy pipeline from QC through clustering, differential expression, and UMAP/tSNE figures.
- Clustered scRNA-seq object
- Differential expression tables
- UMAP/tSNE and marker-gene figures
By the numbers
- 8 documented best-practice steps
- Filters cells to pct_counts_mt < 20 and min_genes=200
Files
Scanpy Single-Cell Analysis
Single-cell RNA-seq analysis using scanpy and anndata for preprocessing, clustering, differential expression, and visualization.
When to Use
- scRNA-seq data preprocessing and quality control
- Cell clustering and cell type annotation
- Differential expression between cell groups
- Trajectory inference and pseudotime analysis
- Dimensionality reduction visualization (UMAP, tSNE)
- Integration of multiple scRNA-seq datasets
When NOT to Use
- Bulk RNA-seq differential expression (use DESeq2 or edgeR)
- Protein structure prediction or analysis (use pdb-structure)
- Imaging or spatial transcriptomics without companion tools
- General-purpose statistics (use scipy-analysis)
Reading Data and Preprocessing
import scanpy as sc
# Read data: h5ad, 10x mtx, or 10x h5
adata = sc.read_h5ad('dataset.h5ad')
adata = sc.read_10x_mtx('filtered_feature_bc_matrix/', var_names='gene_symbols')
# QC filtering
sc.pp.filter_cells(adata, min_genes=200)
sc.pp.filter_genes(adata, min_cells=3)
adata.var['mt'] = adata.var_names.str.startswith('MT-')
sc.pp.calculate_qc_metrics(adata, qc_vars=['mt'], percent_top=None, inplace=True)
adata = adata[adata.obs.pct_counts_mt < 20, :]
# Normalize, log-transform, select HVGs
sc.pp.normalize_total(adata, target_sum=1e4)
sc.pp.log1p(adata)
adata.raw = adata # preserve full gene set for DE
sc.pp.highly_variable_genes(adata, min_mean=0.0125, max_mean=3, min_disp=0.5)
adata = adata[:, adata.var.highly_variable]
sc.pp.scale(adata, max_value=10)Dimensionality Reduction and Clustering
# PCA
sc.tl.pca(adata, svd_solver='arpack', n_comps=50)
sc.pl.pca_variance_ratio(adata, n_pcs=50, log=True)
# Neighborhood graph and clustering
sc.pp.neighbors(adata, n_neighbors=15, n_pcs=40)
sc.tl.umap(adata)
sc.tl.leiden(adata, resolution=0.5)
# Alternative: Louvain clustering
sc.tl.louvain(adata, resolution=0.8)
# tSNE (alternative to UMAP)
sc.tl.tsne(adata, n_pcs=40)Differential Expression
# Rank genes per cluster (Wilcoxon is recommended)
sc.tl.rank_genes_groups(adata, groupby='leiden', method='wilcoxon', use_raw=True)
sc.pl.rank_genes_groups(adata, n_genes=20, sharey=False)
# Extract DE results as DataFrame
result = adata.uns['rank_genes_groups']
de_df = sc.get.rank_genes_groups_df(adata, group='0')
de_df_filtered = de_df[(de_df['pvals_adj'] < 0.05) & (de_df['logfoldchanges'].abs() > 1)]
# Compare specific groups
sc.tl.rank_genes_groups(adata, groupby='leiden', groups=['0'], reference='1',
method='wilcoxon', use_raw=True)Visualization
# UMAP colored by cluster
sc.pl.umap(adata, color=['leiden'], frameon=False, save='_clusters.pdf')
# UMAP colored by gene expression
sc.pl.umap(adata, color=['CST3', 'NKG7', 'MS4A1'], frameon=False)
# Dot plot for marker genes across clusters
marker_genes = ['CD3D', 'CD79A', 'CST3', 'NKG7', 'PPBP']
sc.pl.dotplot(adata, marker_genes, groupby='leiden', save='_markers.pdf')
# Stacked violin plot
sc.pl.stacked_violin(adata, marker_genes, groupby='leiden', rotation=90)
# Heatmap of top DE genes
sc.pl.rank_genes_groups_heatmap(adata, n_genes=5, groupby='leiden', show_gene_labels=True)
# Matrix plot
sc.pl.matrixplot(adata, marker_genes, groupby='leiden', standard_scale='var')Trajectory Analysis
# Diffusion map and pseudotime
sc.tl.diffmap(adata)
sc.tl.dpt(adata, n_dcs=10)
# PAGA (partition-based graph abstraction)
sc.tl.paga(adata, groups='leiden')
sc.pl.paga(adata, plot=True, threshold=0.03)
sc.tl.umap(adata, init_pos='paga')Best Practices
1. Always start with QC: filter low-quality cells and doublets before analysis. 2. Use adata.raw to preserve full gene set for DE testing after subsetting HVGs. 3. Prefer Leiden over Louvain clustering (better modularity optimization). 4. Use Wilcoxon rank-sum for DE; it is robust and non-parametric. 5. Save intermediate results with adata.write('checkpoint.h5ad'). 6. Set sc.settings.figdir and use save= parameter for reproducible figures. 7. Use sc.logging.print_versions() to record environment for reproducibility. 8. Adjust resolution parameter in Leiden to control cluster granularity.
Related skills
FAQ
What libraries does scanpy-singlecell use?
It uses the scanpy and anndata Python libraries, installed via uv (package: scanpy anndata).
When should I not use scanpy-singlecell?
Not for bulk RNA-seq differential expression (use DESeq2 or edgeR), protein structure analysis, or general-purpose statistics.