大數據爬取、清洗與可視化教程課件第八章數據清洗_第1頁
大數據爬取、清洗與可視化教程課件第八章數據清洗_第2頁
大數據爬取、清洗與可視化教程課件第八章數據清洗_第3頁
大數據爬取、清洗與可視化教程課件第八章數據清洗_第4頁
大數據爬取、清洗與可視化教程課件第八章數據清洗_第5頁
已閱讀5頁,還剩30頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第8章

數據清洗

目錄8.1數據清洗概述8.1.1數據清洗原理8.1.2主要數據類型8.1.3常用工具8.2數據清洗方法8.2.1重復數據處理8.2.2缺失數據處理8.2.3異常數據處理8.2.4格式內容清洗8.2.5邏輯錯誤清洗

8.3

數據規整8.3.1字段拆分8.3.2數據分組8.3.3數據聚合8.3.4數據分割8.3.5數據合并第8章

數據清洗

在數據開發過程中,我們采集到的海量數據一般是不完整的、有噪聲的且是不一致的。如果直接將這些雜亂的數據應用到數據挖掘和可視化之中,可能會導致大量的誤差出現,甚至是決策的干擾或者錯誤,因此必須要先經過數據清洗過程,過濾一些錯誤信息。

所謂數據清洗,就是試圖檢測和去除數據集合中的噪聲數據和無關數據,處理重復數據、彌補缺失數據和知識背景中的白噪聲的過程,從而達到提升數據質量的目的。數據清洗在整個數據分析過程中是不可或缺的一個環節,在實際環境下,數據清洗的時間和復雜度甚至高于數據爬取的過程。8.1數據清洗概述

數據清洗(DataCleaning)是對數據進行重新審查和校驗的過程,其目的在于刪除重復信息、糾正存在的錯誤,并提供數據一致性。

數據清洗工作是數據分析過程中的關鍵步驟,其結果關系到模型的最終運行效果和最終結論。而這一切操作都源自數據清洗的對象——數據的質量。部分學者認為數據質量問題應該在數據產生的源頭解決,也就是說,在爬取時應盡量避免錯誤數據的產生。然而在實際環境下,由于各種不可避免的因素,這一目標很難達成。

基于此,數據清洗這一步驟是必然存在的,它可能會出現在數據加載到數據倉庫之前的環節,也有可能在數據分析之后再進行,這完全取決于應用環節的需求,但是無論如何,這一步驟是不可能跳過的。在特定的場景下,數據清洗過程的操作具備一定的重復性,因此開發人員一般會采用可復用的方式循環執行此過程。8.1數據清洗概述8.1.1數據清洗原理

因為數據倉庫中的數據是面向某個主題的數據的集合,這些數據從多個業務系統中爬取而來且包含歷史數據,這樣就避免不了有的數據是錯誤數據、有的數據相互之間有沖突,這些錯誤的或有沖突的數據顯然不是我們分析的對象,它們被稱為“臟數據”。

數據清洗是利用有關技術,如數理統計、數據挖掘或預定義的清理規則,將臟數據轉化為滿足數據質量要求的數據。本質上,數據清洗就是把“臟”的數據“洗掉”,它是發現并糾正數據文件中可識別的錯誤的最后一道程序,包括檢查數據一致性、處理無效值和缺失值等。8.1數據清洗概述8.1.2主要數據類型

不符合要求的數據主要有不完整的數據(缺失數據)、異常數據和重復數據三大類。1.缺失數據

這一類數據主要是一些必備信息的缺失,如供應商的名稱、公司的名稱、客戶的區域信息缺失,業務系統中主表與明細表不匹配等。這一類數據過濾出來后,按缺失的內容分別寫入不同Excel文件向客戶提交,并要求在規定的時間內補全,補全后才寫入數據倉庫。8.1數據清洗概述8.1.2主要數據類型2.異常數據

異常數據產生的原因是業務系統不夠健全,在接收輸入后沒有進行判斷就直接寫入后臺數據庫造成的,比如數值型數據輸入成全角數字字符、字符串數據后面有一個回車操作、日期格式不正確、日期越界等。這一類數據也要進行分類,對于類似于全角字符、數據前后有不可見字符等問題,只能通過編碼方式找出來,然后要求客戶在業務系統修正之后爬取數據。日期格式不正確或者日期越界將導致系統運行失敗,這一類錯誤同樣需要修正之后再進行爬取。3.重復數據

