<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>

          手把手教你搞定4類數(shù)據(jù)清洗操作

          共 5275字,需瀏覽 11分鐘

           ·

          2022-02-26 05:33

          導(dǎo)讀:本文介紹數(shù)據(jù)清洗的相關(guān)內(nèi)容,主要涉及缺失值清洗、格式內(nèi)容清洗、邏輯錯誤清洗和維度相關(guān)性檢查四個(gè)方面。




          01 缺失值清洗

          相信大家都聽說過這樣一句話:廢料進(jìn)、廢品出(Garbage in, Garbage out)。如果模型基于錯誤的、無意義的數(shù)據(jù)建立,那么這個(gè)模型也會出錯。因此,如果源數(shù)據(jù)帶有缺失值(NaN),就需要在數(shù)據(jù)預(yù)處理中進(jìn)行清洗。缺失值是最常見的數(shù)據(jù)問題,有很多處理缺失值的方法,一般均按照以下四個(gè)步驟進(jìn)行。

          1. 確定缺失值范圍

          具體代碼如下:

          #?檢查數(shù)據(jù)缺失情況
          def?check_missing_data(df):
          ????return?df.isnull().sum().sort_values(ascending?=?False)
          check_missing_data(rawdata)
          Income????????????1
          Age???????????????1
          Online?Shopper????0
          Region????????????0
          dtype:?int64

          對每個(gè)字段都計(jì)算其缺失值比例后,按照缺失比例和字段重要性,分別制定相應(yīng)的解決策略,可用圖3-6表示。

          ▲圖3-6 缺失值應(yīng)對策略

          圖3-6看似明確了不同情況的應(yīng)對策略,但在實(shí)際應(yīng)用中對特征的重要性判斷非常復(fù)雜,通常需要到模型中去判斷。對數(shù)據(jù)庫進(jìn)行研究并對所需解決的問題進(jìn)行分析,可確定哪些特征屬于重要特征,哪些特征可以省去或者刪掉。

          比如我們很難對每個(gè)數(shù)據(jù)的ID(獨(dú)特編碼)進(jìn)行補(bǔ)全,在有的情境下這些信息是必要信息,不能夠缺失,而在有的情境下卻根本不需要這類信息。

          比如我們有一組網(wǎng)購記錄信息,其中包括每個(gè)用戶在不同時(shí)間段的操作。當(dāng)我們希望對每個(gè)用戶進(jìn)行分析的時(shí)候,用戶名(UserID)就是不可或缺的,那么缺失用戶名的數(shù)據(jù)很可能需要被清除。但如果我們不需要精確到對個(gè)人行為進(jìn)行分析,那么用戶名就沒那么必要了。

          所以在缺失值補(bǔ)全的操作前,探索數(shù)據(jù)和深入了解數(shù)據(jù)庫是必要的。我們必須清楚每個(gè)變量所代表的含義,以及分析的問題可能關(guān)聯(lián)的數(shù)據(jù)。在一個(gè)非常復(fù)雜的數(shù)據(jù)庫中,在解決某個(gè)實(shí)際問題時(shí),通常不需要所有的變量參與運(yùn)算。

          2. 去除不需要的字段

          本步驟將減少數(shù)據(jù)維度,剔除一些明顯與數(shù)據(jù)分析任務(wù)不匹配的數(shù)據(jù),讓與任務(wù)相關(guān)的數(shù)據(jù)更為突出。注意,最好不要更改原始數(shù)據(jù),只是在下一步處理前提取出用于分析的數(shù)據(jù)。

          同時(shí)這一步需要考慮之前缺失值的情況,保留對于有些缺失值占比不大或者通過其他信息可以進(jìn)行推斷的特征,去除缺失量太多的數(shù)據(jù)行或列。對于新手,強(qiáng)烈建議在清洗的過程中每做一步都備份一下,或者在小規(guī)模數(shù)據(jù)上試驗(yàn)成功后再處理全量數(shù)據(jù),節(jié)約時(shí)間,也充分留足撤銷操作的余地。

          3. 填充缺失內(nèi)容

          具體代碼如下:

          test1?=?rawdata.copy()#?將更改前的數(shù)據(jù)進(jìn)行備份
          test1?=?test1.head(3)#?提取前三行進(jìn)行測試
          test1?=?test1.dropna()#?去除數(shù)據(jù)中有缺失值的行
          print(test1)
          test1
          ?????name??????toy??????born
          0????Andy??????NaN??????NaN
          1????Cindy?????Gun??????1998-12-25
          2????Wendy?????Gum??????NaN
          test1?=?test1.dropna(axis=0)#?去除數(shù)據(jù)中有缺失值的行
          ?????name??????toy??????born
          1????Cindy?????Gun??????1998-12-25
          test1?=?test1.dropna(axis='columns')#?去除數(shù)據(jù)中有缺失值的列
          ?????name
          0????Andy
          1????Cindy
          2????Wendy
          test1?=?test1.dropna(how='all')#?去除數(shù)據(jù)完全缺失的行
          test1?=?test1.dropna(thresh=2)#?保留行中至少有兩個(gè)值的行
          test1?=?test1.dropna(how='any')#?去除數(shù)據(jù)中含有缺失值的行
          test1?=?test1.dropna(how='any',subset=['toy'])#?去除toy列中含有缺失值的行
          test1.dropna(inplace=True)#?在這個(gè)變量名中直接保存結(jié)果

          在實(shí)際應(yīng)用中,第2步和第3步的操作通常協(xié)同進(jìn)行,在判斷完維度相關(guān)性與重要性后,對想要保留的維度進(jìn)行填充,最后對數(shù)據(jù)行進(jìn)行必要的清洗,以避免可進(jìn)行填充的有效字段在清洗時(shí)被剔除。

          1)以同一指標(biāo)的計(jì)算結(jié)果(均值、中位數(shù)、眾數(shù)等)填充缺失值。代碼如下:

          test1?=?test1.fillna(test1.mean())#?用均值填充缺失值
          test1?=?test1.fillna(test1.median())#?用中位數(shù)填充缺失值
          test1?=?test1.fillna(test1.mode())#?用眾數(shù)填充缺失值

          2)通過找尋帶有缺失值的變量與其他數(shù)據(jù)完整的變量之間的關(guān)系進(jìn)行建模,使用計(jì)算結(jié)果進(jìn)行填充(這一方法較為復(fù)雜,而且結(jié)果質(zhì)量可能參差不齊,可在后期習(xí)得數(shù)據(jù)建模技巧后進(jìn)行嘗試)。

          3)以其他變量的計(jì)算結(jié)果填充缺失值。舉個(gè)最簡單的例子:年齡字段缺失,但是有屏蔽后六位的身份證號信息,那么就可以輕松找出出生年月,算出目前年齡。

          4)以業(yè)務(wù)知識或經(jīng)驗(yàn)推測填充缺失值。

          4. 重新取數(shù)

          如果某些變量非常重要同時(shí)缺失率高,那就需要和取數(shù)人員或業(yè)務(wù)人員進(jìn)行溝通,了解是否有其他渠道可以取到相關(guān)數(shù)據(jù)。

          繼續(xù)以Income_n_onlineshopping為例介紹,如圖3-7所示。

          ▲圖3-7?查看數(shù)據(jù)是否存在缺失值

          統(tǒng)計(jì)各列的缺失值情況,結(jié)果如圖3-8所示。

          dataset.isna().sum()??????????#?統(tǒng)計(jì)各列缺失值情況

          ▲圖3-8?統(tǒng)計(jì)數(shù)據(jù)缺失值個(gè)數(shù)

          從圖3-7可以看出,這10行數(shù)據(jù)中第4行和第6行的部分值顯示為NaN,也就是數(shù)據(jù)發(fā)生缺失。有時(shí)數(shù)據(jù)本身可能并不是在缺失值位置上留空,而是用0對空缺位置進(jìn)行填充,根據(jù)對數(shù)據(jù)的理解我們也可以分辨出是否需要對0值數(shù)據(jù)進(jìn)行統(tǒng)計(jì)和轉(zhuǎn)換。

          由于數(shù)值缺失占比較少,我們可以通過計(jì)算填補(bǔ)空缺,這里我們采用平均值填充。

          #?設(shè)定填充方式為平均值填充
          imputer?=?SimpleImputer(missing_values=np.nan,?strategy='mean')??
          #?選取目標(biāo)列
          imputer?=?imputer.fit(rawdata.iloc[:,1:3])?
          #?對計(jì)算結(jié)果進(jìn)行填充
          rawdata.iloc[:,1:3]?=?imputer.transform(rawdata.iloc[:,1:3])?
          #?調(diào)整數(shù)據(jù)
          rawdata.iloc[:,1:3]?=?rawdata.iloc[:,1:3].round(0).astype(int)?


          02 格式內(nèi)容清洗

          如果數(shù)據(jù)是由系統(tǒng)日志而來的,那么通常會在格式和內(nèi)容方面與元數(shù)據(jù)的描述保持一致。而如果數(shù)據(jù)是由人工收集或用戶填寫而來的,則有很大可能會在格式和內(nèi)容上存在問題。簡單來說,格式和內(nèi)容的問題有以下幾類。

          1. 時(shí)間、日期、數(shù)值、全半角等格式不一致

          這種問題通常與輸入端有關(guān),在整合多來源數(shù)據(jù)時(shí)也有可能遇到,將其處理成一致的格式即可。

          2. 數(shù)據(jù)值含有“非法”字符

          字段中的值通常是有范圍的,有些字符不適合出現(xiàn)在某些字段中,比如:

          • 身份證號必須是數(shù)字+字母。
          • 中國人姓名只能為漢字(李A(yù)、張C這種情況是少數(shù))。
          • 出現(xiàn)在頭、尾、中間的空格。

          解決這類問題時(shí),需要以半自動校驗(yàn)半人工方式來找出可能存在的問題,并去除不合適的字符。

          3. 數(shù)據(jù)值與該字段應(yīng)有內(nèi)容不符

          例如,姓名欄填了性別、身份證號中寫了手機(jī)號等。這類問題的特殊性在于不能簡單地以刪除方式來處理,因?yàn)橛锌赡苁侨斯ぬ顚戝e誤,前端沒有校驗(yàn),或者導(dǎo)入數(shù)據(jù)時(shí)部分或全部存在列沒有對齊導(dǎo)致,需要具體識別問題類型后再有針對性地解決。

          格式內(nèi)容出錯是非常細(xì)節(jié)的問題,但很多分析失誤都是源于此問題。比如跨表關(guān)聯(lián)失敗,是因?yàn)槎鄠€(gè)空格導(dǎo)致關(guān)鍵字段進(jìn)行交集運(yùn)算時(shí)認(rèn)為“劉翔”和“劉 翔”不是一個(gè)人;統(tǒng)計(jì)值不全,是因?yàn)閿?shù)字里摻個(gè)字母在之后求和時(shí)發(fā)生問題;模型輸出失敗或效果不好,是因?yàn)閿?shù)據(jù)對錯列了,把日期和年齡混了等。

          因此,在進(jìn)行這一步時(shí),需要仔細(xì)檢查數(shù)據(jù)格式和內(nèi)容,特別是當(dāng)數(shù)據(jù)源自用戶手工填寫且校驗(yàn)機(jī)制不完善時(shí)。


          03 邏輯錯誤清洗

          這一步工作的目的是去掉一些使用簡單邏輯推理就可以直接發(fā)現(xiàn)問題的數(shù)據(jù),防止由此導(dǎo)致分析結(jié)果偏差。邏輯錯誤清洗主要包含以下幾個(gè)步驟。

          1. 去重

          由于格式不同,原本重復(fù)的數(shù)據(jù)被認(rèn)為并非重復(fù)而沒能成功剔除,比如由于空格導(dǎo)致算法認(rèn)為“劉翔”和“劉 翔”不是一個(gè)人,去重失敗。由于重名的情況很常見,即使中間空格被去掉后兩條數(shù)據(jù)的值一致,也很難直接決定將第二條數(shù)據(jù)刪除,這時(shí)就需要比較其他字段的值。

          還有由于關(guān)鍵字值輸入時(shí)發(fā)生錯誤導(dǎo)致原本一致的信息被重復(fù)錄入,也需要借助其他字段對內(nèi)容進(jìn)行查重。比如“ABC銀行”與“ABC銀行”,單看名字可以看出這兩條信息大概率是重復(fù)的,但只有對比其他信息才能確保去重的正確性,比如對比兩家公司的電話與地址是否完全相同。如果數(shù)據(jù)不是人工錄入的,那么簡單去重即可。

          2. 去除不合理值

          如果字段內(nèi)取值超過合理范圍,比如“年齡:180歲;籍貫:火星”,則這種數(shù)據(jù)要么刪掉,要么按缺失值處理。當(dāng)然最好的做法是在前期收集這種字段的數(shù)據(jù)時(shí)讓用戶在有限范圍內(nèi)進(jìn)行選取,以避免此情況出現(xiàn)。可以通過異常值查找去除不合理值。

          3. 修正矛盾內(nèi)容

          有時(shí)我們擁有多個(gè)包含相同信息的維度特征,這時(shí)就可以進(jìn)行交叉驗(yàn)證,修復(fù)矛盾內(nèi)容。比如一個(gè)隱去后六位的身份證號,100000199701XXXXXX,而年齡字段數(shù)據(jù)為18,這顯然是不合理的,由于身份證號可信度更高,所以我們應(yīng)該對年齡字段進(jìn)行修復(fù)。

          更好的做法是通過脫敏的身份證號提取出生年月,直接建立新的出生日期字段并用此年齡字段替換用戶手動填寫的年齡字段。

          在真實(shí)世界中獲取的數(shù)據(jù)常常會包含錯誤信息,有的是人為導(dǎo)致,有的是非人為導(dǎo)致,我們可以通過交叉驗(yàn)證及時(shí)發(fā)現(xiàn)并修復(fù)矛盾內(nèi)容,為后期建模提供更高質(zhì)量的數(shù)據(jù)信息。


          04 維度相關(guān)性檢查

          當(dāng)數(shù)據(jù)庫中有多個(gè)變量時(shí),我們需要考慮變量之間的相互聯(lián)系,而相關(guān)性就是用來表示定性變量或定量變量之間關(guān)系的。相關(guān)性研究可以幫助我們了解變量之間的關(guān)聯(lián)性。比如:

          • 每日食品中卡路里攝入量跟體重很有可能有較大的相關(guān)性;
          • 子女和父母血型之間具有高關(guān)聯(lián)性;
          • 學(xué)習(xí)的時(shí)間長度和考試成績通常也有高關(guān)聯(lián)性。

          1)檢查數(shù)據(jù)相關(guān)性:

          rawdata.corr()?????#?相關(guān)性矩陣?

          結(jié)果如圖3-9所示。

          ▲圖3-9 相關(guān)性矩陣

          2)檢查數(shù)據(jù)協(xié)方差:

          rawdata.cov()??????#?協(xié)方差矩陣

          結(jié)果如圖3-10所示。

          ▲圖3-10 協(xié)方差矩陣

          關(guān)于作者:劉鵬,教授,清華大學(xué)博士,云計(jì)算、大數(shù)據(jù)和人工智能領(lǐng)域的知名專家,南京云創(chuàng)大數(shù)據(jù)科技股份有限公司總裁、中國大數(shù)據(jù)應(yīng)用聯(lián)盟人工智能專家委員會主任。中國電子學(xué)會云計(jì)算專家委員會云存儲組組長、工業(yè)和信息化部云計(jì)算研究中心專家。
          高中強(qiáng),人工智能與大數(shù)據(jù)領(lǐng)域技術(shù)專家,有非常深厚的積累,擅長機(jī)器學(xué)習(xí)和自然語言處理,尤其是深度學(xué)習(xí),熟悉Tensorflow、PyTorch等深度學(xué)習(xí)開發(fā)框架。曾獲“2019年全國大學(xué)生數(shù)學(xué)建模優(yōu)秀命題人獎”。參與鐘南山院士指導(dǎo)新型冠狀病毒人工智能預(yù)測系統(tǒng)研發(fā)項(xiàng)目,與鐘南山院士團(tuán)隊(duì)共同發(fā)表學(xué)術(shù)論文。

          本文摘編自Python金融數(shù)據(jù)挖掘與分析實(shí)戰(zhàn)》,經(jīng)出版方授權(quán)發(fā)布。(ISBN:9787111696506)


          (歡迎大家加入數(shù)據(jù)工匠知識星球獲取更多資訊。)


          聯(lián)系我們

          掃描二維碼關(guān)注我們

          微信:SZH9543
          郵箱:[email protected]
          QQ:2286075659

          熱門文章


          你知道數(shù)據(jù)治理,你聽過數(shù)據(jù)編織嗎?


          必讀|數(shù)字化轉(zhuǎn)型是啥!中臺為什么是個(gè)坑!


          頂級咨詢顧問馬謖的擇業(yè)錯誤


          中國雙碳大數(shù)據(jù)指數(shù)白皮書(2020)(內(nèi)附下載鏈接)


          如何成為一名“被信任的咨詢顧問”?


          以架構(gòu)視角解讀和落實(shí)銀行數(shù)字化轉(zhuǎn)型的兩份重磅指導(dǎo)文件


          建議!數(shù)據(jù)建模方法標(biāo)準(zhǔn)及在裝備管理領(lǐng)域中的應(yīng)用

          我們的使命:發(fā)展數(shù)據(jù)治理行業(yè)、普及數(shù)據(jù)治理知識、改變企業(yè)數(shù)據(jù)管理現(xiàn)狀、提高企業(yè)數(shù)據(jù)質(zhì)量、推動企業(yè)走進(jìn)大數(shù)據(jù)時(shí)代。

          我們的愿景:打造數(shù)據(jù)治理專家、數(shù)據(jù)治理平臺、數(shù)據(jù)治理生態(tài)圈。

          我們的價(jià)值觀:凝聚行業(yè)力量、打造數(shù)據(jù)治理全鏈條平臺、改變數(shù)據(jù)治理生態(tài)圈。


          了解更多精彩內(nèi)容




          長按,識別二維碼,關(guān)注我們吧!

          數(shù)據(jù)工匠俱樂部

          微信號:zgsjgjjlb

          瀏覽 15
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  521大香蕉网站。大香蕉综合伊人 91成人视频一区二区三区在线观看 | 毛片在线看片 | 国产小骚逼| 最新黄色免费视频 | 免费在线观看视频a |