據(jù)英國(guó)BBC報(bào)道,由于英國(guó)政府的一個(gè)“技術(shù)故障”,導(dǎo)致9月25日至10月2日期間,有15841例病例沒有被列入英國(guó)新增病例統(tǒng)計(jì)數(shù)據(jù)之內(nèi)。
造成這次事故的原因是負(fù)責(zé)病毒檢測(cè)的第三方機(jī)構(gòu)把每日結(jié)果用.csv文件(以純文本形式存儲(chǔ)的表格數(shù)據(jù))提交給 PHE(英國(guó)公關(guān)健康部門)。問題出在PHE的工作人員選擇了老版的.xls文件格式將數(shù)據(jù)匯總到Excel模板中,再上傳到中央系統(tǒng)。
BBC報(bào)道截圖,深色部分是遺漏數(shù)據(jù)
而.xls這種老版本文件處理數(shù)據(jù)總行數(shù)上限是65536行256列。這個(gè)數(shù)字換算成16進(jìn)制就是(10000)16行(100)16列。Excel使用這種格式導(dǎo)入.csv數(shù)據(jù)時(shí)會(huì)直接扔掉超出65536行的數(shù)據(jù)。
從BBC的數(shù)據(jù)圖分析,英國(guó)政府應(yīng)該是使用多行表格存儲(chǔ)一個(gè)人的數(shù)據(jù),而每天只要確診數(shù)超出約七千人后,超出的部分就會(huì)在匯總時(shí)被丟棄,導(dǎo)致英國(guó)多達(dá)7天的新增確診人數(shù)相近,才發(fā)現(xiàn)了這個(gè)大問題。
隨后PHE表示已經(jīng)及時(shí)改正了這個(gè)錯(cuò)誤,改用新版的.xlsx格式處理數(shù)據(jù)!要知道就算是新版的Excel處理數(shù)據(jù)的上限也不夠高啊,這個(gè)上限只有16進(jìn)制的(100000)16行(4000)16列,就是說僅增加了10倍達(dá)到1048576行而已。如果按10行存儲(chǔ)一個(gè)患者來(lái)算也就是存儲(chǔ)10萬(wàn)人就達(dá)到上限了,而英國(guó)目前已經(jīng)有超過70萬(wàn)確診,只能指望大英帝國(guó)的老爺們只是用Excel處理單日數(shù)據(jù)而不會(huì)用來(lái)匯總?cè)繑?shù)據(jù)了,不然肯定會(huì)超。
其實(shí)Excel本身就不是處理大數(shù)據(jù)的工具。一般來(lái)說超過1000行的數(shù)據(jù)就應(yīng)該轉(zhuǎn)為數(shù)據(jù)庫(kù),強(qiáng)行維護(hù)一個(gè)超大的Excel文件就像用“記事本”寫博士論文一樣,不是不能做,但確實(shí)超出工具的使用定位。更重要的是,Excel無(wú)法滿足數(shù)據(jù)可靠性、完整性,缺乏數(shù)據(jù)校驗(yàn)、備份、回溯和權(quán)限管理的手段。這個(gè)事故就是一個(gè)數(shù)據(jù)完整性事故,教科書一般的案例。
類似由于Excel問題引發(fā)的著名案例還有今年國(guó)際人類基因命名委員會(huì)(HGNC)由于不堪忍受Excel的“智能聯(lián)想”的自作聰明,被迫修改了27個(gè)基因的名字。
在研究人類基因組時(shí),科學(xué)家給2.5萬(wàn)個(gè)基因起了名字,這些名字一般由字母加數(shù)字組成。但其中27個(gè)基因的簡(jiǎn)寫名稱剛好與月份的簡(jiǎn)寫相同,微軟的Excel在處理表格時(shí)會(huì)自動(dòng)將日期簡(jiǎn)寫變成日期格式。這個(gè)“智能”操作導(dǎo)致在頂級(jí)期刊發(fā)表的遺傳學(xué)論文中,有20%論文中的基因列表出現(xiàn)了錯(cuò)誤。
例如某熱門基因叫做Septin 2,常簡(jiǎn)寫為“SEPT2”。但當(dāng)科研人員在Excel中輸入這個(gè)基因的時(shí)候,智能的Excel就會(huì)自動(dòng)聯(lián)想,幫科研人員修改變成日期格式“2-Sep”(9月2日)。更智能的是,這項(xiàng)功能是沒法關(guān)閉的,你唯一能做的就是將存儲(chǔ)格式從一般轉(zhuǎn)變?yōu)槲谋?。但是如果你?dǎo)出數(shù)據(jù)為txt/csv文件,然后再次用Excel打開,就可能會(huì)顯示44076——這是Excel的內(nèi)部數(shù)字代碼,表示日期為2020年9月2日。
由于生物學(xué)家在微軟龐大的用戶群中只占很小的一部分,微軟并不會(huì)因此而改變其產(chǎn)品功能。最終國(guó)際人類基因命名委員會(huì)不得不把SEPT1修改為SEPTIN1,MARCH1修改為MARCHF1,這樣做的目的就是為了避開Excel的自動(dòng)格式轉(zhuǎn)換。