對于這一類數據,特別是多個維度的表中會出現這種情況,將重復數據記錄的所有字段導出來,讓客戶確認并整理。8.1數據清洗概述8.1.2主要數據類型

數據清洗是一個反復的過程,不可能在幾天內完成。對于過濾掉的數據,要寫入文本文件或者將過濾數據寫入數據表。在開發初期,要頻繁地進行溝通,不斷修正錯誤和驗證數據,以提高數據清洗的效率。需要注意的是,在數據清洗時,不要將有用的數據過濾掉,對于每個過濾規則要認真進行驗證

并確認。

數據清洗的流程如圖8-1所示。第一步就是獲取各種形式的數據,包含臟數據;第二步是確定數據清洗的策略和方法,這部分由實際環境的需求所決定,同時會結合數理統計和數據挖掘等相關技術,實現缺失值的清洗,去除不需要的字段,填充缺失內容,修正錯誤的內容;第三步即重新爬取數據,此時的數據即可滿足實際環境下的基本需求。8.1數據清洗概述

圖8-1數據清洗的流程8.1數據清洗概述8.1.3常用工具

在數據清洗和分析過程中,經常使用基于Python的第三方工具輔助完成,這些工具使用簡單,效率較高。常用的數據清洗和分析工具有NumPy、Pandas和Scipy等,本節主要針對NumPy和Scipy進行簡單介紹。1.NumPyNumPy(NumericalPython)是Python的一種開源的數值計算擴展工具。它可用來存儲和處理大型矩陣,比Python自身的嵌套列表結構高效得多,支持大量的維度數組與矩陣運算。此外,針對數組運算提供大量的數學函數庫。8.1數據清洗概述8.1.3常用工具NumPy提供了許多高級的數值編程工具,常用于科學計算中,主要包括:

一個強大的N維數組對象(Array);

成熟的函數庫;

用于整合C/C++和FORTRAN代碼的工具包;

實用的線性代數、傅里葉變換和隨機數生成函數。NumPy通常與Scipy(ScientificPython)和Matplotlib(繪圖庫)一起使用,這種組合廣泛用于替代MATLAB。NumPy現已被視為一種更加現代和完整的編程工具。8.2數據清洗方法

本節主要針對數據源中的重復數據、缺失數據和異常數據進行清洗,同時涉及部分字段拆分問題。需要說明的是,在爬取的數據中,一般不會同時存在以上3種類型的數據,常見的是兩種甚至一種類型的數據。讀者在實際操作過程中,應根據開發需求,有針對性地選擇恰當的實現方案。8.2.1重復數據處理

在數據庫或者數據倉庫中,理論上一個實體應該只有一條與之對應的記錄。但很多原因可能導致集成后的數據出現同一實體對應多條記錄的情況,例如數據錄入出錯、數據不完整、數據縮寫等。在數據清洗過程中,重復記錄的檢測與清除是一項非常重要的操作。

8.2數據清洗方法8.2.1重復數據處理1.重復數據的分類

重復數據主要分為兩類。

(1)完全重復數據

完全重復數據即兩個數據行的內容完全一致,這類數據很容易辨別。

針對完全重復數據的檢測,一個最簡單的方式就是對于數據集進行排序,然后通過比較相鄰的記錄并進行合并操作,或者直接采用第三方包中提供的方法去除重復項。

(2)不完全重復數據

不完全重復數據是指客觀上表示現實世界中的同一實體,但是由于表達方式不同,或者拼寫錯誤等原因,導致數據存在多條重復信息。8.2數據清洗方法8.2.1重復數據處理

對于不完全重復數據,檢查可能出現的重復記錄需要有充足的計算能力,因為檢查一條記錄就需要遍歷整個數據集。也就是說,對這個數據集的檢查需要所有的記錄之間實現兩兩匹配,其計算的復雜度為O(n2)。對于可能重復的記錄檢測需要使用模糊匹配的邏輯,也可以通過計算字符串的相似度,模糊匹配出疑似的重復數據,然后結合其他的參考字段進行查重操作。

