這大半年基本在做數(shù)據(jù)方面的工作粒督,從Elasticsearch到Python爬蟲情龄,近期又多了一項(xiàng)數(shù)據(jù)清洗的工作荠商,本篇主要匯總數(shù)據(jù)清洗的一些原理和相關(guān)技巧,以備后用扣墩。
數(shù)據(jù)清洗是什么
數(shù)據(jù)清洗是通過缺失值處理哲银,噪聲數(shù)據(jù)光滑,識別刪除離散值等方法來提升數(shù)據(jù)質(zhì)量的過程呻惕。
數(shù)據(jù)清洗(Data cleaning)是對數(shù)據(jù)進(jìn)行重新審查和校驗(yàn)的過程荆责,目的在于刪除重復(fù)信息、糾正存在的錯誤蟆融,并提供數(shù)據(jù)一致性草巡。
數(shù)據(jù)清洗,是整個數(shù)據(jù)分析過程中不可缺少的一個環(huán)節(jié)型酥,其結(jié)果質(zhì)量直接關(guān)系到模型效果和最終結(jié)論山憨。在實(shí)際操作中,數(shù)據(jù)清洗通常會占據(jù)分析過程的50%—80%的時間弥喉。
預(yù)處理階段
預(yù)處理階段主要做兩件事情:
- 將數(shù)據(jù)導(dǎo)入處理工具
通常來說郁竟,建議使用數(shù)據(jù)庫,單機(jī)跑數(shù)搭建MySQL環(huán)境即可由境。如果數(shù)據(jù)量大(千萬級以上)棚亩,可使用文本文件存儲+Python操作的方式。
- 看數(shù)據(jù)
這里包含兩個部分:一是看元數(shù)據(jù)虏杰,包括字段解釋讥蟆、數(shù)據(jù)來源、代碼表等等一切描述數(shù)據(jù)的信息纺阔;二是抽取一部分?jǐn)?shù)據(jù)瘸彤,人工審查,對數(shù)據(jù)本身有一個直觀的了解笛钝,并且初步發(fā)現(xiàn)一些問題质况,為之后的處理做準(zhǔn)備。
第一步:缺失值清洗
缺失值是最常見的數(shù)據(jù)問題玻靡,處理缺失值也有很多方法结榄,我建議按照以下四個步驟進(jìn)行:
1、確定缺失值范圍:對每個字段都計(jì)算其缺失值比例囤捻,然后按照缺失比例和字段重要性臼朗,分別制定策略,可用下圖表示:
2、去除不需要的字段:這一步很簡單依溯,直接刪掉即可……但強(qiáng)烈建議清洗每做一步都備份一下老厌,或者在小規(guī)模數(shù)據(jù)上試驗(yàn)成功再處理全量數(shù)據(jù)瘟则,不然刪錯了會追悔莫及黎炉。
3、填充缺失內(nèi)容:某些缺失值可以進(jìn)行填充醋拧,方法有以下三種:
- 以業(yè)務(wù)知識或經(jīng)驗(yàn)推測填充缺失值
- 以同一指標(biāo)的計(jì)算結(jié)果(均值慷嗜、中位數(shù)、眾數(shù)等)填充缺失值
- 以不同指標(biāo)的計(jì)算結(jié)果填充缺失值
4丹壕、重新取數(shù):如果某些指標(biāo)非常重要又缺失率高庆械,那就需要和取數(shù)人員或業(yè)務(wù)人員了解,是否有其他渠道可以取到相關(guān)數(shù)據(jù)菌赖。
以上缭乘,簡單的梳理了缺失值清洗的步驟,但其中有一些內(nèi)容遠(yuǎn)比我說的復(fù)雜琉用,比如填充缺失值堕绩。很多講統(tǒng)計(jì)方法或統(tǒng)計(jì)工具的書籍會提到相關(guān)方法,有興趣的各位可以自行深入了解邑时。
第二步:格式內(nèi)容清洗
如果數(shù)據(jù)是由系統(tǒng)日志而來奴紧,那么通常在格式和內(nèi)容方面,會與元數(shù)據(jù)的描述一致晶丘。而如果數(shù)據(jù)是由人工收集或用戶填寫而來黍氮,則有很大可能性在格式和內(nèi)容上存在一些問題,簡單來說浅浮,格式內(nèi)容問題有以下幾類:
1沫浆、時間、日期滚秩、數(shù)值专执、全半角等顯示格式不一致
這種問題通常與輸入端有關(guān),在整合多來源數(shù)據(jù)時也有可能遇到叔遂,將其處理成一致的某種格式即可他炊。
2、內(nèi)容中有不該存在的字符
某些內(nèi)容可能只包括一部分字符已艰,比如身份證號是數(shù)字+字母痊末,中國人姓名是漢字(趙C這種情況還是少數(shù))。最典型的就是頭哩掺、尾凿叠、中間的空格,也可能出現(xiàn)姓名中存在數(shù)字符號、身份證號中出現(xiàn)漢字等問題盒件。這種情況下蹬碧,需要以半自動校驗(yàn)半人工方式來找出可能存在的問題,并去除不需要的字符炒刁。
3恩沽、內(nèi)容與該字段應(yīng)有內(nèi)容不符
姓名寫了性別,身份證號寫了手機(jī)號等等翔始,均屬這種問題罗心。 但該問題特殊性在于:并不能簡單的以刪除來處理,因?yàn)槌梢蛴锌赡苁侨斯ぬ顚戝e誤城瞎,也有可能是前端沒有校驗(yàn)渤闷,還有可能是導(dǎo)入數(shù)據(jù)時部分或全部存在列沒有對齊的問題,因此要詳細(xì)識別問題類型脖镀。
格式內(nèi)容問題是比較細(xì)節(jié)的問題飒箭,但很多分析失誤都是栽在這個坑上,比如跨表關(guān)聯(lián)或VLOOKUP失斞鸦摇(多個空格導(dǎo)致工具認(rèn)為“陳丹奕”和“陳 丹奕”不是一個人)弦蹂、統(tǒng)計(jì)值不全(數(shù)字里摻個字母當(dāng)然求和時結(jié)果有問題)、模型輸出失敗等
第三步:邏輯錯誤清洗
這部分的工作是去掉一些使用簡單邏輯推理就可以直接發(fā)現(xiàn)問題的數(shù)據(jù)卷员,防止分析結(jié)果走偏盈匾。主要包含以下幾個步驟:
1、去重
有的分析師喜歡把去重放在第一步毕骡,但我強(qiáng)烈建議把去重放在格式內(nèi)容清洗之后削饵,原因已經(jīng)說過了(多個空格導(dǎo)致工具認(rèn)為“陳丹奕”和“陳 丹奕”不是一個人,去重失斘次住)窿撬。
而且,并不是所有的重復(fù)都能這么簡單的去掉叙凡,比如“康師傅”和“康帥傅”劈伴。當(dāng)然,如果數(shù)據(jù)不是人工錄入的握爷,那么簡單去重即可跛璧。
2、去除不合理值
一句話就能說清楚:有人填表時候瞎填新啼,年齡200歲追城,年收入100000萬,這種的就要么刪掉燥撞,要么按缺失值處理座柱。這種值如何發(fā)現(xiàn)迷帜?提示:可用但不限于箱形圖(Box-plot)
3、修正矛盾內(nèi)容
有些字段是可以互相驗(yàn)證的色洞,舉例:身份證號是1101031980XXXXXXXX戏锹,然后年齡填18歲。在這種時候火诸,需要根據(jù)字段的數(shù)據(jù)來源锦针,來判定哪個字段提供的信息更為可靠,去除或重構(gòu)不可靠的字段惭蹂。
邏輯錯誤除了以上列舉的情況伞插,還有很多未列舉的情況,在實(shí)際操作中要酌情處理盾碗。另外,這一步驟在之后的數(shù)據(jù)分析建模過程中有可能重復(fù)舀瓢,因?yàn)榧词箚栴}很簡單廷雅,也并非所有問題都能夠一次找出,我們能做的是使用工具和方法京髓,盡量減少問題出現(xiàn)的可能性航缀,使分析過程更為高效。
第四步:非需求數(shù)據(jù)清洗
這一步說起來非常簡單:把不要的字段刪了堰怨。但實(shí)際操作起來芥玉,有很多問題,例如:
- 把看上去不需要备图,但實(shí)際上對業(yè)務(wù)很重要的字段刪了灿巧;
- 某個字段覺得有用,但又沒想好怎么用揽涮,不知道是否該刪抠藕;
- 一時看走眼,刪錯字段了
如果數(shù)據(jù)量沒有大到不刪字段就沒辦法處理的程度蒋困,那么能不刪的字段盡量不刪盾似。第三種情況,請勤備份數(shù)據(jù)雪标。
第五步:關(guān)聯(lián)性驗(yàn)證
如果你的數(shù)據(jù)有多個來源零院,那么有必要進(jìn)行關(guān)聯(lián)性驗(yàn)證。例如村刨,你有汽車的線下購買信息告抄,也有電話客服問卷信息,兩者通過姓名和手機(jī)號關(guān)聯(lián)烹困,那么要看一下玄妈,同一個人線下登記的車輛信息和線上問卷問出來的車輛信息是不是同一輛,如果不是,那么需要調(diào)整或去除數(shù)據(jù)拟蜻。
多個來源的數(shù)據(jù)整合是非常復(fù)雜的工作绎签,一定要注意數(shù)據(jù)之間的關(guān)聯(lián)性,盡量在分析過程中不要出現(xiàn)數(shù)據(jù)之間互相矛盾酝锅,而你卻毫無察覺的情況诡必。
參考:
https://blog.csdn.net/wyqwilliam/article/details/84801095
https://blog.csdn.net/Orange_Spotty_Cat/article/details/81335640