Scanpy 1.10 单细胞质控实战:3指标联合过滤与Scrublet双细胞识别(附Python代码)
Scanpy 1.10 单细胞质控实战3指标联合过滤与Scrublet双细胞识别附Python代码1. 单细胞RNA测序质控的核心逻辑单细胞RNA测序(scRNA-seq)数据的质量控制(QC)是分析流程中至关重要的第一步。与bulk RNA-seq不同单细胞数据具有更高的技术噪音和生物学异质性这使得质控环节成为确保下游分析可靠性的关键屏障。在单细胞数据中常见的低质量细胞来源包括破损细胞细胞膜破裂导致RNA大量流失凋亡细胞正在经历程序性死亡的细胞双细胞/多细胞(doublets/multiplets)一个液滴中包含多个细胞空液滴未捕获细胞的液滴这些低质量细胞会引入系统性偏差影响后续的细胞分群、差异表达分析等结果。因此建立科学的质控标准对单细胞分析至关重要。2. 核心质控指标与阈值设定2.1 三大核心质控指标在Scanpy中我们主要依赖三个核心指标进行质控指标类型计算方式生物学意义异常表现每个细胞的基因数n_genes_by_counts细胞转录组复杂度过低破损细胞过高双细胞每个细胞的UMI总数total_counts测序深度过低低质量细胞过高双细胞线粒体基因占比pct_counts_mt细胞活性过高破损或凋亡细胞线粒体基因的高表达通常意味着细胞应激或凋亡因为当细胞膜破损时胞质RNA会流失而线粒体RNA由于位置固定得以保留。2.2 基于MAD的自动阈值设定传统质控通常使用固定阈值但这种方法无法适应不同数据集的特异性。Scanpy 1.10推荐使用中值绝对偏差(MAD)方法自动计算阈值# 计算MAD自动阈值 def mad_threshold(series, n_mads3): median series.median() mad (series - median).abs().median() * 1.4826 return median n_mads * mad # 应用自动阈值 min_genes mad_threshold(adata.obs[n_genes_by_counts], n_mads-3) max_genes mad_threshold(adata.obs[n_genes_by_counts], n_mads3) min_counts mad_threshold(adata.obs[total_counts], n_mads-3) max_counts mad_threshold(adata.obs[total_counts], n_mads3) max_mt mad_threshold(adata.obs[pct_counts_mt], n_mads3)这种方法能根据数据分布自动调整阈值特别适合处理不同来源或不同实验条件的数据集。3. 质控流程实战演示3.1 数据加载与初步质控首先加载数据并计算基础指标import scanpy as sc import numpy as np # 读取数据 adata sc.read_10x_mtx(filtered_feature_bc_matrix/, var_namesgene_symbols) # 计算基础QC指标 adata.var[mt] adata.var_names.str.startswith(MT-) # 标记线粒体基因 sc.pp.calculate_qc_metrics(adata, qc_vars[mt], percent_topNone, log1pFalse, inplaceTrue) # 可视化QC指标分布 sc.pl.violin(adata, [n_genes_by_counts, total_counts, pct_counts_mt], jitter0.4, multi_panelTrue)3.2 三指标联合过滤基于计算得到的阈值进行过滤# 设置过滤条件 min_genes 500 # 最少检测到的基因数 max_genes 6000 # 最多检测到的基因数 max_mt 15 # 最大线粒体基因占比 # 应用过滤 sc.pp.filter_cells(adata, min_genesmin_genes) sc.pp.filter_cells(adata, max_genesmax_genes) adata adata[adata.obs[pct_counts_mt] max_mt, :] # 记录过滤后数据 print(f过滤后细胞数: {adata.n_obs})3.3 Scrublet双细胞识别双细胞(doublets)是单细胞测序中的常见问题Scrublet通过模拟双细胞表达谱来识别真实数据中的双细胞# 安装Scrublet !pip install scrublet # 运行Scrublet import scrublet as scr scrub scr.Scrublet(adata.X) doublet_scores, predicted_doublets scrub.scrub_doublets() # 将结果添加到adata对象 adata.obs[doublet_score] doublet_scores adata.obs[predicted_doublet] predicted_doublets # 可视化双细胞得分 sc.pl.scatter(adata, xtotal_counts, ydoublet_score, colorpredicted_doublet) # 过滤双细胞 adata adata[~adata.obs[predicted_doublet], :].copy()4. 质控后数据标准化与可视化完成质控后我们需要对数据进行标准化处理# 基本预处理流程 sc.pp.normalize_total(adata, target_sum1e4) # CPM标准化 sc.pp.log1p(adata) # 对数转换 sc.pp.highly_variable_genes(adata, min_mean0.0125, max_mean3, min_disp0.5) # 筛选高变基因 adata adata[:, adata.var.highly_variable] # 保留高变基因 # PCA降维 sc.pp.scale(adata, max_value10) sc.tl.pca(adata, svd_solverarpack) # UMAP可视化 sc.pp.neighbors(adata, n_pcs30, n_neighbors20) sc.tl.umap(adata) sc.pl.umap(adata, color[n_genes_by_counts, total_counts, pct_counts_mt])5. 质控结果解读与注意事项5.1 质控决策要点阈值设置的灵活性不同组织类型、不同实验protocol可能需要调整阈值指标间的相关性高UMI数常伴随高基因数但线粒体占比应独立评估批次效应影响跨批次数据应分别质控后再整合5.2 常见问题解决方案问题现象可能原因解决方案过滤后细胞数过少阈值设置过严放宽MAD系数或手动调整阈值双细胞比例异常高细胞悬液浓度过高检查实验记录考虑重新分析线粒体基因普遍偏高样本处理不当检查样本采集到建库的时间间隔6. 完整代码实现以下是整合所有步骤的完整代码# 单细胞质控全流程 import scanpy as sc import numpy as np import scrublet as scr # 1. 数据加载 adata sc.read_10x_mtx(data/, var_namesgene_symbols) # 2. 计算QC指标 adata.var[mt] adata.var_names.str.startswith(MT-) sc.pp.calculate_qc_metrics(adata, qc_vars[mt], percent_topNone, log1pFalse, inplaceTrue) # 3. 自动阈值计算 def mad_threshold(series, n_mads3): median series.median() mad (series - median).abs().median() * 1.4826 return median n_mads * mad min_genes mad_threshold(adata.obs[n_genes_by_counts], n_mads-3) max_genes mad_threshold(adata.obs[n_genes_by_counts], n_mads3) min_counts mad_threshold(adata.obs[total_counts], n_mads-3) max_counts mad_threshold(adata.obs[total_counts], n_mads3) max_mt 15 # 线粒体阈值通常固定 # 4. 细胞过滤 sc.pp.filter_cells(adata, min_genesmin_genes) sc.pp.filter_cells(adata, max_genesmax_genes) adata adata[adata.obs[pct_counts_mt] max_mt, :] # 5. 双细胞检测 scrub scr.Scrublet(adata.X) doublet_scores, predicted_doublets scrub.scrub_doublets() adata.obs[doublet_score] doublet_scores adata.obs[predicted_doublet] predicted_doublets adata adata[~adata.obs[predicted_doublet], :].copy() # 6. 数据标准化与可视化 sc.pp.normalize_total(adata, target_sum1e4) sc.pp.log1p(adata) sc.pp.highly_variable_genes(adata, min_mean0.0125, max_mean3, min_disp0.5) adata adata[:, adata.var.highly_variable] sc.pp.scale(adata, max_value10) sc.tl.pca(adata, svd_solverarpack) sc.pp.neighbors(adata, n_pcs30, n_neighbors20) sc.tl.umap(adata) # 7. 结果可视化 sc.pl.violin(adata, [n_genes_by_counts, total_counts, pct_counts_mt], jitter0.4) sc.pl.scatter(adata, xtotal_counts, ypct_counts_mt, colorn_genes_by_counts) sc.pl.umap(adata, color[n_genes_by_counts, total_counts, pct_counts_mt])在实际项目中我们还需要考虑样本特异性、实验批次等因素可能需要针对不同样本单独进行质控后再整合分析。Scanpy提供的这套质控流程已经过大量实际项目验证能够为后续分析提供可靠的数据基础。

