mcpField
S
scanpy

scanpy

github.com/k-dense-ai数据与数据库55.1k1.9k 次安装2 天前更新
代码仓库

关于 scanpy

scanpy 是面向单细胞 RNA-seq 研究的 Python 分析技能,基于 AnnData 提供可串联的处理脚本。从质量控制、聚类到标记基因分析和绘图,覆盖常见工作流。

主要功能

  1. 01单细胞数据质量控制
  2. 02归一化与高变基因筛选
  3. 03降维、聚类与批次校正
  4. 04标记基因识别和细胞注释
  5. 05伪批量分析与绘图

适用场景

  1. 01处理原始单细胞 RNA-seq 数据
  2. 02探索细胞群并识别标记基因
  3. 03比较样本并生成单细胞图表

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/k-dense-ai/scientific-agent-skills --skill scanpy

安装后在 Claude Code 中输入/scanpy确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
analysis_template.py
celltype_mapping.json
gene_signatures.json
pipeline_config.json
references/
analysis_workflow.md
api_reference.md
plotting_guide.md
r_interop.md
standard_workflow.md
upstream-review.md
scripts/
_common.py
annotate.py
batch_correct.py
cluster.py
convert.py
find_markers.py
inspect_data.py
plot.py
preprocess.py
pseudobulk.py
qc_analysis.py
reduce_dimensions.py
run_pipeline.py
score_genes.py
subset.py

详细介绍

Scanpy:单细胞分析

概述

Scanpy 是一个基于 AnnData 构建的可扩展 Python 工具包,用于分析单细胞 RNA-seq 数据。将此技能应用于完整的单细胞工作流,包括质量控制、归一化、降维、聚类、标记基因鉴定、可视化和轨迹分析。目标版本为 Scanpy 1.12.4(发布于 2026-08-27),审查于 2026-10-01。原生合成测试建立的是数据/API 契约,而非生物学有效性。

安装

需要 Python 3.12+(scanpy 1.12 已放弃对 Python ≤3.11 的支持)以及 anndata ≥0.10。

uv pip install "scanpy[leiden]"

[leiden] extra 会安装 igraph 和 leidenalg;脚本会显式选择 flavor="igraph"。对于可复现环境,请固定版本:uv pip install "scanpy[leiden]==1.12.4"。

对于大型或 out-of-core 数据集,许多函数支持 Dask 数组(实验性):

uv pip install "scanpy[leiden]" dask

参见将 dask 与 Scanpy 配合使用教程。对于 GPU 加速的类 scanpy 操作,请使用 rapids-singlecell 作为单独的包。

如果输入是 R 原生的单细胞对象(.rds、.RData、Seurat 或 SingleCellExperiment),请先使用 R 工具将其转换为 .h5ad,然后用 Scanpy 加载。阅读 references/r_interop.md,了解在 macOS、Linux 和 Windows 上由 Agent 运行的安装和转换说明。

有关 AnnData 结构和 I/O 的详细信息,请使用 anndata 技能。有关概率模型和批次校正,请使用 scvi-tools。

表示与推断契约

  • QC/预处理输入必须是已识别的原始计数。脚本会拒绝负值、 分数值、非有限值或总数为零的细胞。当 X 已经归一化时,使用 --counts-layer counts; 切勿仅凭看起来像整数的值推断来源。
  • layers["counts"] 保持未归一化;.raw 是独立的全面基因 对数归一化快照。基因子集化也会对每个 layer 进行子集化,但不会对 .raw 基因进行子集化。为 pseudobulk 保留一个全面基因对象;完整流水线会这样做。
  • seurat/cell_ranger HVG 使用对数归一化值;seurat_v3 和 seurat_v3_paper 使用计数,并要求 scanpy[skmisc]。缩放/回归是可选的, 可能会使稀疏数据变稠密,并可能连同协变量一起移除生物学信号。
  • Marker 排序在存在 .raw 时默认使用 .raw;--no-use-raw 选择 X,--layer 选择显式的对数归一化 layer。--groups/--reference 控制对比。 Wilcoxon/t-test 调整后的 p 值在每个比较内使用 BH;logreg 返回排序 分数而不返回 p 值。从同一数据中选择的 cluster 会产生探索性 marker。
  • 条件 DE 要求每个样本和细胞类型的原始计数总和、独立的生物学 重复、对齐的条件/供体元数据以及满秩设计。分别分析每个细胞 类型;重复供体样本需要合适的配对设计。聚合 无法修复混杂、缺失重复、双联体或不正确的注释。
  • Harmony(harmonypy)改变 PCA 坐标;BBKNN(bbknn)改变图; ComBat 改变 X。为 DE 保留原始表达/计数,并一起评估生物学 保守性和批次混合。请求的整合/双联体失败会停止。
  • 工具包将文件加载到内存中。对于 backed 数据,显式调用 .to_memory() 于选定的子集并关闭文件;backed 模式不是通用的核外 流水线。在修改前复制视图。Dask 支持因函数/数组布局而异。
  • .rds 需要显式的 R 转换阶段。Cluster ID 不决定细胞类型: 所有映射/签名资产均为示例性人类 marker 示例,需要审查。

