資料預處理也有套路的

2021-09-24 08:04:18 字數 3530 閱讀 7473

資料探勘的核心是什麼?這個的答案是演算法應該沒什麼疑問。那資料探勘的基石又是什麼呢?那就是今天我們要來說的資料預處理。

資料科學家們一直想為資料預處理賦予乙個定義。其實簡單地說,資料預處理就是一種資料探勘技術,本質就是為了將原始資料轉換為可以理解的格式或者符合我們挖掘的格式。

在真實世界中,資料通常是不完整的(缺少某些感興趣的屬性值),不一致的(包含**或者名稱的差異),極易受到雜訊(錯誤或異常值)的侵擾的。因為資料庫太大,而且資料集經常來自多個異種資料來源,低質量的資料將導致低質量的挖掘結果。就像乙個大廚現在要做美味的蒸魚,如果不將魚進行去鱗等處理,一定做不成我們口中美味的魚。資料預處理就是解決上面所提到的資料問題的可靠方法。

就像大廚準備處理魚的刀具一樣,資料預處理也是如此。它準備原始資料以便進一步處理。下面是資料預處理要採取的步驟,如圖:

資料清洗: 填寫缺失的值,光滑雜訊資料,識別或刪除離群點,並解決不一致性來「清理資料」。

資料整合:使用多個資料庫,資料立方體或檔案

資料歸約: 用替代的,較小的資料表示形式替換元資料,得到資訊內容的損失最小化,方法包括維規約,數量規約和資料壓縮

資料變換:將資料變換成使用挖掘的形式。

下面這張圖很形象得把這四個步驟的作用表現出來,挺有意思的。

資料預處理任務

是時候我們採取一些簡單的實際應用來了解資料預處理是如何完成的

下面的例子我們用 python 來處理,還需要用到兩個庫,分別是 numpy,pandas。

準備資料

在這裡,我們有乙個資料集,其中包括it專業人員的資訊,比如國家,工資,性別,如下:

我們可以隨意建立此資料集的副本。

我們可以觀察到上面的資料集包含一些空值,這是故意的。後面很快可以看到它發揮的作用

導入庫

簡單說下 numpy, pandas 這兩個庫的作用,numpy 庫包含數學工具,它可以用於在我們**中的任何型別的數學。pandas 庫用於匯入和管理資料集。

下面是我們導入庫的方法

import pandas as pd

import numpy as np複製**

匯入資料集

我們已經導入庫了,接下來我們需要獲取資料集。在我本地裡,我將我的資料集檔案命名為『profess』,它的格式為.csv。

#讀取資料(我的資料集檔案跟我的python檔案在同一目錄下)

data = pd.read_csv("profess.csv")複製**

匯入資料集後,我們輸出看下它的格式如何

print(data)複製**

good!我們成功得將資料集匯入測試環境中。

資料清洗--檢視缺失值

為了成功管理資料,缺失值的概念很重要。如果工程師沒有正確處理缺失值,可能最後得出關於資料的推斷是不準確的。 我們再來仔細看下我們的資料的缺失值情況,用 pandas 庫的 isnull 函式來看看。

print(data.isnull().sum())複製**

我們可以發現 age,salary列都有缺失值(就是為空的值),缺失值數量都為1。處理缺失值有7種處理方法,我們這裡說說比較常用的兩種。

1、此方法經常用於處理空值,如果某行有特定特徵d的空值,就刪除此行。如果特定列具有超過75%的缺失值,就刪除特定列。不過我們要在確保樣本資料足夠多的情況下,採用這個方法。因為我們要確保刪除資料後,不會增加偏差。

data.dropna(inplace=true)

print(data.isnull().sum())複製**

2、這個方法適用於具有年份或者年齡,金額等數字資料的功能。我們可以計算特徵的均值,中值或眾數,將其替換為缺失值。與第一種方法相比,這種可以抵消資料的缺失,產生更好的效果。

我們用來看一下操作

# 將 age 列中為空的值替換為 age 的中位數。

# medain()是 pandas 庫的求中位數的方法

data['age'] = data['age']

.replace(np.nan,data['age']

.median())

print(data['age'])複製**

我們成功替換掉了

資料歸約

為了滿足挖掘需求,我們需要知道這些工程師們的薪水分布區間,但是我們只有 『salary』 薪水這一列,所以為了方便挖掘,我們給我們的資料集增加『薪水等級』 level 這一列,通過 salary 列進行區間歸約,這種方法叫做「屬性構造」。我們看看操作

#資料歸約

def section(d):

if 50000 > d:

return

"50000以下"

if 100000 > d >= 5000:

return

"50000-100000"

if d > 100000:

return

"100000以上"

data['level'] = data['salary']

print(data['level'])複製**

我們定義乙個『資料變換』的函式給,根據 salary 判斷選擇區間進行變換並賦值給 level。

資料變換

我們可以看到 salary 列也有空值,從業務上理解它應該是數字數值才是。但是我們發現我們的資料集中是貨幣格式,我們需要對它進行『資料變換』,轉換成我們所需的數字格式。來看下實際操作

#資料變換

def convert_currency(d):

new_value = str(d).replace(",","")

.replace("$","")

return

float(new_value)

# mean()是 pandas 庫的求平均值的方法

data['salary'] = data['salary']

.replace(np.nan,data['salary']

.mean())

print(data['salary'])複製**

變換成功

我們定義乙個「資料變換」的函式,然後將它應用再 salary 列上,最後同資料清洗那一步同樣的替換操作,我們這裡用平均值替換。

至此我們算走完資料預處理的乙個基本流程。這是比較基礎的乙個小應用。但是相信我們以後處理資料的時候能有乙個基本清晰的解決思路,以及如何選擇處理方法以及為什麼選擇有所了解。

資料探勘一路走來,也有幾十年的歷史了,資料預處理每個步驟都開發出很多的方法。由於不一致或髒資料的數量巨大,以及問題本身的複雜性,資料預處理仍然是乙個活躍的研究領域。篇幅所限,無法一一敘述,以後會再深入。

推薦閱讀:

乙個資料倉儲時代開始--hive

不一樣的併發程式設計 -- actor 併發程式設計模型

資料的相似性和相異性我們可以怎麼分析

資料的預處理

機器學習演算法無法理解原始資料,所以需對原始資料進行預處理,常用預處理如下 預處理主要使用了preprocessing包,所以需對該包進行匯入 import numpy as np from sklearn import preprocessing data np.array 3,1.5,2,5.4...

資料預處理

現實世界中資料大體上都是不完整,不一致的髒資料,無法直接進行資料探勘,或挖掘結果差強人意。為了提前資料探勘的質量產生了資料預處理技術。資料預處理有多種方法 資料清理,資料整合,資料變換,資料歸約等。這些資料處理技術在資料探勘之前使用,大大提高了資料探勘模式的質量,降低實際挖掘所需要的時間。一 資料清...

資料預處理

常見的資料預處理方法,以下通過sklearn的preprocessing模組來介紹 變換後各維特徵有0均值,單位方差。也叫z score規範化 零均值規範化 計算方式是將特徵值減去均值,除以標準差。sklearn.preprocessing scale x 一般會把train和test集放在一起做標...