遵循 scverse 最佳实践的单细胞 RNA-seq 数据自动化 QC 工作流。
在用户以下情况下使用:
支持的输入格式:
.h5ad 文件(来自 scanpy/Python 工作流的 AnnData
格式).h5 文件(10X Genomics Cell Ranger 输出)默认推荐:除非用户有特定的自定义需求或明确要求非标准过滤逻辑,否则使用方法 1(完整流程)。
对于遵循 scverse 最佳实践的标准 QC,使用便捷脚本
scripts/qc_analysis.py:
python3 scripts/qc_analysis.py input.h5ad
# 或对于 10X Genomics .h5 文件:
python3 scripts/qc_analysis.py raw_feature_bc_matrix.h5该脚本自动检测文件格式并适当加载。
何时使用此方法:
要求: anndata, scanpy, scipy, matplotlib, seaborn, numpy
参数:
使用命令行参数自定义过滤阈值和基因模式:
--output-dir - 输出目录--mad-counts, --mad-genes,
--mad-mt - 计数/基因/线粒体百分比 的 MAD 阈值--mt-threshold - 硬性线粒体百分比截止值--min-cells - 基因过滤阈值--mt-pattern, --ribo-pattern,
--hb-pattern - 不同物种的基因名称模式使用 --help 查看当前默认值。
输出文件:
所有文件默认保存到 <input_basename>_qc_results/
目录(或 --output-dir 指定的目录):
qc_metrics_before_filtering.png - 过滤前可视化qc_filtering_thresholds.png - 基于 MAD
的阈值叠加图qc_metrics_after_filtering.png - 过滤后质量指标<input_basename>_filtered.h5ad -
干净、过滤后的数据集,可用于下游分析<input_basename>_with_qc.h5ad - 保留 QC
注释的原始数据如果需要复制输出供用户访问,请复制单个文件(而非整个目录),以便用户可以直接预览。
该脚本执行以下步骤:
对于自定义分析工作流或非标准需求,使用
scripts/qc_core.py 和 scripts/qc_plotting.py
中的模块化工具函数:
# 从 scripts/ 目录运行,或根据需要将 scripts/ 添加到 sys.path
import anndata as ad
from qc_core import calculate_qc_metrics, detect_outliers_mad, filter_cells
from qc_plotting import plot_qc_distributions # 仅当需要可视化时
adata = ad.read_h5ad('input.h5ad')
calculate_qc_metrics(adata, inplace=True)
# ... 此处为自定义分析逻辑何时使用此方法:
可用的工具函数:
来自 qc_core.py(核心 QC 操作):
calculate_qc_metrics(adata, mt_pattern, ribo_pattern, hb_pattern, inplace=True)
- 计算 QC 指标并注释 adatadetect_outliers_mad(adata, metric, n_mads, verbose=True)
- 基于 MAD 的异常值检测,返回布尔掩码apply_hard_threshold(adata, metric, threshold, operator='>', verbose=True)
- 应用硬性截止值,返回布尔掩码filter_cells(adata, mask, inplace=False) -
应用布尔掩码过滤细胞filter_genes(adata, min_cells=20, min_counts=None, inplace=True)
- 按检测情况过滤基因print_qc_summary(adata, label='') -
打印摘要统计信息来自 qc_plotting.py(可视化):
plot_qc_distributions(adata, output_path, title) -
生成综合 QC 图plot_filtering_thresholds(adata, outlier_masks, thresholds, output_path)
- 可视化过滤阈值plot_qc_after_filtering(adata, output_path) -
生成过滤后图自定义工作流示例:
示例 1:仅计算指标和可视化,暂不进行过滤
adata = ad.read_h5ad('input.h5ad')
calculate_qc_metrics(adata, inplace=True)
plot_qc_distributions(adata, 'qc_before.png', title='初始 QC')
print_qc_summary(adata, label='过滤前')示例 2:仅应用线粒体百分比过滤,其他指标保持宽松
adata = ad.read_h5ad('input.h5ad')
calculate_qc_metrics(adata, inplace=True)
# 仅过滤高 MT% 细胞
high_mt = apply_hard_threshold(adata, 'pct_counts_mt', 10, operator='>')
adata_filtered = filter_cells(adata, ~high_mt)
adata_filtered.write('filtered.h5ad')示例 3:对不同子集使用不同阈值
adata = ad.read_h5ad('input.h5ad')
calculate_qc_metrics(adata, inplace=True)
# 应用类型特定的 QC(假设存在 cell_type 元数据)
neurons = adata.obs['cell_type'] == 'neuron'
other_cells = ~neurons
# 神经元可耐受更高的 MT%,其他细胞使用更严格的阈值
neuron_qc = apply_hard_threshold(adata[neurons], 'pct_counts_mt', 15, operator='>')
other_qc = apply_hard_threshold(adata[other_cells], 'pct_counts_mt', 8, operator='>')有关详细的 QC 方法论、参数理由和故障排除指南,请参见
references/scverse_qc_guidelines.md。该参考资料提供:
当用户需要更深入理解方法论或排查 QC 问题时,请加载此参考资料。
典型的下游分析步骤: