Grn pyscenic
Skill BioTender-max/awesome-bio-agent-skills/skills/omicsclaw/grn-pyscenic
A curated collection of AI agent skills for biomedical research, covering genomics, proteomics, single-cell analysis, clinical AI, and protein design.
npx -y skills add BioTender-max/awesome-bio-agent-skills --skill grn-pyscenicAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
SKILL.md
15.5 KB, as published. Nobody here has run it
Gene Regulatory Network Inference (pySCENIC)
Infer gene regulatory networks (GRNs) de novo from single-cell RNA-seq data using pySCENIC. This workflow discovers transcription factor (TF) regulons directly from expression patterns and calculates cell-level TF activity scores.
When to Use This Skill
Use pySCENIC GRN inference when you need to:
- ✅ Discover TF-target relationships de novo from single-cell RNA-seq data
- ✅ Calculate cell-level TF activity scores for regulatory programs
- ✅ Identify cell-type-specific transcriptional programs
- ✅ Find key regulators driving cell state transitions or differentiation
- ✅ Compare regulatory programs across conditions, tissues, or species
Don't use this skill for:
- ❌ Bulk RNA-seq with few samples → Use functional-enrichment-from-degs or tf-activity workflows
- ❌ Quick TF activity from DE results → Use curated network approaches (faster, less computational)
- ❌ <500 cells → Insufficient for robust GRN inference
- ❌ Limited computational resources → Requires 16GB+ RAM, several hours runtime
Key Concept: Unlike curated network approaches, pySCENIC infers TF-target relationships directly from your data using co-expression analysis, then validates them using motif enrichment in cis-regulatory regions.
The SCENIC Pipeline:
- GRN Inference (GRNBoost2): Identify co-expression modules linking TFs to potential target genes
- Regulon Prediction (cisTarget): Prune targets to those with TF binding motifs in promoters
- Cell Activity Scoring (AUCell): Score each cell for regulon activity
Quick Start
Fastest way to test the workflow (~10-15 minutes):
# Step 1: Load example PBMC data (500 cells)
from load_example_data import load_pbmc3k_example
adata, ex_matrix = load_pbmc3k_example(preprocess=True, subsample=500)
# Step 2: Run complete GRN workflow
from run_grn_workflow import run_complete_grn_workflow
results = run_complete_grn_workflow(
ex_matrix=ex_matrix,
tf_list_file="pyscenic_databases/allTFs_hg38.txt",
database_glob="pyscenic_databases/*.feather",
motif_annotations_file="pyscenic_databases/motifs-v10nr_clust-nr.hgnc-m0.001-o0.0.tbl",
output_dir="scenic_test_results",
n_workers=4
)
# Step 3: Visualize and export
from integrate_with_adata import integrate_with_adata
from plot_regulon_visualizations import generate_all_visualizations
from export_all import export_all
adata = integrate_with_adata(adata, results['auc_matrix'], results['regulons'])
generate_all_visualizations(results['auc_matrix'], results['regulons'], adata,
output_dir="scenic_test_results/plots")
export_all(results['regulons'], results['auc_matrix'], results['auc_summary'],
results['adjacencies'], output_dir="scenic_test_results")
Expected output: 20-40 regulons, 13 output files (CSVs, plots, integrated H5AD)
Note: Requires databases to be downloaded first (see Installation → Reference Databases section).
Installation
Required Software
| Software | Version | License | Commercial Use | Installation |
|---|---|---|---|---|
| pySCENIC | ≥0.12.0 | GPL-3.0 | ✅ Permitted | pip install pyscenic |
| arboreto | ≥0.1.6 | BSD-3-Clause | ✅ Permitted | Installed with pySCENIC |
| ctxcore | ≥0.2.0 | GPL-3.0 | ✅ Permitted | Installed with pySCENIC |
| scanpy | ≥1.9 | BSD-3-Clause | ✅ Permitted | pip install scanpy |
| pandas | ≥1.3 | BSD-3-Clause | ✅ Permitted | pip install pandas |
| numpy | ≥1.20 | BSD-3-Clause | ✅ Permitted | pip install numpy |
| loompy | ≥3.0 | BSD-3-Clause | ✅ Permitted | pip install loompy |
| networkx | ≥2.6 | BSD-3-Clause | ✅ Permitted | pip install networkx |
| seaborn | ≥0.11 | BSD-3-Clause | ✅ Permitted | pip install seaborn |
| matplotlib | ≥3.4 | PSF-based | ✅ Permitted | pip install matplotlib |
| reportlab | ≥3.6 | BSD | ✅ Permitted | pip install reportlab |
Minimum Python version: Python ≥3.8
Quick install:
pip install pyscenic scanpy pandas numpy loompy networkx seaborn matplotlib reportlab
Note: pySCENIC automatically installs arboreto (for GRNBoost2) and ctxcore (for cisTarget) as dependencies.
Reference Databases (Required)
Download species-specific databases from SCENIC resources:
For human (hg38):
wget https://resources.aertslab.org/cistarget/databases/homo_sapiens/hg38/refseq_r80/mc_v10_clust/gene_based/hg38_10kbp_up_10kbp_down_full_tx_v10_clust.genes_vs_motifs.rankings.feather
wget https://resources.aertslab.org/cistarget/motif2tf/motifs-v10nr_clust-nr.hgnc-m0.001-o0.0.tbl
wget https://resources.aertslab.org/cistarget/tf_lists/allTFs_hg38.txt
For other species: See references/database_downloads.md
Database requirements:
- Motif ranking database (.feather format, ~1-2GB)
- Motif annotation file (.tbl format)
- TF list for your species
Inputs
Required Input
-
Single-cell expression matrix (one of):
- AnnData object (.h5ad) with raw or normalized counts
- Loom file (.loom)
- CSV/TSV matrix (genes × cells)
-
Reference databases (downloaded from SCENIC resources):
- Motif ranking database (e.g.,
hg38_10kbp_up_10kbp_down_full_tx_v10_clust.genes_vs_motifs.rankings.feather) - Motif annotation file (e.g.,
motifs-v10nr_clust-nr.hgnc-m0.001-o0.0.tbl) - TF list (e.g.,
allTFs_hg38.txt)
- Motif ranking database (e.g.,
Data Requirements
- Minimum cells: 500 (1,000+ recommended for robust GRN inference)
- Minimum genes: 2,000+ expressed genes
- Memory: 16GB+ RAM (more for large datasets)
- Runtime: 1-4 hours depending on dataset size
- QC: Apply basic quality filtering before SCENIC (remove low-quality cells/genes)
Outputs
Files Generated
Analysis objects (Pickle):
regulons.pkl- Regulon objects for downstream analysis- Load with:
regulons = pickle.load(open('regulons.pkl', 'rb')) - Required for: Downstream TF activity analysis, network visualization
- Load with:
auc_matrix.pkl- AUCell activity matrix (cells × regulons)- Load with:
auc_matrix = pickle.load(open('auc_matrix.pkl', 'rb'))
- Load with:
Results (CSV):
adjacencies.csv- Raw TF-target co-expression (GRNBoost2 output)regulons.csv- Final TF-target relationships after motif pruningaucell_matrix.csv- Cell × Regulon activity scores (values 0-1)aucell_summary.csv- Per-regulon statisticsscenic_regulon_summary.csv- Comprehensive regulon summary
Integrated data:
adata_with_scenic.h5ad- AnnData with integrated regulon activities
Visualizations (PNG + SVG):
regulon_heatmap.png/.svg- Top regulons by varianceregulon_network.png/.svg- TF-target network visualization
Reports:
scenic_report.md- Analysis summary with top regulonsscenic_analysis_report.pdf- Publication-quality PDF with Introduction, Methods, Results (embedded figures), Conclusions- Requires:
pip install reportlab(optional — markdown report generated regardless)
- Requires:
Clarification Questions
Before running, confirm:
-
Input Files (ASK THIS FIRST):
- Do you have single-cell RNA-seq data to analyze?
- If uploaded: Is this the .h5ad/.loom/matrix file you'd like to use?
- Expected formats: AnnData (.h5ad), Loom (.loom), CSV/TSV matrix
- Or use example/demo data? Use
load_example_data.pyfor PBMC 3k (~2,700 cells, 30-45 min test)
-
Species?
- Human (hg38) - most common, databases readily available
- Mouse (mm10) - databases available
- Other species - check database availability first
-
Dataset size?
- 500-2,000 cells → Minimum viable, ~1-2 hours
- 2,000-10,000 cells → Good, ~2-3 hours
- 10,000+ cells → Excellent, may need subsampling, 3-4 hours
-
Do you have the cisTarget databases downloaded?
- Yes → Provide paths to .feather, .tbl, and TF list files
- No → Will download during setup (~2-3GB, 10-15 min)
-
What outputs do you need?
- Regulons only (TF-target relationships)
- AUCell scores (cell-level TF activity)
- Both with visualizations (recommended)
Standard Workflow
Note: Run from the OmicsClaw root directory and add the workflow scripts to
sys.path:import sys; import os; sys.path.insert(0, os.path.abspath('knowledge_base/scripts/grn-pyscenic'))
🚨 MANDATORY: USE SCRIPTS EXACTLY AS SHOWN - DO NOT WRITE INLINE CODE 🚨
Step 1 - Load data and run GRN inference:
# Load expression data
# Option A: Load your own data
from load_expression_data import load_expression_data
adata, ex_matrix = load_expression_data("scrnaseq_data.h5ad")
# Option B: Load example PBMC 3k data for testing
# from load_example_data import load_pbmc3k_example
# adata, ex_matrix = load_pbmc3k_example()
# Run GRN inference with GRNBoost2
from run_grn_workflow import run_complete_grn_workflow
results = run_complete_grn_workflow(
ex_matrix=ex_matrix,
tf_list_file="allTFs_hg38.txt",
database_glob="pyscenic_databases/*.feather",
motif_annotations_file="pyscenic_databases/motifs-v10nr_clust-nr.hgnc-m0.001-o0.0.tbl",
output_dir="scenic_results"
)
DO NOT write inline GRNBoost2, cisTarget, or AUCell code. Use the script.
✅ VERIFICATION: You should see:
"✓ Data loaded successfully: X cells, Y genes""✓ GRN inference completed: X TF-target pairs""✓ cisTarget pruning completed: X regulons""✓ AUCell scoring completed"
Step 2 - Integrate with AnnData:
from integrate_with_adata import integrate_with_adata
adata = integrate_with_adata(
adata,
results['auc_matrix'],
results['regulons'],
output_file="scenic_results/adata_with_scenic.h5ad"
)
✅ VERIFICATION: "✓ Integration completed: regulon activities added to adata.obsm['X_aucell']"
Step 3 - Generate visualizations:
from plot_regulon_visualizations import generate_all_visualizations
generate_all_visualizations(
results['auc_matrix'],
results['regulons'],
adata,
top_n=20,
output_dir="scenic_results/plots"
)
🚨 DO NOT write inline plotting code (matplotlib, seaborn, etc.). Just use the script. 🚨
The script handles PNG + SVG export with graceful fallback.
✅ VERIFICATION: "✓ All visualizations generated successfully!"
Step 4 - Export results:
from export_all import export_all
export_all(
regulons=results['regulons'],
auc_matrix=results['auc_matrix'],
auc_summary=results['auc_summary'],
adjacencies=results['adjacencies'],
output_dir="scenic_results"
)
DO NOT write custom export code. Use export_all().
✅ VERIFICATION: "=== Export Complete ==="
Note: If reportlab is installed, a PDF report (scenic_analysis_report.pdf) is also generated.
⚠️ CRITICAL - DO NOT:
- ❌ Write inline GRNBoost2/cisTarget code → STOP: Use
run_complete_grn_workflow() - ❌ Write inline plotting code → STOP: Use
generate_all_visualizations() - ❌ Write custom export code → STOP: Use
export_all() - ❌ Try to install system dependencies → Script checks availability
⚠️ IF SCRIPTS FAIL - Script Failure Hierarchy:
- Fix and Retry (90%) - Install missing package, re-run script
- Modify Script (5%) - Edit the script file itself, document changes
- Use as Reference (4%) - Read script, adapt approach, cite source
- Write from Scratch (1%) - Only if genuinely impossible, explain why
NEVER skip directly to writing inline code without trying the script first.
Common Issues
| Error | Cause | Solution |
|---|---|---|
| Memory error during GRNBoost2 | Dataset too large | Subsample to 5,000-10,000 cells or filter to top 2,000-5,000 variable genes |
| No regulons found | TF names don't match gene symbols | Check TF list uses same nomenclature (HGNC/MGI); verify gene names in data |
| cisTarget database error | Wrong format or corrupted file | Re-download databases; ensure using Feather v2 format (.feather) |
| Very slow GRN inference | Too many genes or single-threaded | Filter to variable genes; increase n_workers parameter (4-8 recommended) |
| AUCell scores all low | Poor regulon quality or normalization | Check regulon sizes (need 10+ genes); verify input is normalized counts |
| Database loading fails | Path incorrect or file not found | Use absolute paths to databases; verify files exist |
| SVG export error | Missing optional dependency | Normal - script falls back to PNG automatically. Both formats will be created. |
| NumPy AttributeError: np.object | Incompatible NumPy version | Install NumPy <1.24: pip install 'numpy<1.24.0' - pySCENIC 0.12.1 requires NumPy 1.20-1.23 |
| TypeError: Must supply at least one delayed object | Incompatible Dask version | Install Dask 2023.5.0: pip install 'dask[complete]==2023.5.0' 'distributed==2023.5.0' and uninstall dask-expr if present |
Suggested Next Steps
After completing pySCENIC analysis:
- Identify key regulators: Focus on high-variance regulons with cell-type-specific activity
- Validate regulons: Compare with literature, ChIP-seq data, or perturbation experiments
- Downstream analysis:
- Differential regulon activity between conditions (Scanpy/Seurat)
- Trajectory analysis with regulon dynamics (RNA velocity + SCENIC)
- Integration with other modalities (ATAC-seq, ChIP-seq)
- Functional enrichment: Analyze target genes of top regulons
- Network analysis: Identify TF-TF interactions and regulatory hierarchies
Related Skills
- scrnaseq-scanpy-core-analysis - Upstream: Single-cell preprocessing and clustering
- scrnaseq-seurat-core-analysis - Upstream: Alternative single-cell preprocessing (R)
- functional-enrichment-from-degs - Related: Pathway analysis of regulon targets
- de-results-to-plots - Related: Visualizing differential activity results
References
- Aibar et al. (2017). SCENIC: single-cell regulatory network inference and clustering. Nature Methods. doi:10.1038/nmeth.4463
- Van de Sande et al. (2020). A scalable SCENIC workflow for single-cell gene regulatory network analysis. Nature Protocols. doi:10.1038/s41596-020-0336-2
- Huynh-Thu et al. (2010). Inferring regulatory networks from expression data using tree-based methods. PLoS ONE. doi:10.1371/journal.pone.0012776
- pySCENIC Documentation: https://pyscenic.readthedocs.io/
- SCENIC Resources: https://resources.aertslab.org/cistarget/