京公网安备 11010802034615号
经营许可证编号:京B2-20210330
来源:麦叔编程
作者:麦叔
到了过年的时候了,你要回老家过年吗?如果回老家过年,需要做核算检测。我也正在犹豫中。你们做了吗?
核酸检测本身是一个比较费时,费力,费钱的复杂过程,所以现在低风险地区都是采用的10人一组混合检验的。
具体来说就是将采集自10个人的10支拭子样本集合于1个采集管中进行核酸检测。
混检筛查中一旦发现阳性或弱阳性,将会立即进行追溯,通知相关部门对该混采管的10个受试者暂时单独隔离,
并重新采集单管拭子进行复核,再确定这10个人当中到底哪一个是阳性。
如果检测结果是阴性,意味着这10个样本全是阴性,混检的10个人都是安全的。
看到这个过程后,作为程序员的我禁不住拍了一下自己的大腿,这不就是个很简单算法嘛!
但是这个小小的算法把检验的成本降低了接近90%,把检验的速度提高了近10倍!算法真是太奇妙了!
顺着这个思路,有没有更好的算法,进一步加快这个过程呢?理论上来说,如果用二分法,
可以把14亿次检测减少到大概23万次左右。而现在10比1混合检验的次数大约是1.4亿次。
关于算法,本文下面再讨论。咱们先说一个大家关心的问题。
把10个人的样本混在一起,咋一听觉得很不靠谱,实际上还是很靠谱的。但是会不会出现检验不准的情况呢?确实存在一些潜在问题。
以下专业分析来自知乎,作者:返朴https://www.zhihu.com/question/404866690/answer/1326422005
假阴性率会增加,准确度下降。举两个假设的情况给大家解释为什么假阴性率会增加:
情况1:假设使用的是饱受争议的美国CDC的核酸RT-PCR检测试剂盒。这个试剂盒一共测三个新冠基因片段,
其中两个是新冠特异的基因片段,第三个是所有类似于SARS的冠状病毒都有的基因片段。
除此以外,还包括一个控制探针 (control probe)针对人的RNase P基因。这个探针的目的是用来保障取样足够和RNA提纯过程没有出错。
如果取样不够,或者RNA纯化出错导致RNA降解,探针就读不出数值,检测结果就是“无效(invalid)”,还需要重新再测。
如果有位阳性感染者,在鼻咽拭子取样的时候,样本量取得不够。如果对这个样本用美国CDC的核酸试剂盒进行单独的核酸检测,虽然新冠基因是阴性,RNase P控制探针的结果也是阴性,最终结果就显示“无效(invalid)”,还需要重新再测。
然而,如果把这个人的样本和其他4个人混合在一起,进行混合核酸测试——其他4位都是核酸阴性,且取到了足够的样本。这时,用美国CDC的核酸试剂盒去检测5个人的混合样本,测出新冠基因是阴性,RNase P的控制探针是阳性(表明样本取样提纯没有出错),因此得出结论:这5位都是核酸阴性。那位阳性感染者得到的就是一个“假阴性”结果。
情况2:不同核酸检测的设计不同,导致试剂盒的敏感度和特异性也不同。假设所用核酸试剂盒的敏感度是500个新冠RNA/毫升。有一位阳性感染者取样,提纯样本里面的RNA以后,用1µg总RNA量来做RT-PCR,里面包含了500个新冠RNA/毫升,那么检测结果是阳性。可是如果他的样本和其他4个人混在一起检测,还是用1µg总RNA量来做RT-PCR,假设是等量混合,那么他的RNA实际只占~20%。1µg总混合RNA里面大约只有100个新冠RNA/毫升。受试剂盒敏感度的限制,结果会是假阴性。
但这不是说混检就不能实行,而是有一定的限制:
(1)每个样本的采集量要足,否则会出现稀释后出现假阴性的问题
(2)只对低风险地区实行混检
下面用算法简单模拟采样数量和检测数量,其实也不是什么算法,就是两个数学公式:
total_pop = 1400000000 #总人口 rate = 0.00001 #感染率 group_size = 10
#每组人数 check_num = 0
caiyang_num = 0 #计算采用数量:总人数 + 要重复采样的数量 caiyang_num = total_pop
+ (total_pop * rate) *
group_size #计算检测次数:人数除以10 + 重复检测数 check_num = total_pop / group_size
+ (total_pop * rate) *
group_size print(f'采用数:{caiyang_num:,}, 检测数量:{check_num:,}')
运行结果:采用数:1,400,140,000.0, 检测数量:140,140,000.0
假设感染率为10万分之一的情况下,要采样14亿零14万次;要检测1亿4千万零14万次。
如果调整每100人一组检测:采用数:1,401,400,000.0, 检测数量:15,400,000.0
采用数增加了100多万次,而检测次数减少了1亿2千多万次。也就是说分组能极大的减少检测次数。
但是受制于准确度的影响,我们这里只是探讨一下算法。这些算法在计算机的数据处理上,确实起到了把效率提高几万,甚至几十几百万次的效果。
如果用二分查找法,可以进一步减少检测次数减少到23万次。
这里仍然假设10万人有一个感染,也就是10万个人里面找一个人出来。用二分法需要找约17次,那么总的检测次数就是:
group_size = 100000 #10万人一组 group_num = 1400000000 / 100000 # 共1400组 from math
import log #
用2分法每10万人只需要log(10w,2),大约16次检测 check_num = round(log(group_size, 2) * group_num)
print(f'检测数量:{check_num:,}')
计算结果:检测数量:232,535
虽然由于检测准确度的问题,二分法不能实施,但算法的世界真的很奥妙。大家都应该学点编程,学点算法。
下面是二分查找法的Python非递归实现:
#二分查找法,非递归实现 def binary_search(arr, x):
low = 0 high = len(arr) - 1 mid = 0
while low <= high:
mid = (high + low) // 2 if arr[mid] < x:
low = mid + 1
elif arr[mid] > x:
high = mid - 1 else:
return mid
return -1
arr = [ 2, 3, 4, 10, 40 ] x = 10 result = binary_search(arr, x)
下面是递归实现:
def binary_search(arr, low, high, x):
if high >= low:
mid = (high + low) // 2 if arr[mid] == x:
return mid
elif arr[mid] > x:
return binary_search(arr, low, mid - 1, x)
else:
return binary_search(arr, mid + 1, high, x)
else:
return -1
arr = [ 2, 3, 4, 10, 40 ]
x = 10 result = binary_search(arr, 0, len(arr)-1, x)
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
CDA数据分析师 出品 作者:李诗怡 1. 销售漏斗阶段判断 题目:销售漏斗模型中,通过广告、社交媒体等方式触达品牌信息(如浏览品 ...
2026-09-07在Python数据分析中,Pandas库的DataFrame是最核心、最常用的结构化数据表对象,类似于Excel的二维表格,具备规整的行列结构、字 ...
2026-09-07在数据分析、经营复盘、业绩预测与经济统计工作中,平均增速(平均增长率)是衡量数据长期变化趋势、业务发展快慢的核心指标。不 ...
2026-09-07 很多数据分析师精通Excel单元格操作,但当被问到“表结构数据的基本处理单位是什么”“字段和记录的本质区别”“为什么表结 ...
2026-09-07随着大数据技术的快速发展,商业竞争逐步从传统的经验式经营转变为数据驱动的精细化运营。海量的用户行为数据、交易数据、运营数 ...
2026-09-04CDA数据分析师 出品 作者:李诗怡 1. 波士顿矩阵(BCG Matrix) 定义: BCG于1970年提出的业务组合分析工具,以"市场增长率"(纵 ...
2026-09-04 数据分析师八成以上的时间在和数据表格打交道,但许多人拿到Excel后习惯性地先算、先分析,结果回头发现漏了一列关键数据, ...
2026-09-04数据透视表是Excel与Power BI中最核心的数据分析工具,具备快速汇总、维度拆分、动态筛选的能力,可高效完成数据归类与统计展示 ...
2026-09-03在Power BI数据分析可视化场景中,堆积柱状图+折线图是最常用的复合图表组合。堆积柱状图适合展示各细分维度当期数值、结构占比 ...
2026-09-03 很多数据分析师每天与Excel打交道,但当被问到“表格结构数据的基本处理单位是什么”“数据类型误判会引发哪些分析错误”“ ...
2026-09-03CDA数据分析师 出品 作者:李诗怡 一、8个核心数据清洗函数 1. TRIM:一键清除多余空格(最常用) 作用:仅保留文本中"单词/字 ...
2026-09-02数据分析的核心并非单纯操作工具、整理报表或绘制图表,而是依靠科学的思维逻辑挖掘数据价值、解释业务现象、指导经营决策。在完 ...
2026-09-02在社会经济、产业研究、区域治理与大数据实证分析中,面板数据是最具研究价值的数据类型。面板数据同时包含截面维度与时间维度信 ...
2026-09-02 很多数据分析师能熟练计算均值、标准差,但当被问到“如何用一张图让业务方3秒内看懂核心结论”“面对不同数据类型该怎么选 ...
2026-09-02在数据驱动决策的体系中,数据分析按照分析目的可分为描述性分析、诊断性分析、预测性分析与指导性分析四大类型。其中,诊断性分 ...
2026-09-01网络请求是Python爬虫开发、接口测试、数据拉取的核心基础功能,Python生态中主要依靠 urllib 和 requests 两大库实现HTTP请求操 ...
2026-09-01 很多数据分析师面对业务问题时,常常感到“知道要分析,却不知道用什么方法”。其实,数据分析并非无章可循——从三大基础范 ...
2026-09-01在数据库设计与业务数据维护中,自增ID是数据表最常用的主键字段,用于唯一标识每一条业务数据,正常状态下ID应保持连续递增。但 ...
2026-08-31在数理统计、数据分析、经济测算与日常量化评估中,平均值是刻画数据集中趋势、反映整体水平的基础核心指标。在实际应用中,最常 ...
2026-08-31在数据驱动的时代,数据分析早已不是“凭经验、靠感觉”的零散操作,而是一套具备固定逻辑、标准化流程的系统方法——这就是数据 ...
2026-08-31