Harmony 2 返回 cells x PCs;工具包调用其原生 API,因为 Scanpy 1.12.4 包装器仍会转置该输出,并在当前 Harmony 下失败。

可选包:scikit-image 用于 Scrublet 自动阈值化,loompy 用于 Loom, scikit-misc 用于 v3 HVG,harmonypy==2.0.2/bbknn==1.6.0 用于其整合分支,以及 louvain 用于已弃用的 Louvain 选项(独立环境:louvain 0.8.2 要求 igraph <0.12,与测试过的 igraph 1.0 冲突)。仅安装所需分支。R 和可选整合 执行边界记录在 references/upstream-review.md 中。

何时使用此 Skill

此 skill 应在以下情况下使用:

  • 分析单细胞 RNA-seq 数据(.h5ad、10X、CSV 格式)
  • 处理需要转换为 .h5ad 的 R 友好单细胞数据集(.rds、.RData、Seurat、SingleCellExperiment)
  • 对 scRNA-seq 数据集进行质量控制
  • 创建 UMAP、t-SNE 或 PCA 可视化
  • 识别细胞 cluster 并查找 marker 基因
  • 基于基因表达注释细胞类型
  • 进行轨迹推断或 pseudotime 分析
  • 生成出版质量的单细胞图

脚本工具包(优先使用这些脚本,而不是从零编写代码)

本技能在 scripts/ 中打包了可直接运行的命令行脚本,覆盖每一个常见步骤。请运行这些脚本,而不是手写 scanpy 代码——它们会按扩展名处理文件加载、图形设置、合理默认值、原始计数保留以及进度日志。每个脚本都读写 .h5ad,因此可以相互串联,并且每个脚本都有自己的 --help。只有当某项任务没有被脚本覆盖或需要特殊定制时,才降级到编写 scanpy 代码。

所有脚本都使用共享的 scripts/_common.py 辅助模块(加载、保存、图形配置)——请将它与其他脚本放在一起。从技能目录运行,或传入完整路径;图形默认输出到 ./figures/。