相关新闻

集成学习实战:Bagging/Boosting/Stacking

集成学习实战:Bagging/Boosting/Stacking

集成学习实战:Bagging/Boosting/Stacking 1. 集成学习原理 集成学习(Ensemble Learning): ├── 核心思想:多个弱学习器组合成强学习器 ├── 三大方法: │ ├── Bagging:并行训练&#x…

2026/7/5 12:02:09阅读更多 →
D3 Reactor  百万并发

D3 Reactor 百万并发

reactor由对不同IO的管理转变为对事件的管理,不同的IO事件,对应不同的回调函数。listenfd的EPOLLIN事件,调用aceept_cb;clientfd的EPOLLIN事件,调用recv_cb;clientfd的EPOLLOUT事件,调用send_cb…

2026/7/5 12:02:09阅读更多 →
程序员转型大模型:从基础到实战的完整指南

程序员转型大模型:从基础到实战的完整指南

1. 程序员转型大模型的黄金机遇去年和几个老同事聚餐时发现,我们这群写了十几年Java/Python的老码农,现在见面聊的全是Transformer架构和LoRA微调。这让我意识到,大模型技术正在重塑程序员的职业发展路径。从2022年底ChatGPT引爆市场开始&…

2026/7/5 12:02:09阅读更多 →
PCB湿制程/PCB设备定制/PCB水平线设备/PCB水平蚀刻生产线公司国内优选

