1. 程式人生 > >第1章-資料探索(1)-資料預處理

第1章-資料探索(1)-資料預處理

簡介

在我們瞭解了業務背景,確定了需求和分析目標以後,我們接下來要面對的,就是資料的探索了。不論資料的形式是直接連到資料庫、還是匯出的csv、txt、json等格式,當我們把資料載入到我們的分析利器(excel/spss/r/python/matlab)之後,不需要太多時間,我們就能瞭解到資料的概貌了,比如維度是N * M,以及各個欄位的含義等等。

然而,接下來要做的事情,就不是“不需要太多時間”能夠解決的了。資料建模之前(資料探勘、機器學習等)超過一半的時間,都是在進行資料探索。畢竟這幾個領域中都流傳著一句話“rubbish in rubbish out”。所以,這樣做也是值得的。

個人的理解,資料探索分為兩個大部分:

  • 1,資料的預處理
  • 2,資料的統計分析

本文主要先講一下資料的預處理問題。

正文

資料預處理的主要內容包括

  1. 資料清洗,處理“髒亂差”的資料
  2. 資料整合,把不同來源、格式、特點性質的資料合併到一起
  3. 資料變換,處理數值計算、屬性的對映以及維度空間的變換
  4. 資料規約,在儘可能保持資料原貌的前提下,最大限度地精簡資料量

資料預處理的順序

  1. 資料清洗與資料整合並沒有嚴格意義上的先後順序,究竟是先整合再清洗、還是先清洗再整合可以依照實際情況而定。因為資料整合以後,可能還會涉及到資料清洗的部分環節。
  2. 資料變換與資料規約一般在資料清洗以及整合以後,且兩者在處理過程中也是相輔相成的,有的資料規約方法也需要以資料變換為前提。

一,資料清洗,清洗了什麼?

從五個方面來進行資料的清洗,個人總結抽象概況為SINCE原則
(看了很多市場營銷的書,歪果仁都願意把一些原則弄成個易記的單詞,於是此處提升一下B格).

 1,Simple  簡單的:去除冗餘與重複
  • 重複即100%的冗餘,一般刪除即可
  • 而冗餘需要提取主要資訊,去除次要資訊
  • 有些情況還會需要資訊融合

舉個栗子:

有一個公司引入了供應鏈金融,於是一個人想要買東西,申請不同渠道的消費貸款時,就會得到不同渠道反饋的對該消費者評級。

假設有甲金融機構,乙金融機構,丙金融機構,
甲反饋結果是對使用者進行 A,B,C的評級;
乙反饋結果是對使用者進行 0~700分的評級;
丙反饋結果是對使用者進行 優秀,良,中,差的評級;

顯然,從資訊上看,這三個結果的價值是趨同的,合併成一個維度會比留著三個要精簡。由於每個渠道的評級結果不同,最終,我們可能合併結果時,就變成了二元變量了,即,好與其他,壞與其他。

 2,Integral  完整的:缺失值的處理
  • 缺失值的處理,需要認真對待

缺失的資料如果佔總體比較少,是最好操作的了,可以直接刪除。
然而,現實情況下,往往缺失的資料佔比很多,缺失的原因又千奇百怪,又的甚至無法知道原因。所以,缺失的處理是非常複雜的,需要單獨摘出一章,將在第六章給出對應的方法。

 3,Normal  標準的
  • 名稱、型別、單位、格式、長度、縮寫、等要符合統一的標準
  • 範圍要在業務或常識的標準的值域內
  • 最終的資料大都需要進行標準化處理

舉個栗子:

日期,有的用’Mon’,有的用’Monday’,有的用’M’,就需要統一。

年齡出現了負數,就需要處理。

最後,在把資料放進模型之前,需要進行標準化的處理,排除量綱的影響,離散變數還要變成dummy化進行處理。

 4,Consistent  一致性:不同資料來源的資料出現差異,以哪個為準;指標不同,含義相同,或反過來,以哪個為準。
  • 有衝突的情況下,需要修正邏輯與口徑

這一點,就需要介入人們的主觀判斷,哪個資料來源是最靠譜的,就以哪個為準。

舉個栗子:
資料來源A中,標記手機號0061的使用者為男性,18歲;
而資料來源B中,標記手機號0061的使用者為女性,36歲;

到底以哪個為準,就需要查詢具體的原因了。

 5,Effective  有效的:處理錯誤與異常
  • 錯誤:拼寫、屬性、編碼、格式以及依賴關係不匹配等錯誤
  • 異常:噪音 vs 異常值 vs 離群點

資料操作的過程中,大都需要人為的介入,只有有人蔘與,就容易出錯。
比如一張門店的表裡面有城市編碼從 1-10,而城市編碼名稱的對映表中,只有2-11,那麼這種匹配就出現了錯誤。

關於異常,最簡單的方式是通過箱線圖判斷得到。
超過上下分位數 ± IQR1.5倍的點,一般即認為是異常的。

二,資料整合

在把各資料來源合併到一起的時候,也容易出現兩個問題

  • 1,屬性冗餘,就如簡單原則中舉的例子一樣。
  • 2,資料實體出現衝突,就如在一致性原則中的例子一樣。

三,資料變換

原始資料是可以被加工成更有意義的資料的,加工後的指標可以與目標值進行分析,看看哪種方式更有效。具體變換的方式有下面四點:

  • 1,維度,是否需要降維,與資料規約相同
  • 2,屬性,數值型屬性是否需要拆分成離散的更好
  • 3,函式變換,x與y之間的關係是否有,x與log(y)之間的關係更明顯
  • 4,聚合,原始資料與其對應的頻率、頻次、求和、平均等聚合指標相比哪種更有效

四,資料規約

個人理解,規約需要重點解決的其實是"維度災難"問題。

想象一下,我們的樣本數量是有限的,當我們不斷的擴充維度(對於離散變數dummy化以後就相當於增加了n-1個變數),我們的變數構成空間將越來越大。這個空間內的樣本數量是不變的,這就意味著,樣本的分佈越來越稀疏。

我們取得的目前的樣本,僅相當於在這個空間中的一個超平面上的樣本點,然而隨著空間維度的增加,這個超平面的情況又如何能夠代表總體空間中的情況呢?

所以,資料處理階段我們需要降維(參見第五章),模型生成階段我們需要篩選特徵子集(參見第四章)

主成分分析是最常用的手段,還有一些其他的演算法可以幫助我們挑選特徵,我們可以參考第五章的內容。

下一節:第1章-資料探索(2)-資料預處理之Python實現