{"id":"771d1431-37e8-4ea8-a7e8-3f81136f4af9","shortId":"tTPNHS","kind":"skill","title":"scanpy","tagline":"Scanpy is a scalable Python toolkit for analyzing single-cell RNA-seq data, built on AnnData. Apply this skill for complete single-cell workflows including quality control, normalization, dimensionality reduction, clustering, marker gene identification, visualization, and traject","description":"# Scanpy: Single-Cell Analysis\n\n## Overview\n\nScanpy is a scalable Python toolkit for analyzing single-cell RNA-seq data, built on AnnData. Apply this skill for complete single-cell workflows including quality control, normalization, dimensionality reduction, clustering, marker gene identification, visualization, and trajectory analysis.\n\n## When to Use This Skill\n\nThis skill should be used when:\n- Analyzing single-cell RNA-seq data (.h5ad, 10X, CSV formats)\n- Performing quality control on scRNA-seq datasets\n- Creating UMAP, t-SNE, or PCA visualizations\n- Identifying cell clusters and finding marker genes\n- Annotating cell types based on gene expression\n- Conducting trajectory inference or pseudotime analysis\n- Generating publication-quality single-cell plots\n\n## Quick Start\n\n### Basic Import and Setup\n\n```python\nimport scanpy as sc\nimport pandas as pd\nimport numpy as np\n\n# Configure settings\nsc.settings.verbosity = 3\nsc.settings.set_figure_params(dpi=80, facecolor='white')\nsc.settings.figdir = './figures/'\n```\n\n### Loading Data\n\n```python\n# From 10X Genomics\nadata = sc.read_10x_mtx('path/to/data/')\nadata = sc.read_10x_h5('path/to/data.h5')\n\n# From h5ad (AnnData format)\nadata = sc.read_h5ad('path/to/data.h5ad')\n\n# From CSV\nadata = sc.read_csv('path/to/data.csv')\n```\n\n### Understanding AnnData Structure\n\nThe AnnData object is the core data structure in scanpy:\n\n```python\nadata.X          # Expression matrix (cells × genes)\nadata.obs        # Cell metadata (DataFrame)\nadata.var        # Gene metadata (DataFrame)\nadata.uns        # Unstructured annotations (dict)\nadata.obsm       # Multi-dimensional cell data (PCA, UMAP)\nadata.raw        # Raw data backup\n\n# Access cell and gene names\nadata.obs_names  # Cell barcodes\nadata.var_names  # Gene names\n```\n\n## Standard Analysis Workflow\n\n### 1. Quality Control\n\nIdentify and filter low-quality cells and genes:\n\n```python\n# Identify mitochondrial genes\nadata.var['mt'] = adata.var_names.str.startswith('MT-')\n\n# Calculate QC metrics\nsc.pp.calculate_qc_metrics(adata, qc_vars=['mt'], inplace=True)\n\n# Visualize QC metrics\nsc.pl.violin(adata, ['n_genes_by_counts', 'total_counts', 'pct_counts_mt'],\n             jitter=0.4, multi_panel=True)\n\n# Filter cells and genes\nsc.pp.filter_cells(adata, min_genes=200)\nsc.pp.filter_genes(adata, min_cells=3)\nadata = adata[adata.obs.pct_counts_mt < 5, :]  # Remove high MT% cells\n```\n\n**Use the QC script for automated analysis:**\n```bash\npython scripts/qc_analysis.py input_file.h5ad --output filtered.h5ad\n```\n\n### 2. Normalization and Preprocessing\n\n```python\n# Normalize to 10,000 counts per cell\nsc.pp.normalize_total(adata, target_sum=1e4)\n\n# Log-transform\nsc.pp.log1p(adata)\n\n# Save raw counts for later\nadata.raw = adata\n\n# Identify highly variable genes\nsc.pp.highly_variable_genes(adata, n_top_genes=2000)\nsc.pl.highly_variable_genes(adata)\n\n# Subset to highly variable genes\nadata = adata[:, adata.var.highly_variable]\n\n# Regress out unwanted variation\nsc.pp.regress_out(adata, ['total_counts', 'pct_counts_mt'])\n\n# Scale data\nsc.pp.scale(adata, max_value=10)\n```\n\n### 3. Dimensionality Reduction\n\n```python\n# PCA\nsc.tl.pca(adata, svd_solver='arpack')\nsc.pl.pca_variance_ratio(adata, log=True)  # Check elbow plot\n\n# Compute neighborhood graph\nsc.pp.neighbors(adata, n_neighbors=10, n_pcs=40)\n\n# UMAP for visualization\nsc.tl.umap(adata)\nsc.pl.umap(adata, color='leiden')\n\n# Alternative: t-SNE\nsc.tl.tsne(adata)\n```\n\n### 4. Clustering\n\n```python\n# Leiden clustering (recommended)\nsc.tl.leiden(adata, resolution=0.5)\nsc.pl.umap(adata, color='leiden', legend_loc='on data')\n\n# Try multiple resolutions to find optimal granularity\nfor res in [0.3, 0.5, 0.8, 1.0]:\n    sc.tl.leiden(adata, resolution=res, key_added=f'leiden_{res}')\n```\n\n### 5. Marker Gene Identification\n\n```python\n# Find marker genes for each cluster\nsc.tl.rank_genes_groups(adata, 'leiden', method='wilcoxon')\n\n# Visualize results\nsc.pl.rank_genes_groups(adata, n_genes=25, sharey=False)\nsc.pl.rank_genes_groups_heatmap(adata, n_genes=10)\nsc.pl.rank_genes_groups_dotplot(adata, n_genes=5)\n\n# Get results as DataFrame\nmarkers = sc.get.rank_genes_groups_df(adata, group='0')\n```\n\n### 6. Cell Type Annotation\n\n```python\n# Define marker genes for known cell types\nmarker_genes = ['CD3D', 'CD14', 'MS4A1', 'NKG7', 'FCGR3A']\n\n# Visualize markers\nsc.pl.umap(adata, color=marker_genes, use_raw=True)\nsc.pl.dotplot(adata, var_names=marker_genes, groupby='leiden')\n\n# Manual annotation\ncluster_to_celltype = {\n    '0': 'CD4 T cells',\n    '1': 'CD14+ Monocytes',\n    '2': 'B cells',\n    '3': 'CD8 T cells',\n}\nadata.obs['cell_type'] = adata.obs['leiden'].map(cluster_to_celltype)\n\n# Visualize annotated types\nsc.pl.umap(adata, color='cell_type', legend_loc='on data')\n```\n\n### 7. Save Results\n\n```python\n# Save processed data\nadata.write('results/processed_data.h5ad')\n\n# Export metadata\nadata.obs.to_csv('results/cell_metadata.csv')\nadata.var.to_csv('results/gene_metadata.csv')\n```\n\n## Common Tasks\n\n### Creating Publication-Quality Plots\n\n```python\n# Set high-quality defaults\nsc.settings.set_figure_params(dpi=300, frameon=False, figsize=(5, 5))\nsc.settings.file_format_figs = 'pdf'\n\n# UMAP with custom styling\nsc.pl.umap(adata, color='cell_type',\n           palette='Set2',\n           legend_loc='on data',\n           legend_fontsize=12,\n           legend_fontoutline=2,\n           frameon=False,\n           save='_publication.pdf')\n\n# Heatmap of marker genes\nsc.pl.heatmap(adata, var_names=genes, groupby='cell_type',\n              swap_axes=True, show_gene_labels=True,\n              save='_markers.pdf')\n\n# Dot plot\nsc.pl.dotplot(adata, var_names=genes, groupby='cell_type',\n              save='_dotplot.pdf')\n```\n\nRefer to `references/plotting_guide.md` for comprehensive visualization examples.\n\n### Trajectory Inference\n\n```python\n# PAGA (Partition-based graph abstraction)\nsc.tl.paga(adata, groups='leiden')\nsc.pl.paga(adata, color='leiden')\n\n# Diffusion pseudotime\nadata.uns['iroot'] = np.flatnonzero(adata.obs['leiden'] == '0')[0]\nsc.tl.dpt(adata)\nsc.pl.umap(adata, color='dpt_pseudotime')\n```\n\n### Differential Expression Between Conditions\n\n```python\n# Compare treated vs control within cell types\nadata_subset = adata[adata.obs['cell_type'] == 'T cells']\nsc.tl.rank_genes_groups(adata_subset, groupby='condition',\n                         groups=['treated'], reference='control')\nsc.pl.rank_genes_groups(adata_subset, groups=['treated'])\n```\n\n### Gene Set Scoring\n\n```python\n# Score cells for gene set expression\ngene_set = ['CD3D', 'CD3E', 'CD3G']\nsc.tl.score_genes(adata, gene_set, score_name='T_cell_score')\nsc.pl.umap(adata, color='T_cell_score')\n```\n\n### Batch Correction\n\n```python\n# ComBat batch correction\nsc.pp.combat(adata, key='batch')\n\n# Alternative: use Harmony or scVI (separate packages)\n```\n\n## Key Parameters to Adjust\n\n### Quality Control\n- `min_genes`: Minimum genes per cell (typically 200-500)\n- `min_cells`: Minimum cells per gene (typically 3-10)\n- `pct_counts_mt`: Mitochondrial threshold (typically 5-20%)\n\n### Normalization\n- `target_sum`: Target counts per cell (default 1e4)\n\n### Feature Selection\n- `n_top_genes`: Number of HVGs (typically 2000-3000)\n- `min_mean`, `max_mean`, `min_disp`: HVG selection parameters\n\n### Dimensionality Reduction\n- `n_pcs`: Number of principal components (check variance ratio plot)\n- `n_neighbors`: Number of neighbors (typically 10-30)\n\n### Clustering\n- `resolution`: Clustering granularity (0.4-1.2, higher = more clusters)\n\n## Common Pitfalls and Best Practices\n\n1. **Always save raw counts**: `adata.raw = adata` before filtering genes\n2. **Check QC plots carefully**: Adjust thresholds based on dataset quality\n3. **Use Leiden over Louvain**: More efficient and better results\n4. **Try multiple clustering resolutions**: Find optimal granularity\n5. **Validate cell type annotations**: Use multiple marker genes\n6. **Use `use_raw=True` for gene expression plots**: Shows original counts\n7. **Check PCA variance ratio**: Determine optimal number of PCs\n8. **Save intermediate results**: Long workflows can fail partway through\n\n## Bundled Resources\n\n### scripts/qc_analysis.py\nAutomated quality control script that calculates metrics, generates plots, and filters data:\n\n```bash\npython scripts/qc_analysis.py input.h5ad --output filtered.h5ad \\\n    --mt-threshold 5 --min-genes 200 --min-cells 3\n```\n\n### references/standard_workflow.md\nComplete step-by-step workflow with detailed explanations and code examples for:\n- Data loading and setup\n- Quality control with visualization\n- Normalization and scaling\n- Feature selection\n- Dimensionality reduction (PCA, UMAP, t-SNE)\n- Clustering (Leiden, Louvain)\n- Marker gene identification\n- Cell type annotation\n- Trajectory inference\n- Differential expression\n\nRead this reference when performing a complete analysis from scratch.\n\n### references/api_reference.md\nQuick reference guide for scanpy functions organized by module:\n- Reading/writing data (`sc.read_*`, `adata.write_*`)\n- Preprocessing (`sc.pp.*`)\n- Tools (`sc.tl.*`)\n- Plotting (`sc.pl.*`)\n- AnnData structure and manipulation\n- Settings and utilities\n\nUse this for quick lookup of function signatures and common parameters.\n\n### references/plotting_guide.md\nComprehensive visualization guide including:\n- Quality control plots\n- Dimensionality reduction visualizations\n- Clustering visualizations\n- Marker gene plots (heatmaps, dot plots, violin plots)\n- Trajectory and pseudotime plots\n- Publication-quality customization\n- Multi-panel figures\n- Color palettes and styling\n\nConsult this when creating publication-ready figures.\n\n### assets/analysis_template.py\nComplete analysis template providing a full workflow from data loading through cell type annotation. Copy and customize this template for new analyses:\n\n```bash\ncp assets/analysis_template.py my_analysis.py\n# Edit parameters and run\npython my_analysis.py\n```\n\nThe template includes all standard steps with configurable parameters and helpful comments.\n\n## Additional Resources\n\n- **Official scanpy documentation**: https://scanpy.readthedocs.io/\n- **Scanpy tutorials**: https://scanpy-tutorials.readthedocs.io/\n- **scverse ecosystem**: https://scverse.org/ (related tools: squidpy, scvi-tools, cellrank)\n- **Best practices**: Luecken & Theis (2019) \"Current best practices in single-cell RNA-seq\"\n\n## Tips for Effective Analysis\n\n1. **Start with the template**: Use `assets/analysis_template.py` as a starting point\n2. **Run QC script first**: Use `scripts/qc_analysis.py` for initial filtering\n3. **Consult references as needed**: Load workflow and API references into context\n4. **Iterate on clustering**: Try multiple resolutions and visualization methods\n5. **Validate biologically**: Check marker genes match expected cell types\n6. **Document parameters**: Record QC thresholds and analysis settings\n7. **Save checkpoints**: Write intermediate results at key steps\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["scanpy","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity-skills"],"capabilities":["skill","source-sickn33","skill-scanpy","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/scanpy","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34583 github stars · SKILL.md body (11,212 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T18:52:10.841Z","embedding":null,"createdAt":"2026-04-18T21:43:54.807Z","updatedAt":"2026-04-22T18:52:10.841Z","lastSeenAt":"2026-04-22T18:52:10.841Z","tsv":"'-1.2':977 '-10':914 '-20':922 '-30':971 '-3000':942 '-500':905 '/figures':187 '0':585,628,796,797 '0.3':516 '0.4':324,976 '0.5':497,517 '0.8':518 '000':376 '1':277,632,986,1322 '1.0':519 '10':375,442,469,565,970 '10x':109,192,196,201 '12':724 '1e4':385,931 '2':368,635,727,996,1333 '200':337,904,1094 '2000':410,941 '2019':1307 '25':555 '3':178,343,443,638,913,1007,1098,1343 '300':697 '4':488,1017,1355 '40':472 '5':349,529,573,701,702,921,1025,1090,1365 '6':586,1034,1375 '7':663,1046,1384 '8':1056 '80':183 'abstract':780 'access':261 'ad':525 'adata':194,199,208,214,303,313,334,340,344,345,382,391,398,406,414,420,421,430,439,449,456,466,477,479,487,495,499,521,543,552,562,570,583,608,616,655,712,737,756,782,786,799,801,817,819,828,839,860,869,881,992 'adata.obs':237,266,642,645,794,820 'adata.obs.pct':346 'adata.obs.to':674 'adata.obsm':249 'adata.raw':257,397,991 'adata.uns':245,791 'adata.var':241,270,293 'adata.var.highly':422 'adata.var.to':677 'adata.var_names.str.startswith':295 'adata.write':670,1169 'adata.x':232 'addit':1284 'adjust':894,1001 'altern':482,884 'alway':987 'analys':1261 'analysi':46,88,147,275,360,1153,1241,1321,1382 'analyz':9,55,100 'anndata':19,65,206,219,222,1176 'annot':135,247,589,624,652,1029,1141,1253 'api':1351 'appli':20,66 'arpack':452 'ask':1426 'assets/analysis_template.py':1239,1264,1328 'autom':359,1069 'axe':745 'b':636 'backup':260 'barcod':269 'base':138,778,1003 'bash':361,1081,1262 'basic':158 'batch':874,878,883 'best':984,1303,1309 'better':1015 'biolog':1367 'boundari':1434 'built':17,63 'bundl':1066 'calcul':297,1074 'care':1000 'cd14':601,633 'cd3d':600,855 'cd3e':856 'cd3g':857 'cd4':629 'cd8':639 'cell':12,27,45,58,73,103,129,136,154,235,238,253,262,268,286,329,333,342,353,379,587,596,631,637,641,643,657,714,742,761,815,821,824,848,866,872,902,907,909,929,1027,1097,1139,1251,1314,1373 'cellrank':1302 'celltyp':627,650 'check':459,960,997,1047,1368 'checkpoint':1386 'clarif':1428 'clear':1401 'cluster':35,81,130,489,492,539,625,648,972,974,980,1020,1133,1205,1358 'code':1110 'color':480,500,609,656,713,787,802,870,1227 'combat':877 'comment':1283 'common':680,981,1192 'compar':810 'complet':24,70,1100,1152,1240 'compon':959 'comprehens':769,1195 'comput':462 'condit':808,831 'conduct':142 'configur':175,1279 'consult':1231,1344 'context':1354 'control':31,77,114,279,813,835,896,1071,1118,1200 'copi':1254 'core':226 'correct':875,879 'count':317,319,321,347,377,394,432,434,916,927,990,1045 'cp':1263 'creat':120,682,1234 'criteria':1437 'csv':110,213,216,675,678 'current':1308 'custom':709,1222,1256 'data':16,62,107,189,227,254,259,437,505,662,669,721,1080,1113,1167,1248 'datafram':240,244,577 'dataset':119,1005 'default':692,930 'defin':591 'describ':1405 'detail':1107 'determin':1051 'df':582 'dict':248 'differenti':805,1144 'diffus':789 'dimension':33,79,252,444,952,1126,1202 'disp':948 'document':1288,1376 'dot':753,1211 'dotplot':569 'dotplot.pdf':764 'dpi':182,696 'dpt':803 'ecosystem':1294 'edit':1266 'effect':1320 'effici':1013 'elbow':460 'environ':1417 'environment-specif':1416 'exampl':771,1111 'expect':1372 'expert':1422 'explan':1108 'export':672 'express':141,233,806,852,1041,1145 'f':526 'facecolor':184 'fail':1063 'fals':557,699,729 'fcgr3a':604 'featur':932,1124 'fig':705 'figsiz':700 'figur':180,694,1226,1238 'file.h5ad':365 'filter':282,328,994,1079,1342 'filtered.h5ad':367,1086 'find':132,510,534,1022 'first':1337 'fontoutlin':726 'fontsiz':723 'format':111,207,704 'frameon':698,728 'full':1245 'function':1162,1189 'gene':37,83,134,140,236,242,264,272,288,292,315,331,336,339,402,405,409,413,419,531,536,541,550,554,559,564,567,572,580,593,599,611,620,735,740,748,759,826,837,843,850,853,859,861,898,900,911,936,995,1033,1040,1093,1137,1208,1370 'generat':148,1076 'genom':193 'get':574 'granular':512,975,1024 'graph':464,779 'group':542,551,560,568,581,584,783,827,832,838,841 'groupbi':621,741,760,830 'guid':1159,1197 'h5':202 'h5ad':108,205,210 'harmoni':886 'heatmap':561,732,1210 'help':1282 'high':351,400,417,690 'high-qual':689 'higher':978 'hvg':949 'hvgs':939 'identif':38,84,532,1138 'identifi':128,280,290,399 'import':159,163,167,171 'includ':29,75,1198,1274 'infer':144,773,1143 'initi':1341 'inplac':307 'input':364,1431 'input.h5ad':1084 'intermedi':1058,1388 'iroot':792 'iter':1356 'jitter':323 'key':524,882,891,1391 'known':595 'label':749 'later':396 'legend':502,659,718,722,725 'leiden':481,491,501,527,544,622,646,784,788,795,1009,1134 'limit':1393 'load':188,1114,1249,1348 'loc':503,660,719 'log':387,457 'log-transform':386 'log1p':390 'long':1060 'lookup':1187 'louvain':1011,1135 'low':284 'low-qual':283 'luecken':1305 'manipul':1179 'manual':623 'map':647 'marker':36,82,133,530,535,578,592,598,606,610,619,734,1032,1136,1207,1369 'markers.pdf':752 'match':1371,1402 'matrix':234 'max':440,945 'mean':944,946 'metadata':239,243,673 'method':545,1364 'metric':299,302,311,1075 'min':335,341,897,906,943,947,1092,1096 'min-cel':1095 'min-gen':1091 'minimum':899,908 'miss':1439 'mitochondri':291,918 'modul':1165 'monocyt':634 'ms4a1':602 'mt':294,296,306,322,348,352,435,917,1088 'mt-threshold':1087 'mtx':197 'multi':251,325,1224 'multi-dimension':250 'multi-panel':1223 'multipl':507,1019,1031,1360 'my_analysis.py':1265,1271 'n':314,407,467,470,553,563,571,934,954,964 'name':265,267,271,273,618,739,758,864 'need':1347 'neighbor':468,965,968 'neighborhood':463 'new':1260 'nkg7':603 'normal':32,78,369,373,923,1121 'np':174 'np.flatnonzero':793 'number':937,956,966,1053 'numpi':172 'object':223 'offici':1286 'optim':511,1023,1052 'organ':1163 'origin':1044 'output':366,1085,1411 'overview':47 'packag':890 'paga':775 'palett':716,1228 'panda':168 'panel':326,1225 'param':181,695 'paramet':892,951,1193,1267,1280,1377 'partit':777 'partition-bas':776 'partway':1064 'path/to/data':198 'path/to/data.csv':217 'path/to/data.h5':203 'path/to/data.h5ad':211 'pca':126,255,447,1048,1128 'pcs':471,955,1055 'pct':320,433,915 'pd':170 'pdf':706 'per':378,901,910,928 'perform':112,1150 'permiss':1432 'pitfal':982 'plot':155,461,686,754,963,999,1042,1077,1174,1201,1209,1212,1214,1218 'point':1332 'practic':985,1304,1310 'preprocess':371,1170 'princip':958 'process':668 'provid':1243 'pseudotim':146,790,804,1217 'public':150,684,1220,1236 'publication-qu':149,683,1219 'publication-readi':1235 'publication.pdf':731 'python':6,52,162,190,231,289,362,372,446,490,533,590,666,687,774,809,846,876,1082,1270 'qc':298,301,304,310,356,998,1335,1379 'qualiti':30,76,113,151,278,285,685,691,895,1006,1070,1117,1199,1221 'quick':156,1157,1186 'ratio':455,962,1050 'raw':258,393,613,989,1037 'read':1146 'readi':1237 'reading/writing':1166 'recommend':493 'record':1378 'reduct':34,80,445,953,1127,1203 'refer':765,834,1148,1158,1345,1352 'references/api_reference.md':1156 'references/plotting_guide.md':767,1194 'references/standard_workflow.md':1099 'regress':424 'relat':1296 'remov':350 'requir':1430 'res':514,523,528 'resolut':496,508,522,973,1021,1361 'resourc':1067,1285 'result':548,575,665,1016,1059,1389 'results/cell_metadata.csv':676 'results/gene_metadata.csv':679 'results/processed_data.h5ad':671 'review':1423 'rna':14,60,105,1316 'rna-seq':13,59,104,1315 'run':1269,1334 'safeti':1433 'save':392,664,667,730,751,763,988,1057,1385 'sc':166 'sc.get.rank':579 'sc.pl':1175 'sc.pl.dotplot':615,755 'sc.pl.heatmap':736 'sc.pl.highly':411 'sc.pl.paga':785 'sc.pl.pca':453 'sc.pl.rank':549,558,566,836 'sc.pl.umap':478,498,607,654,711,800,868 'sc.pl.violin':312 'sc.pp':389,1171 'sc.pp.calculate':300 'sc.pp.combat':880 'sc.pp.filter':332,338 'sc.pp.highly':403 'sc.pp.neighbors':465 'sc.pp.normalize':380 'sc.pp.regress':428 'sc.pp.scale':438 'sc.read':195,200,209,215,1168 'sc.settings.figdir':186 'sc.settings.file':703 'sc.settings.set':179,693 'sc.settings.verbosity':177 'sc.tl':1173 'sc.tl.dpt':798 'sc.tl.leiden':494,520 'sc.tl.paga':781 'sc.tl.pca':448 'sc.tl.rank':540,825 'sc.tl.score':858 'sc.tl.tsne':486 'sc.tl.umap':476 'scalabl':5,51 'scale':436,1123 'scanpi':1,2,42,48,164,230,1161,1287,1290 'scanpy-tutorials.readthedocs.io':1292 'scanpy.readthedocs.io':1289 'scope':1404 'score':845,847,863,867,873 'scratch':1155 'script':357,1072,1336 'scripts/qc_analysis.py':363,1068,1083,1339 'scrna':117 'scrna-seq':116 'scvers':1293 'scverse.org':1295 'scvi':888,1300 'scvi-tool':1299 'select':933,950,1125 'separ':889 'seq':15,61,106,118,1317 'set':176,688,844,851,854,862,1180,1383 'set2':717 'setup':161,1116 'sharey':556 'show':747,1043 'signatur':1190 'singl':11,26,44,57,72,102,153,1313 'single-cel':10,25,43,56,71,101,152,1312 'skill':22,68,93,95,1396 'skill-scanpy' 'sne':124,485,1132 'solver':451 'source-sickn33' 'specif':1418 'squidpi':1298 'standard':274,1276 'start':157,1323,1331 'step':1102,1104,1277,1392 'step-by-step':1101 'stop':1424 'structur':220,228,1177 'style':710,1230 'subset':415,818,829,840 'substitut':1414 'success':1436 'sum':384,925 'svd':450 'swap':744 't-sne':122,483,1130 'target':383,924,926 'task':681,1400 'templat':1242,1258,1273,1326 'test':1420 'thei':1306 'threshold':919,1002,1089,1380 'tip':1318 'tool':1172,1297,1301 'toolkit':7,53 'top':408,935 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'total':318,381,431 'traject':41 'trajectori':87,143,772,1142,1215 'transform':388 'treat':811,833,842,1409 'tri':506,1018,1359 'true':308,327,458,614,746,750,1038 'tutori':1291 'type':137,588,597,644,653,658,715,743,762,816,822,1028,1140,1252,1374 'typic':903,912,920,940,969 'umap':121,256,473,707,1129 'understand':218 'unstructur':246 'unwant':426 'use':91,98,354,612,885,1008,1030,1035,1036,1183,1327,1338,1394 'util':1182 'valid':1026,1366,1419 'valu':441 'var':305,617,738,757 'variabl':401,404,412,418,423 'varianc':454,961,1049 'variat':427 'violin':1213 'visual':39,85,127,309,475,547,605,651,770,1120,1196,1204,1206,1363 'vs':812 'white':185 'wilcoxon':546 'within':814 'workflow':28,74,276,1061,1105,1246,1349 'write':1387","prices":[{"id":"e1e454f8-b0a0-457f-b04e-738ee8ebac0d","listingId":"771d1431-37e8-4ea8-a7e8-3f81136f4af9","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:43:54.807Z"}],"sources":[{"listingId":"771d1431-37e8-4ea8-a7e8-3f81136f4af9","source":"github","sourceId":"sickn33/antigravity-awesome-skills/scanpy","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/scanpy","isPrimary":false,"firstSeenAt":"2026-04-18T21:43:54.807Z","lastSeenAt":"2026-04-22T18:52:10.841Z"}],"details":{"listingId":"771d1431-37e8-4ea8-a7e8-3f81136f4af9","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"scanpy","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34583,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-22T06:40:00Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"12ab7ba8470cf810fcc2d0ba08b9d35a184c28b4","skill_md_path":"skills/scanpy/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/scanpy"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"scanpy","license":"SD-3-Clause license","description":"Scanpy is a scalable Python toolkit for analyzing single-cell RNA-seq data, built on AnnData. Apply this skill for complete single-cell workflows including quality control, normalization, dimensionality reduction, clustering, marker gene identification, visualization, and trajectory analysis."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/scanpy"},"updatedAt":"2026-04-22T18:52:10.841Z"}}