脚本用途典型调用
run_pipeline.py一条命令完成完整工作流:加载 → QC → 标准化 → HVG → PCA →(批次)→ UMAP → Leiden → 标记基因python scripts/run_pipeline.py raw.h5ad -o processed.h5ad
inspect_data.py汇总未知数据集(shape、obs/var、layers、已计算的内容、原始 vs 标准化)python scripts/inspect_data.py data.h5ad
convert.py加载任意格式(10x 目录/.h5、csv、loom、mtx)并写出 .h5adpython scripts/convert.py 10x_dir/ -o data.h5ad
qc_analysis.pyQC 指标、前后对比图、过滤、可选的 Scrublet 双细胞检测python scripts/qc_analysis.py raw.h5ad -o qc.h5ad --scrublet
preprocess.py标准化、log1p、HVG、可选的 scale/regress(保留 counts layer + raw)python scripts/preprocess.py qc.h5ad -o norm.h5ad
reduce_dimensions.pyPCA + 方差图、neighbors、UMAP、可选的 t-SNEpython scripts/reduce_dimensions.py norm.h5ad -o red.h5ad
batch_correct.py整合:harmony / bbknn / combatpython scripts/batch_correct.py red.h5ad -o int.h5ad --method harmony --batch-key sample
cluster.py在单一或多个分辨率下运行 Leiden(或 louvain)python scripts/cluster.py red.h5ad -o clu.h5ad --resolution 0.3 0.6 1.0
find_markers.pyrank_genes_groups + 按分组输出 CSV + 标记基因图python scripts/find_markers.py clu.h5ad --groupby leiden -o clu.h5ad
annotate.py从 JSON/CSV 将聚类映射到细胞类型;可选的标记基因参考 dotplotpython scripts/annotate.py clu.h5ad -o ann.h5ad --mapping map.json
score_genes.py对基因签名(JSON)和/或细胞周期阶段进行评分python scripts/score_genes.py ann.h5ad -o scored.h5ad --gene-sets sigs.json
pseudobulk.py按样本 × 细胞类型聚合计数 → 用于 pydeseq2 的矩阵python scripts/pseudobulk.py ann.h5ad --by sample cell_type --metadata condition donor --out-prefix pb
subset.py按 obs 值或基因列表取子集(可选清除过期的嵌入)python scripts/subset.py ann.h5ad -o tcells.h5ad --obs cell_type --keep "T cells"
plot.py从处理后的对象生成 umap/tsne/pca/violin/dotplot/heatmap 等python scripts/plot.py ann.h5ad --kind dotplot --genes CD3D CD14 --groupby cell_type
一次性端到端运行
# Counts → clustered object and exploratory marker ranks + figures + marker CSVs
python scripts/run_pipeline.py raw.h5ad -o processed.h5ad \
    --resolution 0.5 --n-top-genes 2000 --scrublet
# With multi-sample integration:
python scripts/run_pipeline.py raw.h5ad -o processed.h5ad --batch-key sample --batch-method harmony
# Reproducible parameters via JSON (keys mirror flag names with underscores):
python scripts/run_pipeline.py raw.h5ad -o processed.h5ad --config params.json
分步串联(当需要在各阶段之间检查/迭代时)
python scripts/qc_analysis.py        raw.h5ad  -o qc.h5ad   --scrublet
python scripts/preprocess.py         qc.h5ad   -o norm.h5ad --n-top-genes 2000
python scripts/reduce_dimensions.py  norm.h5ad -o red.h5ad  --n-pcs 40
python scripts/cluster.py            red.h5ad  -o clu.h5ad  --resolution 0.3 0.5 0.8
python scripts/find_markers.py       clu.h5ad  -o clu.h5ad  --groupby leiden_0.5 --use-raw
# inspect results/markers/*.csv, decide labels, write a mapping JSON, then:
python scripts/annotate.py           clu.h5ad  -o ann.h5ad  --mapping celltypes.json --cluster-key leiden_0.5

以下各节记录了每个脚本所执行的底层 scanpy 调用——当需要超出脚本标志的定制时,请阅读这些内容。

快速开始

基本导入与设置
import scanpy as sc
import pandas as pd
import numpy as np

# Configure settings
sc.settings.verbosity = 3
sc.set_figure_params(dpi=80, facecolor='white')
sc.settings.figdir = './figures/'
sc.settings.autosave = True  # Preferred over per-plot save= (deprecated in scanpy 1.12)
加载数据
# From 10X Genomics
adata = sc.read_10x_mtx('path/to/data/')
adata = sc.read_10x_h5('path/to/data.h5')

# From h5ad (AnnData format)
adata = sc.read_h5ad('path/to/data.h5ad')

# From CSV
adata = sc.read_csv('path/to/data.csv')

对于 R 原生文件,不要尝试在 Python 中直接解析 Seurat .rds。请先转换:

# See references/r_interop.md for installing R and conversion packages.
Rscript convert_rds_to_h5ad.R input.rds output.h5ad
adata = sc.read_h5ad('output.h5ad')
理解 AnnData 结构

AnnData 对象是 scanpy 中的核心数据结构:

