
導(dǎo)讀:在數(shù)據(jù)清洗過程中,主要處理的是缺失值、異常值和重復(fù)值。所謂清洗,是對數(shù)據(jù)集通過丟棄、填充、替換、去重等操作,達到去除異常、糾正錯誤、補足缺失的目的。
作者:宋天龍
本文轉(zhuǎn)自:大數(shù)據(jù)DT(ID:hzdashuju)
01、數(shù)據(jù)列缺失的4種處理方法
數(shù)據(jù)缺失分為兩種:一種是行記錄的缺失,這種情況又稱數(shù)據(jù)記錄丟失;另一種是數(shù)據(jù)列值的缺失,即由于各種原因?qū)е碌臄?shù)據(jù)記錄中某些列的值空缺。
不同的數(shù)據(jù)存儲和環(huán)境中對于缺失值的表示結(jié)果也不同,例如,數(shù)據(jù)庫中是Null,Python返回對象是None,Pandas或Numpy中是NaN。
在極少數(shù)情況下,部分缺失值也會使用空字符串來代替,但空字符串絕對不同于缺失值。從對象的實體來看,空字符串是有實體的,實體為字符串類型;而缺失值其實是沒有實體的,即沒有數(shù)據(jù)類型。
丟失的數(shù)據(jù)記錄通常無法找回,這里重點討論數(shù)據(jù)列類型缺失值的處理思路。通常有4種思路。
1. 丟棄
這種方法簡單明了,直接刪除帶有缺失值的行記錄(整行刪除)或者列字段(整列刪除),減少缺失數(shù)據(jù)記錄對總體數(shù)據(jù)的影響。但丟棄意味著會消減數(shù)據(jù)特征,以下任何一種場景都不宜采用該方法。
2. 補全
相對丟棄而言,補全是更加常用的缺失值處理方式。通過一定的方法將缺失的數(shù)據(jù)補上,從而形成完整的數(shù)據(jù)記錄,對于后續(xù)的數(shù)據(jù)處理、分析和建模至關(guān)重要。常用的補全方法如下。
3. 真值轉(zhuǎn)換法
在某些情況下,我們可能無法得知缺失值的分布規(guī)律,并且無法對于缺失值采用上述任何一種補全方法做處理;或者我們認為數(shù)據(jù)缺失也是一種規(guī)律,不應(yīng)該輕易對缺失值隨意處理,那么還有一種缺失值處理思路—真值轉(zhuǎn)換。
該思路的根本觀點是,我們承認缺失值的存在,并且把數(shù)據(jù)缺失也作為數(shù)據(jù)分布規(guī)律的一部分,將變量的實際值和缺失值都作為輸入維度參與后續(xù)數(shù)據(jù)處理和模型計算中。但是變量的實際值可以作為變量值參與模型計算,而缺失值通常無法參與運算,因此需要對缺失值進行真值轉(zhuǎn)換。
以用戶性別字段為例,很多數(shù)據(jù)庫集都無法對會員的性別進行補足,但又舍不得將其丟棄掉,那么我們將選擇將其中的值,包括男、女、未知從一個變量的多個值分布狀態(tài)轉(zhuǎn)換為多個變量的真值分布狀態(tài)。
然后將這3列新的字段作為輸入維度替換原來的1個字段參與后續(xù)模型計算。
4. 不處理
在數(shù)據(jù)預(yù)處理階段,對于具有缺失值的數(shù)據(jù)記錄不做任何處理,也是一種思路。這種思路主要看后期的數(shù)據(jù)分析和建模應(yīng)用,很多模型對于缺失值有容忍度或靈活的處理方法,因此在預(yù)處理階段可以不做處理。
常見的能夠自動處理缺失值的模型包括:KNN、決策樹和隨機森林、神經(jīng)網(wǎng)絡(luò)和樸素貝葉斯、DBSCAN(基于密度的帶有噪聲的空間聚類)等。這些模型對于缺失值的處理思路是:
在數(shù)據(jù)建模前的數(shù)據(jù)歸約階段,有一種歸約的思路是降維,降維中有一種直接選擇特征的方法。假如我們通過一定方法確定帶有缺失值(無論缺少字段的值缺失數(shù)量有多少)的字段對于模型的影響非常小,那么我們根本就不需要對缺失值進行處理。
因此,后期建模時的字段或特征的重要性判斷也是決定是否處理字段缺失值的重要參考因素之一。
對于缺失值的處理思路是先通過一定方法找到缺失值,接著分析缺失值在整體樣本中的分布占比,以及缺失值是否具有顯著的無規(guī)律分布特征,然后考慮后續(xù)要使用的模型中是否能滿足缺失值的自動處理,最后決定采用哪種缺失值處理方法。
在選擇處理方法時,注意投入的時間、精力和產(chǎn)出價值,畢竟,處理缺失值只是整個數(shù)據(jù)工作的冰山一角而已。
在數(shù)據(jù)采集時,可在采集端針對各個字段設(shè)置一個默認值。以MySQL為例,在設(shè)計數(shù)據(jù)庫表時,可通過default指定每個字段的默認值,該值必須是常數(shù)。
在這種情況下,假如原本數(shù)據(jù)采集時沒有采集到數(shù)據(jù),字段的值應(yīng)該為Null,雖然由于在建立庫表時設(shè)置了默認值會導(dǎo)致“缺失值”看起來非常正常,但本質(zhì)上還是缺失的。對于這類數(shù)據(jù)需要尤其注意。
02、不要輕易拋棄異常數(shù)據(jù)
異常數(shù)據(jù)是數(shù)據(jù)分布的常態(tài),處于特定分布區(qū)域或范圍之外的數(shù)據(jù)通常會被定義為異?;颉霸胍簟薄.a(chǎn)生數(shù)據(jù)“噪音”的原因很多,例如業(yè)務(wù)運營操作、數(shù)據(jù)采集問題、數(shù)據(jù)同步問題等。
對異常數(shù)據(jù)進行處理前,需要先辨別出到底哪些是真正的數(shù)據(jù)異常。從數(shù)據(jù)異常的狀態(tài)看分為兩種:
大多數(shù)數(shù)據(jù)挖掘或數(shù)據(jù)工作中,異常值都會在數(shù)據(jù)的預(yù)處理過程中被認為是噪音而剔除,以避免其對總體數(shù)據(jù)評估和分析挖掘的影響。但在以下幾種情況下,我們無須對異常值做拋棄處理。
1. 異常值正常反映了業(yè)務(wù)運營結(jié)果
該場景是由業(yè)務(wù)部門的特定動作導(dǎo)致的數(shù)據(jù)分布異常,如果拋棄異常值將導(dǎo)致無法正確反饋業(yè)務(wù)結(jié)果。
例如:公司的A商品正常情況下日銷量為1000臺左右。由于昨日舉行優(yōu)惠促銷活動導(dǎo)致總銷量達到10000臺,由于后端庫存?zhèn)湄洸蛔銓?dǎo)致今日銷量又下降到100臺。在這種情況下,10000臺和100臺都正確地反映了業(yè)務(wù)運營的結(jié)果,而非數(shù)據(jù)異常案例。
2. 異常檢測模型
異常檢測模型是針對整體樣本中的異常數(shù)據(jù)進行分析和挖掘,以便找到其中的異常個案和規(guī)律,這種數(shù)據(jù)應(yīng)用圍繞異常值展開,因此異常值不能做拋棄處理。
異常檢測模型常用于客戶異常識別、信用卡欺詐、貸款審批識別、藥物變異識別、惡劣氣象預(yù)測、網(wǎng)絡(luò)入侵檢測、流量作弊檢測等。在這種情況下,異常數(shù)據(jù)本身是目標(biāo)數(shù)據(jù),如果被處理掉將損失關(guān)鍵信息。
3. 包容異常值的數(shù)據(jù)建模
如果數(shù)據(jù)算法和模型對異常值不敏感,那么即使不處理異常值也不會對模型本身造成負面影響。例如在決策樹中,異常值本身就可以作為一種分裂節(jié)點。
提示:除了拋棄和保留,還有一種思路可對異常值進行處理,例如使用其他統(tǒng)計量、預(yù)測量進行替換。但這種方法不推薦使用,原因是這會將其中的關(guān)鍵分布特征消除,從而改變原始數(shù)據(jù)集的分布規(guī)律。
03、數(shù)據(jù)重復(fù)就需要去重嗎
數(shù)據(jù)集中的重復(fù)值包括以下兩種情況:
去重是重復(fù)值處理的主要方法,主要目的是保留能顯示特征的唯一數(shù)據(jù)記錄。但當(dāng)遇到以下幾種情況時,請慎重(不建議)執(zhí)行數(shù)據(jù)去重。
1. 重復(fù)的記錄用于分析演變規(guī)律
以變化維度表為例。例如在商品類別的維度表中,每個商品對應(yīng)的同1個類別的值應(yīng)該是唯一的,例如蘋果iPhone7屬于個人電子消費品,這樣才能將所有商品分配到唯一類別屬性值中。但當(dāng)所有商品類別的值重構(gòu)或升級時(大多數(shù)情況下隨著公司的發(fā)展都會這么做),原有的商品可能被分配了類別中的不同值。如下表所示展示了這種變化。
此時,我們在數(shù)據(jù)中使用Full join做跨重構(gòu)時間點的類別匹配時,會發(fā)現(xiàn)蘋果iPhone7會同時匹配到個人電子消費品和手機數(shù)碼2條記錄。對于這種情況,需要根據(jù)具體業(yè)務(wù)需求處理。
變化維度表是數(shù)據(jù)倉庫中的概念。維度表類似于匹配表,用來存儲靜態(tài)的維度、屬性等數(shù)據(jù),而這些數(shù)據(jù)一般都不會改變。但是變與不變是一個相對的概念,隨著企業(yè)的不斷發(fā)展,很多時候維度也會隨著發(fā)生變化。因此在某個時間內(nèi)的維度是不變的,而從整體來看維度也是變化的。
對于維度的變化,有3種方式進行處理:
具體到企業(yè)內(nèi)使用哪種方式,通常由數(shù)據(jù)庫管理員根據(jù)實際情況來決定。
注意:真正的變化維度表或維度表不會以中文做主鍵,通常都會使用數(shù)字或字符串類作為唯一關(guān)聯(lián)ID,本節(jié)的示例僅做說明之用。
2. 重復(fù)的記錄用于樣本不均衡處理
在開展分類數(shù)據(jù)建模工作時,樣本不均衡是影響分類模型效果的關(guān)鍵因素之一。解決分類方法的一種方法是對少數(shù)樣本類別做簡單過采樣,通過隨機過采樣,采取簡單復(fù)制樣本的策略來增加少數(shù)類樣本。
經(jīng)過這種處理方式后,也會在數(shù)據(jù)記錄中產(chǎn)生相同記錄的多條數(shù)據(jù)。此時,我們不能對其中的重復(fù)值執(zhí)行去重操作。
3. 重復(fù)的記錄用于檢測業(yè)務(wù)規(guī)則問題
對于以分析應(yīng)用為主的數(shù)據(jù)集而言,存在重復(fù)記錄不會直接影響實際運營,畢竟數(shù)據(jù)集主要是用來做分析的。
但對于事務(wù)型的數(shù)據(jù)而言,重復(fù)數(shù)據(jù)可能意味著重大運營規(guī)則問題,尤其當(dāng)這些重復(fù)值出現(xiàn)在與企業(yè)經(jīng)營中與金錢相關(guān)的業(yè)務(wù)場景時,例如:重復(fù)的訂單、重復(fù)的充值、重復(fù)的預(yù)約項、重復(fù)的出庫申請等。
這些重復(fù)的數(shù)據(jù)記錄通常是由于數(shù)據(jù)采集、存儲、驗證和審核機制的不完善等問題導(dǎo)致的,會直接反映到前臺生產(chǎn)和運營系統(tǒng)。以重復(fù)訂單為例:
因此,這些問題必須在前期數(shù)據(jù)采集和存儲時就通過一定機制解決和避免。如果確實產(chǎn)生了此類問題,那么數(shù)據(jù)工作者或運營工作者可以基于這些重復(fù)值來發(fā)現(xiàn)規(guī)則漏洞,并配合相關(guān)部門,最大限度地降低由此而帶來的運營風(fēng)險。
關(guān)于作者:宋天龍,大數(shù)據(jù)技術(shù)專家,觸脈咨詢合伙人兼副總裁,前Webtrekk中國區(qū)技術(shù)和咨詢負責(zé)人(Webtrekk,德國的在線數(shù)據(jù)分析服務(wù)提供商)。擅長數(shù)據(jù)挖掘、建模、分析與運營,精通端到端數(shù)據(jù)價值場景設(shè)計、業(yè)務(wù)需求轉(zhuǎn)換、數(shù)據(jù)結(jié)構(gòu)梳理、數(shù)據(jù)建模與學(xué)習(xí)以及數(shù)據(jù)工程交付。
直播預(yù)告
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計學(xué)領(lǐng)域,假設(shè)檢驗是驗證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學(xué)計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學(xué)計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務(wù)價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導(dǎo)向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10