機器學習和人工智能數(shù)據(jù)預處理和建模的工具Slik-wrangler
現(xiàn)在人工智能AI和機器學習已經(jīng)走進我們的日常,并且逐漸改變著我們的生活。讓生活變得更便捷、更人性、更智能,更美好。但是現(xiàn)階段的人工智能(智障)還不完美,存在這樣或者那樣的問題,除了算法、模型和算力上的問題以外,最大的一個問題就是數(shù)據(jù)不準確的問題,訓練模型的數(shù)據(jù)存在缺失、存在著噪點,而往往這一丁點的數(shù)據(jù)噪聲會讓結果“謬以千里”。
為了解決這個問題,必須預先對數(shù)據(jù)進行數(shù)據(jù)清洗和預處理,而這卻是數(shù)據(jù)科學中最繁瑣,最惱人的工作。算法的學習可以在一行代碼中完成,模型的訓練工作也可能需要幾秒鐘或幾天不等的時間內(nèi)自動完成。而歷來數(shù)據(jù)的處理缺失需要人工長時間來處理,如果自動對這些數(shù)據(jù)處理成了數(shù)據(jù)科學工作者迫切的需求,本文我們就介紹這樣一個工具Slik-wrangler。
在本文中將展示Slik-wrangler的一些基本用法。在介紹一些概念的同時,還會演示一些有用的函數(shù),這些函數(shù)有助于數(shù)據(jù)清理和整理。
概述
為解決數(shù)據(jù)研究中的數(shù)據(jù)處理的煩惱產(chǎn)生了Slik-wrangler。它旨在幫助解決在處理任何形式的數(shù)據(jù)時基本數(shù)據(jù)整理和預處理的問題。Slik-wrangler項目有助于快速啟動監(jiān)督學習,它自帶多種工具,可以輕松加載任何格式的數(shù)據(jù)、并進行清理和檢查。它提供了一種預處理數(shù)據(jù)和執(zhí)行特征工程的快速方法。
數(shù)據(jù)預處理
數(shù)據(jù)預處理是將原始數(shù)據(jù)轉(zhuǎn)換為易于理解的格式的過程,這也是數(shù)據(jù)挖掘中的最重要一步。因為原始數(shù)據(jù)很難處理。在應用機器學習或數(shù)據(jù)挖掘算法之前,都需要檢查數(shù)據(jù)的質(zhì)量。
在數(shù)據(jù)開學中,經(jīng)常會提及一個概念“臟進臟出”(Garbage In、Garbage out)即如果你使用的是“壞”或“臟”數(shù)據(jù)來訓練模型,即使你的算法再高明,模型再好,出現(xiàn)的結果也是錯誤的。
所以原始數(shù)據(jù)必須做預處理,保證數(shù)據(jù)真實、正確且具有統(tǒng)計學意義。
數(shù)據(jù)預處理步驟
要對數(shù)據(jù)做預處理,必須遵循一定的步驟,以確保成功預處理數(shù)據(jù):
- 數(shù)據(jù)加載(Data Loading)。
- 數(shù)據(jù)質(zhì)量評估(Data quality assessment)。
- 數(shù)據(jù)清洗(Data cleaning)。
- 數(shù)據(jù)轉(zhuǎn)換(Data transformation)。
- 數(shù)據(jù)裁剪(Data reduction)。
下面我們以這些基本步驟為示例,介紹Slik-wrangler的基本功能。
安裝部署
Slik-wrangler支持安裝在Linux、MacOS和Windows。在支持版本Python(3.5+)環(huán)境下可以通過pip包管理器直接安裝。
pip install slik-wrangler
也可以在的多版本Python環(huán)境中安裝,比如通過Anaconda。首先,確認已安裝 Anaconda:
conda --version
創(chuàng)建新的虛擬環(huán)境并安裝Python 3.5 及更高版本:
conda create -n yourenvname python=3.7
激活環(huán)境:
source activate yourenvname
然后安裝Slik-wrangler和項目所需的其他軟件包
pip install slik_wrangler
測試安裝:
python
Python 3.7.1 (default, Dec 14 2018, 19:28:38)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
import slik_wrangler
數(shù)據(jù)加載
數(shù)據(jù)加載(導入)是處理任何數(shù)據(jù)集的第一步。Slik-wrangler提供loadfile模塊實現(xiàn)高效地讀取數(shù)據(jù)文件。
使用Pandas讀取文件時,需要指定要讀取的文件的特定擴展名。例如CSV、excel、parquet等。而使用loadfile載入數(shù)據(jù),可以直接讀取具有不同文件擴展名的多個文件,無需指定擴展名??梢杂煤瘮?shù)read_file 加載 CSV、excel和parquet等不同類型的文件。只需指定的文件路徑,對不同擴展名數(shù)據(jù)文件loadfile可以自動適配處理。
from slik_wrangler import loadfile as lf
lf.read_file(path_to_dataset)
假設有一個包含大數(shù)據(jù)集的文件,比如有幾百萬行的數(shù)據(jù)集,可能需要將其拆分為較小文件(數(shù)據(jù)集),比如2w行。可以使用split_csv_file來進行處理。這對需要從文件中讀取的有限行數(shù)據(jù)進行分析的情況很有用。
from slik_wrangler import loadfile as lf
lf.split_csv_file(path_to_dataset, row_limit=20000)
數(shù)據(jù)質(zhì)量評估 (DQA)
數(shù)據(jù)質(zhì)量評估(DQA)是判定數(shù)據(jù)(或數(shù)據(jù)集)質(zhì)量的過程。判定數(shù)據(jù)質(zhì)量的過程可確保數(shù)據(jù)適合使用并滿足項目或業(yè)務流程所需的質(zhì)量。slik-wrangler中提供了專門的模塊dqa用來進行數(shù)據(jù)質(zhì)量評估,slik-dqa包含了用于數(shù)據(jù)質(zhì)量檢查的多個功能。
其中data_cleanness_assessment ,用來檢查并顯示數(shù)據(jù)清潔程度的總體程度。
from slik_wrangler.dqa import data_cleanness_assessment
data_cleanness_assessment(dataset)
結果顯示數(shù)據(jù)集的干凈程度以及是否有任何需要解決的數(shù)據(jù)問題,比如示例數(shù)據(jù)集中主要存在數(shù)據(jù)缺失的問題,其中Cabin缺失數(shù)據(jù)高達77.2%。
slik-dqa還提供了用于檢查數(shù)據(jù)集特定問題獨立函數(shù),例如:
- missing_value_assessment:缺失數(shù)據(jù)評估;
- duplicate_assessment:重復數(shù)據(jù)評估;
數(shù)據(jù)清洗
數(shù)據(jù)清理是格式化/清理數(shù)據(jù)以使其適合分析的過程。它包括處理缺失值、替換重復項以及更正、修復或刪除不相關的數(shù)據(jù)。這是實現(xiàn)數(shù)據(jù)滿足業(yè)務需求的最重要的預處理步驟。是slik-wrangler提供了一個有價值的API來清理的數(shù)據(jù)集,稱為預處理(約定import為pp):
from slik_wrangler import preprocessing as pp
識別和修復異常值
異常值會對數(shù)據(jù)分析和建模結果產(chǎn)生巨大影響。例如,如果對人群的年齡進行調(diào)查,并且如果有人輸1000作為他的年齡。這明顯就是錯誤的,如果不刪除或糾正,它會極大地扭曲結果(比如求平均年齡)。
slik-wrangler目前主要依靠四分位距方法來檢測數(shù)據(jù)集中存在的異常值,還使用不同的方法修復數(shù)據(jù)中存在的異常值,例如用數(shù)據(jù)點的平均值或中值替換異常值??梢宰远x要篩選的數(shù)字特征,并顯示一個表格,該表格連續(xù)標識至少“n”個異常值。
from slik_wrangler import preprocessing as pp
pp.detect_fix_outliers(data,target_column='Age',n=1)
識別缺失值
要檢查我們的數(shù)據(jù)集是否包含缺失值,可以使用check_nan函數(shù)。上面的dqa模塊中slik_wrangler.preprocessing也可顯示缺失數(shù)據(jù)信息的概述。我們可以對其缺失占比圖示顯示:
from slik_wrangler import preprocessing as pp
pp.check_nan(train, plot=True)
圖示方法比直接數(shù)字的效果要明顯得多。
處理缺失值
有幾種方法可以處理缺失值,可以刪除缺失值或用特定的值替換缺失值。slik-wranglerz使用handle_nan模塊智能高效地處理數(shù)據(jù)中的缺失值。handle_nan函數(shù)通過選擇一種策略來處理的數(shù)字特征,為fillna參數(shù)傳遞一個值來處理分類特征或默認使用mode填充。還可以使用threshold參數(shù)跨行和列刪除缺失值。
刪除缺失值可以使用以下替代方法之一:
- 刪除缺少值的行。
- 刪除包含缺失值的列。
用另一個值替換缺失值。通常采用以下策略:
- 對于數(shù)值,將缺失值替換為平均值或眾數(shù)。
- 對于分類值,將缺失值替換為列的最頻繁值(模式)或想要的任何值。
from slik_wrangler import preprocessing as pp
data = pp.handle_nan(
dataframe=titanic, target_name='Survived', strategy='mean',
fillna='mode', drop_outliers=True, thresh_x=50, thresh_y=75,
display_inline=True
)
以上示例中,我們設置去除掉記錄(行)閾值thresh_x中缺失值超過50%的值。設置一個字段(列)中thresh_y閾值thresh_y缺失值超過75%的列。
結果中對缺失超過75%的一列數(shù)據(jù)清除,原始數(shù)據(jù)由12列變?yōu)?1列。
data.shape
(890, 11)
slik.preprocessing模塊用來進行對數(shù)據(jù)預處理,它可以實現(xiàn)一行代碼中清理數(shù)據(jù)。該函數(shù)通過刪除數(shù)據(jù)中存在的異常值、處理缺失值、特征化DateTime 列和映射相關列來清理您的數(shù)據(jù)。
from slik_wrangler import preprocessing as pp
pp.preprocess(
data= titanic, target_column='Survived', train=True,
display_inline=True, project_path='./Titanic', logging='display'
)
將預處理結果文件保存在指定的項目路徑中,本例中為當前路徑下的Titanic目錄。
總結
在機器學習ML和人工智能AI數(shù)據(jù)準備階段,數(shù)據(jù)預處理過程將其進行數(shù)據(jù)整理,評估,清洗和異常處理的過程。統(tǒng)計數(shù)據(jù)表明,數(shù)據(jù)科學家在數(shù)據(jù)預處理花費的時間大概占整個項目的80%還多。如果能將這部分繁瑣和耗時的過程自動化,這樣可以大大增加研究人員在數(shù)據(jù)分析EDA、算法和模型研究等其他事情的時間。
slik-wrangler非常適合從初學者到專家級數(shù)據(jù)科學家。通過使用 Slik-wrangler 進行數(shù)據(jù)預處理,可以實現(xiàn)自動評估數(shù)據(jù)質(zhì)量和存在的問題,有效處理缺失值、處理異常值和列管理,從而建立數(shù)據(jù)模式,為進一步數(shù)據(jù)分析做好準備。