英国新冠数据统计出错,Excel背锅
2020-11-16
据英国BBC报道,由于英国政府的一个“技術故障”,导致9月25日至10月2日期间,有15841例病例没有被列入英国新增病例统计数据之内。
造成这次事故的原因是负责病毒检测的第三方机构把每日结果用.csv文件(以纯文本形式存储的表格数据)提交给 PHE(英国公关健康部门)。问题出在PHE的工作人员选择了老版的.xls文件格式将数据汇总到Excel模板中,再上传到中央系统。
BBC报道截图,深色部分是遗漏数据
而.xls这种老版本文件处理数据总行数上限是65536行256列。这个数字换算成16进制就是(10000)16行(100)16列。Excel使用这种格式导入.csv数据时会直接扔掉超出65536行的数据。
从BBC的数据图分析,英国政府应该是使用多行表格存储一个人的数据,而每天只要确诊数超出约七千人后,超出的部分就会在汇总时被丢弃,导致英国多达7天的新增确诊人数相近,才发现了这个大问题。
随后PHE表示已经及时改正了这个错误,改用新版的.xlsx格式处理数据!要知道就算是新版的Excel处理数据的上限也不够高啊,这个上限只有16进制的(100000)16行(4000)16列,就是说仅增加了10倍达到1048576行而已。如果按10行存储一个患者来算也就是存储10万人就达到上限了,而英国目前已经有超过70万确诊,只能指望大英帝国的老爷们只是用Excel处理单日数据而不会用来汇总全部数据了,不然肯定会超。
其实Excel本身就不是处理大数据的工具。一般来说超过1000行的数据就应该转为数据库,强行维护一个超大的Excel文件就像用“记事本”写博士论文一样,不是不能做,但确实超出工具的使用定位。更重要的是,Excel无法满足数据可靠性、完整性,缺乏数据校验、备份、回溯和权限管理的手段。这个事故就是一个数据完整性事故,教科书一般的案例。
类似由于Excel问题引发的著名案例还有今年国际人类基因命名委员会(HGNC)由于不堪忍受Excel的“智能联想”的自作聪明,被迫修改了27个基因的名字。
在研究人类基因组时,科学家给2.5万个基因起了名字,这些名字一般由字母加数字组成。但其中27个基因的简写名称刚好与月份的简写相同,微软的Excel在处理表格时会自动将日期简写变成日期格式。这个“智能”操作导致在顶级期刊发表的遗传学论文中,有20%论文中的基因列表出现了错误。
例如某热门基因叫做Septin 2,常简写为“SEPT2”。但当科研人员在Excel中输入这个基因的时候,智能的Excel就会自动联想,帮科研人员修改变成日期格式“2-Sep”(9月2日)。更智能的是,这项功能是没法关闭的,你唯一能做的就是将存储格式从一般转变为文本。但是如果你导出数据为txt/csv文件,然后再次用Excel打开,就可能会显示44076——这是Excel的内部数字代码,表示日期为2020年9月2日。
由于生物学家在微软庞大的用户群中只占很小的一部分,微软并不会因此而改变其产品功能。最终国际人类基因命名委员会不得不把SEPT1修改为SEPTIN1,MARCH1修改为MARCHF1,这样做的目的就是为了避开Excel的自动格式转换。