在數據清洗過程中,重復值處理操作并非只執行一次。一般在數據清洗的第一步執行第一次的重復值去除操作,此時可以簡化后續的操作,減少數據量,但是在后續清洗過程中,可能會產生新的重復值,因此在后續的數據清洗環節,仍需要重復執行此操作。具體執行階段的設計和執行周期由目標任務決定。8.2數據清洗方法8.2.1重復數據處理2.去除完全重復數據

在Pandas中提供了重復數據的判斷和刪除方法:duplicated()和drop_duplicates()。

(1)duplicated()duplicated()用于指定列數據重復項的判斷,返回的內容是:指定列重復行。

(2)drop_duplicates()drop_duplicates()用于刪除指定列重復項的數據,返回的內容是:新產生的DataFrame。

8.2數據清洗方法8.2.2缺失數據處理

記錄中的某個或者某些屬性的值是不完整的,這些值被稱為缺失值。缺失值的產生原因多種多樣,主要分為機械原因和人為原因。

機械原因

由于機械原因導致的數據收集或保存的失敗而造成的數據缺失,比如數據存儲的失敗、存儲器損壞、機械故障導致某段時間數據未能收集等。

人為原因

人為原因是由于人的主觀失誤、歷史局限或有意隱瞞造成的數據缺失,比如被訪人拒絕透露相關問題的答案或者回答的問題是無效的、數據錄入人員漏錄入數據等。

對于缺失值的處理,主要分為刪除法和插補法。8.2數據清洗方法8.2.2缺失數據處理

記錄中的某個或者某些屬性的值是不完整的,這些值被稱為缺失值。缺失值的產生原因多種多樣,主要分為機械原因和人為原因。

機械原因

由于機械原因導致的數據收集或保存的失敗而造成的數據缺失,比如數據存儲的失敗、存儲器損壞、機械故障導致某段時間數據未能收集等。

人為原因

人為原因是由于人的主觀失誤、歷史局限或有意隱瞞造成的數據缺失,比如被訪人拒絕透露相關問題的答案或者回答的問題是無效的、數據錄入人員漏錄入數據等。

對于缺失值的處理,主要分為刪除法和插補法。8.2數據清洗方法8.2.2缺失數據處理1.刪除法

(1)識別缺失值

在Pandas中提供了識別缺失值的方法:isnull(),以及識別非缺失值的方法:notnull()。

基本語法如下:isnull():識別缺失值notnull():識別非缺失值

這兩個方法是元素級別的判斷,即將對應的所有元素的位置都列出來,元素為空或者NA就顯示True,否則就是False。直接返回bool值類型的數據矩陣。

此外,還可以結合其他的函數,輔助缺失值的判斷。8.2數據清洗方法8.2.2缺失數據處理(2)刪除缺失值

刪除法是指將缺失值的特征或者記錄刪除。刪除法分為刪除觀測記錄和刪除特征兩種,它屬于通過減少樣本量來換取信息完整度的一種方法,是最簡單的缺失值處理方法。Pandas中提供了簡單的刪除缺失值的方法:dropna(),通過參數控制,此方法既可以刪除觀測記錄,也可以刪除特征。2.插補法

插補法與刪除法不同,它使用建議的數據替換缺失值,從而保留當前記錄中的其他維度數據。表8-2列出了常見的插補方法。8.2數據清洗方法8.2.2缺失數據處理

表8-2常見的插補方法

下面介紹替換法和插值法。(1)替換法

替換法是指用一個特定的值替換缺失值。由于數據類型不同,處理方法也不盡相同。當缺失值為數值型時,可以利用固定的數據或者統計量來替代缺失值;當缺失值的類型為字符型時,則可以選擇使用特定的字符替代缺失值。插補方法具體操作均值/中位數/眾數插補

根據屬性值的類型,用該屬性取值的平均數/中位數/眾數進行插補替換法

將缺失的屬性值用一個特定的值替換最近鄰插補

在記錄中找到與缺失樣本最接近的樣本的該屬性值插補回歸方法

對帶有缺失值的變量,根據已有數據和與其有關的其他變量(因變量)的數據建立擬合模型來預測缺失的屬性值插值法利用已知點擬合的插值函數f(x),未知值由對應點xi求出的函數值f(xi)近似代替8.2數據清洗方法8.2.2缺失數據處理

(2)插值法

替換法使用的難度較低,但是統一替換相同的數據,會影響數據的標準差,導致信息量的變動。在面對數值類型的缺失問題時,還可以使用插值法。