adata.X          # Expression matrix (cells × genes)
adata.obs        # Cell metadata (DataFrame)
adata.var        # Gene metadata (DataFrame)
adata.uns        # Unstructured annotations (dict)
adata.obsm       # Multi-dimensional cell data (PCA, UMAP)
adata.raw        # Snapshot of X/var; here full log-normalized expression, NOT counts

# Access cell and gene names
adata.obs_names  # Cell barcodes
adata.var_names  # Gene names

标准分析工作流

这七个步骤,以及每一步涉及的代码和关键参数,见 references/analysis_workflow.md:

  1. 质量控制 — 过滤细胞和基因;在决定阈值前检查线粒体比例和计数,而不是照搬默认值。
  2. 归一化与预处理 — 归一化、对数变换、选择高变基因,并保留 .raw 以供后续绘图使用。
  3. 降维 — 先做 PCA,再构建邻接图,最后做 UMAP。
  4. 聚类 — 根据具体问题选择 Leiden 的分辨率,而非使用默认值。
  5. 标记基因鉴定 — 每个 cluster 的排序基因。
  6. 细胞类型注释 — 根据标记基因将 cluster 映射到细胞类型。
  7. 保存结果 — 写出已注释的 AnnData。

常见的后续任务 — 发表级图表、轨迹推断、条件间的 pseudobulk 差异表达、基因集打分以及批次校正 — 都在同一文件中。另请参见 references/standard_workflow.md 和 references/plotting_guide.md。

需要调整的关键参数

质量控制
  • min_genes:每个细胞的最小基因数(通常为 200-500)
  • min_cells:每个基因的最小细胞数(通常为 3-10)
  • pct_counts_mt:线粒体阈值(通常为 5-20%)
归一化
  • target_sum:每个细胞的目标计数(脚本使用 1e4;Scanpy 默认的 None 使用中位数)
特征选择
  • n_top_genes:HVG 的数量(通常为 2000-3000)
  • min_mean、max_mean、min_disp:HVG 选择参数
降维
  • n_pcs:主成分数量(查看方差比图)
  • n_neighbors:邻居数量(通常为 10-30)
聚类
  • resolution:聚类粒度(0.4-1.2,越高 = 聚类越多)

常见陷阱与最佳实践

  1. 将计数与 .raw 分开:在归一化之前,将独立的计数矩阵保存在 adata.layers["counts"] 中。在此工作流中,.raw 存储的是 HVG 子集化之前的完整对数归一化矩阵,与随附的预处理脚本一致;其名称并不保证是原始计数。请确认所选 layer 或 .raw 对于 rank_genes_groups 是对数归一化的,并将计数用于 pseudobulk。
  2. 仔细检查 QC 图:根据数据集质量调整阈值
  3. 使用 Leiden 聚类:sc.tl.louvain 在 scanpy 1.12 中已弃用
  4. 尝试多种聚类分辨率:找到最佳粒度
  5. 验证细胞类型注释:使用多个标记基因
  6. 显式选择绘图值:use_raw=True 会按存储内容读取 .raw;请验证其中包含的是对数归一化表达
  7. 检查 PCA 方差比:确定最佳 PC 数量
  8. 保存中间结果:长工作流可能在中途失败
  9. 用 pseudobulk 做 DE:不要把 rank_genes_groups 的 p 值当作条件之间严谨的 DE
  10. 通过设置保存图表:使用 sc.settings.autosave,而不是绘图函数上已弃用的 save=
  11. 在 Scanpy 之前转换 R 对象:使用 R 包将 Seurat 或 SingleCellExperiment 的 .rds 文件转换为 .h5ad,同时保留计数、元数据和基因标识符

捆绑资源

scripts/(命令行工具包)

一组可组合的 .h5ad 输入/.h5ad 输出脚本,覆盖整个工作流,并提供一个命令即可运行的端到端流水线。完整表格和串联示例见上文的 Script Toolkit 部分。每个脚本都有 --help。文件:

  • _common.py — 供其他脚本导入的共享加载/保存/绘图辅助函数(不是命令行工具)
  • run_pipeline.py — 一个命令运行完整流水线(标志或 --config JSON)
  • inspect_data.py、convert.py — 探索并加载/转换任意输入格式
  • qc_analysis.py、preprocess.py、reduce_dimensions.py、batch_correct.py、cluster.py — 流水线步骤
  • find_markers.py、annotate.py、score_genes.py、pseudobulk.py — 标志物、注释、评分、差异表达准备
  • subset.py、plot.py — 按元数据/基因取子集;生成任意标准图

