<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用Pandas做數(shù)據(jù)清洗,我一般都這么干……【文末送書】

          共 3142字,需瀏覽 7分鐘

           ·

          2020-12-04 10:56


          導讀

          作為一名數(shù)據(jù)分析師,每天都在完成各種數(shù)據(jù)分析需求,其中數(shù)據(jù)清洗是必不可少的一個步驟。一般而言,當提及數(shù)據(jù)清洗時,其實是主要包括了缺失值處理、重復值處理和異常值處理三類操作,本文即圍繞這這三個方面介紹一下個人的一些習慣操作。


          文末送書


          01 缺失值處理

          缺失值是各類數(shù)據(jù)集中經(jīng)常會遇到的情形,相較于工整完全的數(shù)據(jù)記錄,帶有一定的缺失值更接近于數(shù)據(jù)的真實原貌。一般而言,缺失值處理的原則無非就是以下三種:

          • 缺失比例較小,可直接過濾掉缺失值所在行

          • 缺失比例較大,根據(jù)特定的業(yè)務理解進行一定規(guī)則的填充

          • 缺失記錄有特定業(yè)務含義,不做任何處理


          至于在實際數(shù)據(jù)分析中應該采取哪種方案來處理,這個要結(jié)合具體的數(shù)據(jù)分析場景和業(yè)務需求,不可一概而論。所以,這里僅給出基于Pandas的具體處理方法。


          1.?過濾掉缺失值所在行
          在過濾之前,首先要分析缺失比例的大小,其基礎(chǔ)在于判斷各個值是否為空,pandas提供了4個相關(guān)API,包括

          • isna(), isnull(),二者等價

          • notna(),?notnull(),二者等價


          這四個函數(shù)用法也非常顯然了,前兩個用于判斷各元素是否為空,后兩個則用于判斷各元素是否非空。4個函數(shù)返回值元素類型均為Boolean值,所以可進一步嵌套一層mean()函數(shù)直接計算缺失比例。例如:


          在完成缺失值比例分析的基礎(chǔ)上,斷定可以直接過濾掉缺失值,那么僅需執(zhí)行如下操作即可:


          2.?對缺失值進行填充

          有些情況下,對缺失值直接進行過濾會導致樣本分布受到影響。同時基于特定的業(yè)務理解,可以采取一定的規(guī)則進行填充,一般而言填充的方式包括兩大類:特定值和特定規(guī)則。缺失值的填充API主要是用fillna(),當然也可手動用缺失值篩選+賦值的形式完成這一操作。


          • 特定值填充。特定值填充一般是對缺失的位置填充某種特定值,當然這里的特定值一般又可細分為3種情況:常數(shù),均值,眾數(shù),其中均值填充主要適用于取值連續(xù)的情形,而眾數(shù)填充則適用于取值離散的情形,常數(shù)值填充則是基于特定的業(yè)務含義。舉個例子:


          • 特定規(guī)則填充。在某些不適合利用常數(shù)值填充的情況下時,基于特定場景可基于特定規(guī)則填充,例如得到疫情期間各地累計感染人數(shù),當某地某天的感染人數(shù)最新數(shù)字缺失時,我們可以用其前一天的感染人數(shù)填充。這實際上就是前向填充,類似地還有后向填充。再比如,獲取一天各時刻的溫度值,當某一時刻溫度數(shù)據(jù)缺失時,那么實際上可基于前后記錄擬合插值的方式填充。



          02 重復值處理

          與缺失值一樣,重復值也是數(shù)據(jù)分析中經(jīng)常遇到的一種情形,一般是由于樣本重復記錄或重復讀取造成。當然,根據(jù)特定的分析場景和業(yè)務需求,對于重復值的處理實際上也包含兩種情況:

          • 對重復值進行過濾

          • 重復值存在合理性,不做處理


          這里僅給出需過濾重復值時的處理方法。既然要過濾掉重復值,那么首先要判斷哪些是重復值,pandas中提供接口為duplicated(),具體如下:


          類似地,執(zhí)行重復值過濾的接口為drop_duplicates(),仍然可選keep參數(shù)保留不同不同的重復記錄:


          另外,在某些情況下不需要針對所有列進行重復值判斷,而是僅在特定幾列范圍內(nèi)展開去重,此時drop_duplicates還可選一個參數(shù)subset,接收列名序列。



          03 異常值處理

          不同于缺失值和重復值那樣規(guī)則相對明朗,異常值的處理相對更為復雜。首先要基于業(yè)務理解出什么情況下算作是異常值,其次還要指定異常值的處理規(guī)則,要么是對異常值所在記錄進行過濾,要么是按照一定的規(guī)則進行轉(zhuǎn)換,使得異常值變?yōu)?正常值"。


          就個人目前所應用到數(shù)據(jù)處理而言,常用的異常值判斷規(guī)則包括如下幾類:
          • 基于數(shù)值范圍,對于取值連續(xù)的情形,可判斷數(shù)值的絕對大小是否在合理范圍,分布是否在箱線圖之間,例如車速的大小一般可用[0, 120]作為合理區(qū)間進行判斷;對于取值離散的情形,可判斷取值是否在指定的候選集之間,例如性別的取值范圍可能包括男、女和未知三種。

          • 基于特定業(yè)務含義,例如每條記錄中的兩個字段對應了明確的大小或先后關(guān)系,當不滿足這一關(guān)系時可判斷為異常值。例如城市抓拍過車記錄中,對于一條包括出發(fā)時間和到達時間的車輛行駛記錄,當?shù)竭_時間小于等于出發(fā)時間時,或者到達時間與出發(fā)時間的時間差小于某個閾值時,都可以認為是異常記錄

          • 基于特定業(yè)務含義,單條記錄并無異常,但放在整個數(shù)據(jù)集中則是異常記錄。例如仍以城市抓拍車輛出行為例,雖然從單條記錄來看并無異常之處,但對于整個數(shù)據(jù)集來看,某車牌號在全天僅出現(xiàn)1次,那么相較于該車牌號確實僅出現(xiàn)1次而言,認為該記錄中的車牌號識別錯誤的可能性更為合理,因為該條記錄也應認為是異常記錄。


          這里以某真實GPS數(shù)據(jù)集為例,原始數(shù)據(jù)集如下:


          以上述三種異常值的清洗需求為例,其執(zhí)行流程分別如下:
          1. 清洗單字段取值異常的記錄

          以速度字段為例,首先判斷其取值分布情況:

          繪圖接口:seaborn.boxenplot()


          顯然,無論是從箱線圖來看,還是從絕對取值來看,都有一部分速度值異常的記錄,為了過濾掉這些記錄,可直接用query()實現(xiàn),query的具體用法可參考歷史文章Pandas用了一年,這3個函數(shù)是我的最愛……


          2. 根據(jù)記錄內(nèi)部條件過濾異常值
          這里,我們暫時脫離GPS數(shù)據(jù)中的具體含義,假設(shè)給定規(guī)則為run_status≥status,否則視為異常記錄,那么執(zhí)行這一過程的方法為:


          更一般地,要求run_status-status>=1,則可用如下方法實現(xiàn):


          3. 基于整個數(shù)據(jù)集進行整體判斷

          在以上數(shù)據(jù)集中,假定device_no對應了唯一GPS終端信息,現(xiàn)在要求各終端在整個數(shù)據(jù)集中要求至少出現(xiàn)10次,否則認為其為異常記錄,例如某device_no在整個數(shù)據(jù)集中僅出現(xiàn)了9次,那么認為這9條記錄均為異常記錄而需要清洗。實現(xiàn)方法也有很多,但借助groupby+transform可輕松實現(xiàn)這一清洗過程:


          對groupby的各種操作不熟悉的,可參考歷史文章Pandas中g(shù)roupby的這些用法你都知道嗎?



          最后,感謝北京大學出版社贊助,送書《Python數(shù)據(jù)分析全流程實操指南》1本:


          內(nèi)容簡介:

          本書基于Python3.7版本軟件編寫,全書主要圍繞整個數(shù)據(jù)分析方法論的標準流程,為讀者重點展示了Python在數(shù)據(jù)獲取、數(shù)據(jù)處理、數(shù)據(jù)探索、數(shù)據(jù)分析及數(shù)據(jù)可視化等領(lǐng)域的應用技術(shù)。

          本書首先介紹了數(shù)據(jù)分析的方法論,給讀者介紹了具體的數(shù)據(jù)分析挖掘標準流程,接著介紹了Python常用的工具包,包括科學計算庫NumPy、數(shù)據(jù)分析庫Pandas、數(shù)據(jù)挖掘庫Scikit-Learn,以及數(shù)據(jù)可視化庫Matplotlib和Seaborn的基本知識,并從數(shù)據(jù)分析挖掘過程中的數(shù)據(jù)獲取、數(shù)據(jù)處理、數(shù)據(jù)探索等實際業(yè)務應用出發(fā),以互聯(lián)網(wǎng)、金融及零售等行業(yè)真實案例,比如客戶分群、產(chǎn)品精準營銷、房價預測、特征降維等,深入淺出、循序漸進地介紹Python數(shù)據(jù)分析的全過程。?


          送書規(guī)則:截至本周三12月2日晚20:00,公眾號后臺查看分享最多前3名中挑選一名幸運讀者,屆時會通過截圖公布結(jié)果并添加微信聯(lián)系,歡迎各位多多分享在看點贊。另外,后續(xù)將不定期開啟送書活動。



          相關(guān)閱讀:


          瀏覽 36
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  狼人综合网 | 黄色小视频在线 | 无码高清一卡二卡免费视频 | 国产美女操逼黄站 | 日本免费黄色 |