常用的插值法有線性插值、多項式插值和樣條插值等。

線性插值是一種較為簡單的插值方法,它針對已知的值求出線性方程,通過求解線性方程式得到缺失值。

多項式插值利用已知的值擬合一個多項式,使得現有的數據滿足這個多項式,再利用這個多項式求解缺失值。常見的多項式插值有拉格朗日插值和牛頓插值等。

樣條插值是以可變樣條來擬合一條經過一系列點的光滑曲線的插值方法。插值的樣條由一些多項式組成,每個多項式都由相鄰兩個數據點決定,這樣可以保證兩個相鄰多項式及其導數在銜接處是連續的。8.2數據清洗方法8.2.3異常數據處理

異常值是指數據中個別數值明顯偏離其余的數值,有時也稱為離群點。檢測異常值就是檢驗數據中是否有輸入錯誤及是否含有不合理的數據。如果計算分析過程中有大量異常值的存在,而且算法對于異常值敏感,那么數據分析的結果將產生偏差,甚至出現錯誤。

另一方面,異常值在某些場景下反而是非常重要的,例如疾病預測。通常健康人的身體指標在某些維度上是相似的,如果一個人的身體指標出現了異常,那么他的身體在某些方面肯定發生了改變,當然這種改變并不一定是由疾病引起(通常被稱為噪聲點)的,但異常的發生和檢測是疾病預測一個重要起始點。相似的操作也可以應用到信用欺詐、網絡攻擊等場景中。8.2數據清洗方法8.2.3異常數據處理

針對數值類型,一般異常值的檢測方法有基于統計的方法、基于聚類的方法及專門檢測異常值的方法等。

基于統計的方法一般用于連續型的數據,可以通過簡單的統計量或者使用散點圖觀察異常值的存在。針對簡單的數據計算,可以使用describe()方法對統計字段進行描述性分析。而對更專業的數據計算,可以使用

原則實現數據分析。

表8-4常見的異常值處理方法異常值處理方法具體描述刪除含有異常值的記錄直接將含有異常值的記錄刪除按照缺失值處理將異常值視為缺失值,利用缺失值處理的方法進行處理平均值修正用前后兩個觀測值的平均值修正該異常值不處理直接在具有異常值的數據集上進行數據挖掘8.2數據清洗方法8.2.4格式內容清洗

如果數據由系統日志而來,那么通常在格式內容方面會與元數據的描述一致。而如果數據由人工收集或用戶填寫而來,則有可能在格式內容上存在一些問題。簡單來說,格式內容問題有以下幾類。1.時間、日期、數值、全半角等顯示格式不一致

這種問題通常與輸入有關,在整合多來源的數據時也有可能遇到此類問題,將其處理成某種一致的格式即可。2.內容中有不該存在的字符

某些內容可能只包括一部分字符,比如身份證號是數字或數字+字母,中國人姓名是漢字,而可能出現姓名中存在數字、身份證號中出現漢字等問題。這種情況下,需要以半自動校驗半人工方式來找出可能存在的問題,并去除不需要的字符。8.2數據清洗方法8.2.4格式內容清洗3.內容與該字段應有內容不符

這種問題很常見,比如姓名錯寫為性別、身份證號錯寫為手機號等。但該問題的特殊性在于:并不能以簡單的刪除來處理。因為這有可能是人工填寫錯誤,也有可能是前端沒有校驗,還有可能是導入數據時部分或全部存在列沒有對齊等,因此要詳細識別問題產生的原因。

格式內容問題一般是細節的問題,但很多分析失誤都在此處出現,比如統計值不全(數字中添加字母等)、模型輸出失敗或效果不好(數據列混淆等)。8.2.5邏輯錯誤清洗8.2數據清洗方法8.2.5邏輯錯誤清洗

邏輯錯誤清洗工作是去掉一些使用簡單邏輯推理就可以直接發現問題的數據,防止數據分析結果走偏。邏輯錯誤清洗主要包含以下內容。1.去除不合理值

不合理的數值類似于異常值,可以通過簡單的統計量或者使用散點圖觀察到它們的存在。

除了算術統計,還可以通過人工的方式篩選出這些不合理值。2.修正矛盾內容