在从零编写 scanpy 代码之前,优先使用这些脚本。

references/standard_workflow.md

完整的逐步工作流,包含详细说明和代码示例,涵盖:

  • 数据加载和设置
  • 带可视化的质量控制
  • 归一化和缩放
  • 特征选择
  • 降维(PCA、UMAP、t-SNE)
  • 聚类(Leiden)
  • 双细胞检测(scrublet)和 pseudobulk 聚合
  • 标志物基因识别
  • 细胞类型注释
  • 轨迹推断
  • 差异表达

在执行从零开始的完整分析时阅读此参考。

references/api_reference.md

按模块组织的 scanpy 函数快速参考指南:

  • 读写数据(sc.read_*、adata.write_*)
  • 预处理(sc.pp.*)
  • 工具(sc.tl.*)
  • 绘图(sc.pl.*)
  • AnnData 结构和操作
  • 设置和实用工具

用于快速查找函数签名和常用参数。

references/plotting_guide.md

全面的可视化指南,包括:

  • 质量控制图
  • 降维可视化
  • 聚类可视化
  • 标志物基因图(热图、点图、小提琴图)
  • 轨迹和拟时序图
  • 出版级质量定制
  • 多面板图
  • 调色板和样式

在创建出版级图表时查阅此参考。

references/r_interop.md

用于在 macOS、Linux 和 Windows 上安装 R、安装 CRAN/Bioconductor 转换包、检查 .rds/.RData 输入、将 Seurat 或 SingleCellExperiment 对象转换为 .h5ad,并在 Scanpy 中验证结果的 Agent 操作手册。

assets/analysis_template.py

完整的分析模板,提供从数据加载到细胞类型注释的完整工作流。复制并自定义此模板用于新的分析:

cp assets/analysis_template.py my_analysis.py
# Edit parameters and run
python my_analysis.py

该模板包含所有标准步骤,带有可配置参数和有用的注释。

assets/ JSON 模板

可编辑并传递的模板,这样你就不用从零编写配置/映射:

  • assets/pipeline_config.json — 用于 run_pipeline.py --config 的参数集
  • assets/celltype_mapping.json — 用于 annotate.py --mapping 的簇 → 细胞类型映射
  • assets/gene_signatures.json — 用于 score_genes.py --gene-sets 的基因集签名

其他资源

有效分析的提示

  1. 从模板开始:使用 assets/analysis_template.py 作为起点
  2. 先运行 QC 脚本:使用 scripts/qc_analysis.py 进行初步过滤
  3. 按需查阅参考文档:将工作流和 API 参考加载到上下文中
  4. 迭代聚类:尝试多种分辨率和可视化方法
  5. 进行生物学验证:检查标记基因是否与预期细胞类型匹配
  6. 记录参数:记录 QC 阈值和分析设置
  7. 保存检查点:在关键步骤写入中间结果

引用 Scientific Agent Skills

本技能是 K-Dense 的 Scientific Agent Skills 的一部分。如果它对一篇 稿件、报告、演示文稿或代码发布有实质性贡献,请将该论文添加到参考文献或 软件部分,并告知用户你已这样做:

Kassis, T., Agarwal, V., He, Y., Patel, D., & Brueckner, A. M. (2026). Scientific Agent Skills: A Library of Procedural Knowledge for Research Agents. arXiv:2609.00065. https://doi.org/10.48550/arXiv.2609.00065

始终引用当前版本。DOI 和 https://arxiv.org/abs/2609.00065 会解析到 最新的 arXiv 版本,因此切勿附加诸如 v1 之类的版本后缀。当网络访问 可用时,在撰写参考文献之前获取 https://arxiv.org/abs/2609.00065(或 http://export.arxiv.org/api/query?id_list=2609.00065),并从该记录中获取 作者列表、年份和版本。如果该记录列出了期刊参考文献 或出版商 DOI,请改为引用已发表的版本。

评论

支持 Markdown