【數據分析與挖掘實戰】數據預處理篇

在這裏插入圖片描述

1.數據清洗

數據預處理一方面是要提高數據質量,另一方面可以讓數據更好的適應特定的挖掘技術。統計發現,數據建模過程中,數據預處理工作佔了整個工作的60%。數據預處理的過程包括數據清洗,數據集成,數據變換和數據規約。碼字不易,喜歡請點贊!!!
在這裏插入圖片描述
數據清洗的過程主要包括缺失值處理和異常值處理。

1.1缺失值處理

前面【數據探索篇】說過缺失值處理主要包括的方法有三種:刪除記錄、數據插補、不處理。這裏主要分享常見的數據插補方法:

  1. 均值/中位數/衆數插補
  2. 固定值插補
  3. 最近臨插補:在記錄中找到與缺失樣本最接近的樣本的屬性值填補
  4. 迴歸方法:通過迴歸方程插補
  5. 插值法:拉格朗日插值法、牛頓插值法、分段插值法等

拉格朗日插值法
通過構造拉格朗日多項日,進行插值填補。如下代碼展示瞭如何使用拉格朗日插值法對缺失值進行填補:

import pandas as pd
from scipy.interpolate import lagrange #拉格朗日插值函數
catering_sale = r"...\data\catering_sale.xls"
data = pd.read_excel(catering_sale)

#首先將異常值設置爲空
#銷量需要放在前面,否則值未更新
data['銷量'][(data['銷量']<400) | (data['銷量']>5000)]=None

#s爲列向量,n爲插值位置,k爲取前後數據個數,默認爲5
#lagrange函數使用:f = lagrange(list_x,list_y),進行插值操作:a = f(i)
def ployinterp_columns(s,n,k=5):
    y = s[list(range(n-k,n)) + list(range(n+1,n+1+k))]
    y = y[y.notnull()]
    return lagrange(y.index,list(y))(n)

for i in data.columns:
    for j in range(len(data)):
        if(data[i].isnull())[j]:
            data[i][j] = ployinterp_columns(data[i],j)

使用拉格朗日插值法時,當插值節點增減時,插值多項式會變化。而牛頓插值法則不會有這個問題。

牛頓插值法
牛頓插值法通過構造牛頓插值逼近函數P(x)P(x)和誤差函數R(x)R(x)來進行插值填補,目前Python中沒有寫好的函數,需要自己編寫。不過牛頓插值法和拉格朗日插值法本質上是一樣的,都是相同的次數,相同的係數多項式,只是表現形式不一樣。

1.2異常值處理

  • 刪除異常值記錄
  • 視爲缺失值
  • 平均值修正
  • 不處理

2.數據集成

數據挖掘過程中,通常數據來自於多個不同的數據源,因此需要對多個數據源數據進行數據集成,最後放到同一個數據庫中。

2.1實體識別

  1. 同名異義:數據源A中的ID和數據源B中的ID,可能表示的不是同一個實體。
  2. 異名同義:數據源A中的sales_dt和數據源B中的sales_date可能表示的都是銷售日期,即A.sales_dt=B.sales_date。
  3. 單位不統一

2.2冗餘屬性識別

  1. 同一屬性出現多次
  2. 同一屬性命名不一致導致重複

3.數據變換

數據變換在數據建模過程中十分重要,將數據轉換成適當的形式,可以讓數據挖掘過程更美好。

3.1簡單函數變換

簡單的函數變換,可以是數據具有更好的特性。常見的函數變換有平方、開方、對數、差分等。函數變換常用來將不具有正態分佈的數據變換成具有正太分佈的數據;並且有時對數變換或者差分運算可以將非平穩時間序列轉換成平穩時間序列。

3.2規範化

數據規範化又稱爲數據歸一化,常見的數據規範化,包括:

  • 最小-最大規範化:亦稱爲離差標準化,將數據變換到區間[0,1]內。
  • 零-均值規範化:亦稱爲標準差標準化,變換後的數據均值爲0,方差爲1.
  • 小數定標規範化:將數據除以10的n次冪,使得數據都在區間[-1,1]內。
    在這裏插入圖片描述

3.3連續屬性離散化

在一些算法中,數據需要離散化處理,比如說CART、Apriori算法等,這種情況下,通常需要將連續屬性離散化。常見的離散方法包括:

  • 等寬法
  • 等頻法
  • 基於聚類分析的方法

3.4屬性構造

在數據挖掘過程中,有時候需要結合業務情況,來構造一些屬性,從而提高數據建模的準確性。比如說,進行防竊漏電診斷時,我們有供入電量和供出電量,可以構造屬性=線損率=\frac{供入電量-供出電量}{供入電量}來進行竊漏電診斷。

3.5小波變換

小波變換是比較新的數據分析工具,近年來興起的信號分析手段。小波變換主要包括以下幾種:

  • 基於小波變換的特徵提取方法
  • 小波基函數
  • 小波變換
  • 基於小波變換的多尺度空間能量分佈特徵提取方法

4.數據規約

在大數據上進行數據建模需要耗費比較大的資源,因此通過數據規約方法,可以降低數據存儲空間,同時可以提高數據建模效率。

4.1屬性規約

數據規約包括合併屬性從而構造新的屬性,以及刪除不相關的屬性。這裏展示使用主成分分析(PCA)方法對數據進行降維的操作。
這裏直接使用Python裏面的PCA函數,其參數n_components表示降維之後的數據維度。默認爲None,所有成分保留。

#首先保留所有成分,建立PCA模型,然後查看各個成分的方差百分比(即貢獻率)
import pandas as pd
from sklearn.decomposition import PCA
datafile = r"C:\Users\vivalavida\Desktop\Asher--Other\學習\python數據分析與挖掘實戰\chapter4\demo\data\principal_component.xls"
data = pd.read_excel(datafile,header=None)
pca = PCA()
pca.fit(data)

#查看各個成分的貢獻率
>>>pca.explained_variance_ratio_
array([7.74011263e-01, 1.56949443e-01, 4.27594216e-02, 2.40659228e-02,
       1.50278048e-03, 4.10990447e-04, 2.07718405e-04, 9.24594471e-05])

可以看出前3個主成分的累計貢獻率就已經達到了97.37%,因此對數據進行降維時,可以降到3維。

pca = PCA(n_components=3)
pca.fit(data)
low_data = pca.transform(data)#降維後的數據
pca.inverse_transform(low_data)#恢復原始數據

4.2數值規約

數值規約包括無參數方法和有參數方法。有參數方法只需存儲參數,無參數方法需要存放實際數據,例如直方圖、聚類等。

碼字不易,喜歡請點贊!!!

【參考文獻】
《Python數據分析與挖掘實戰》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章