有些字段是可以互相驗證的,例如,我們知道身份證號的中間幾位是個人的出生年月,在填寫年齡時,如果兩者嚴重不符,則被認為是矛盾的數據。在這種情況下,需要根據字段的數據來源,來判定哪個字段提供的信息更為可靠,去除或重構不可靠的字段。

8.3數據規整8.3數據規整

現有數據往往是不同時期采集的,人工操作多,數據輸入操作不嚴謹,有時會存在以下質量問題:數據編碼問題、數據分層問題、數據特征及描述問題。

數據規整是指,根據標準規范,對采集的原始數據進行層次劃分、編碼賦值、格式轉換等處理,以達到入庫或更新的要求。

針對不同的數據來源和種類,數據規整的方法與思路不同。一般在完成數據清洗的基礎上,再進行數據規整的操作。8.3.1字段拆分

如果數據中有包含多個信息單元的字符串字段,在將該字段中的值拆分為多個單獨的字段的情況下,數據分析將更為輕松。在Python中,可以自定義拆分選項,基于指定的分隔符來分隔值。8.3數據規整8.3.2數據分組

對于通過爬蟲獲得的數據,雖然經過數據清洗、字段拆分等手段進行了初步處理,但由于數據龐雜,還不能直接進入對數據的分析階段。在此之前,有必要對數據進行分組處理,以反映數據分布的特征及規律。

數據分組是根據統計研究的需要,將原始數據按照某種標準劃分成不同的組別,分組后的數據稱為分組數據。數據分組的主要目的是觀察數據的分布特征。數據分組后,再計算出各組中數據出現的頻數,就形成了一張頻數分布表。8.3數據規整8.3.2數據分組

對于非數值型數據,依據屬性的不同將其劃分為若干組;對于數值型數據,依據數值的不同將數據劃分為若干組。分組后,要使組內的差距盡可能小,而組與組之間則有明顯的差異,從而使大量無序、混沌的數據變為有序、層次分明、顯示總體數量特征的信息。

數據分組應遵循兩個基本原則。

(1)窮盡性原則

窮盡性原則要求每一項數據都能劃歸到某個組中,不會產生“遺漏”現象。

(2)互斥性原則

互斥性原則要求將數據分組后,各個組的范圍應互不相容、互為排斥。即每個數據在特定的分組標志下只能歸屬到某個組,而不能同時或可能同時歸屬到某幾個組。8.3數據規整8.3.3數據聚合

數據聚合是指任何能夠從數組產生標量值的數據轉換過程,可以簡單地將其理解為統計計算,如mean()、sum()、max()等。數據聚合本身與分組并沒有直接關系,在任何一列(行)或全部列(行)上都可以進行。當這種運算被應用在分組數據上時,結果可能會變得更有意義。基于此,經常把分組和聚合操作組合在一起,執行一個完整的功能。

針對DataFrameGroupby對象,可以應用的聚合運算方法有以下幾種。1.使用內置的方法

常見的內置聚合運算方法如表8-5所示。這些方法為查看每一組數據的整體情況和分布狀態提供了良好的支持。8.3數據規整8.3.3數據聚合

表8-5常見的內置聚合運算方法聚合方法具體描述count分組數目,非NA值head前n個值sum求和mean非NA值平均數聚合方法具體描述median非NA值的算術中位數std、var分母為n-1的標準差和方差min、max非NA值最小值、最大值prod非NA值的積first、last第一個和最后一個非NA值8.3數據規整8.3.4數據分割1.數據分割簡介

數據分割是指把邏輯上為統一整體的數據分割成較小的、可以獨立管理的物理單元進行存儲,以便進行數據的重構、重組和恢復,從而提高創建索引和順序掃描效率。

數據分割的目的是把數據劃分成小的物理單元,這樣在管理數據時就會有更大的靈活性。小批量的存儲單元具有容易重構、自由索引、順序掃描、容易重組、容易恢復和監控等優點,而網絡爬蟲往往能獲取到海量數據,如果期望達到大批量存儲的優勢,數據分割則是數據獲取后經常采用的操作。

數據分割的標準通常可選擇按日期、地域、業務領域或組織單位等來進行分割,也可以按多個分割標準的組合進行具體實施,但一般情況下,分割標準應包括日期信息。數據分割主要采用以下兩種方式。8.3數據規整8.3.4數據分割

(1)水平分割

水平分

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論