PCB湿制程/PCB设备定制/PCB水平线设备/PCB水平蚀刻生产线公司国内优选

本文旨在梳理2026年国内PCB设备相关市场的主流品质公司,分析行业发展动态与竞争特色。PCB设备作为电子信息产业重要的生产基础支撑,其性能直接关联线路板生产效率、产品精度与制造质量,对整个电子产业链的升级发展有着重要影响。随着国内电子…

2026/7/5 13:07:27阅读更多 →
程序员就业:换个角度,把工具链跑成稳定流程

程序员就业:换个角度,把工具链跑成稳定流程

如果你正准备往大模型方向转,《程序员就业:2026 年还能靠什么拿到,从问题拆解到交付验证》这类问题别只看热度。更重要的是判断自己该补哪块能力,以及怎么证明你真的会。摘要这篇面向准备找工作、跳槽或转型的程序员,但…

2026/7/5 13:07:27阅读更多 →
中小学课桌椅/报告厅座椅/大学教室桌椅/校园课桌椅/高校阶梯教室排椅公司优选

中小学课桌椅/报告厅座椅/大学教室桌椅/校园课桌椅/高校阶梯教室排椅公司优选

本文旨在梳理2026年中国校园公共家具市场的主流品质公司,分析行业发展动态与竞争特色。校园公共家具作为教育教学开展的重要基础配套,其品质直接关联师生健康安全、使用体验及教育空间提质升级。随着国家对校园建设标准的不断提升与消费者对教育场景品质…

2026/7/5 13:07:27阅读更多 →
蝶阀/不锈钢阀门/化工阀门/沪工阀门厂家优选指南

蝶阀/不锈钢阀门/化工阀门/沪工阀门厂家优选指南

本文旨在梳理2026年国内闸阀蝶阀不锈钢阀门化工阀门沪工阀门市场的主流品质企业,分析行业发展动态与竞争特色。阀门作为市政给排水、消防工程、化工生产、暖通系统的核心基础部件,其品质直接关联工程运行安全、生产效率及公共服务稳定性。随着国内基建投…

2026/7/5 13:07:27阅读更多 →
提升开发效率的五个Python工具推荐

提升开发效率的五个Python工具推荐

你的时间不应该浪费在重复劳动上作为一名写过十年代码的开发者,我越来越清楚地意识到:真正决定开发效率的,不是你的打字速度,也不是你背下了多少API,而是你选择使用哪些工具。那些每天只花半小时部署环境、五分钟定位b…

2026/7/5 13:07:27阅读更多 →
Scala类与对象:从Java思维到工程契约的范式跃迁

Scala类与对象:从Java思维到工程契约的范式跃迁

1. 为什么 Scala 的类与对象不是“Java 换个名字”那么简单?你刚接触 Scala,看到class Car和new Car(),第一反应可能是:“哦,和 Java 差不多嘛”。我试过——在带第一个 Scala 小组做电商后台时,也是这么想…

2026/7/5 13:02:27阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/5 0:01:08阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/5 0:01:08阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/5 0:01:08阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/5 0:01:08阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/5 1:30:27阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/5 3:48:10阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/5 3:48:09阅读更多 →