機器學習之 資料預處理 preprocessing
前言
對於資料的預處理,沒有固定的步驟。
下文寫的僅僅的常規的一些小步驟。
具體的預處理,還需要根據資料以及需求來自行處理。
====================================
Python
STEP1、匯入依賴包
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
- 1
- 2
- 3
把np作為numpy
的縮寫,後面可以直接使用np來呼叫各種方法。
==> numpy
系統是python
的一種開源的數值計算擴充套件。
這種工具可用來儲存和處理大型矩陣,比python
自身的巢狀列表結構要高效的多。
你可以理解為凡是和矩陣有關的都用numpy
==> matplotlib.pyplot
是用來做資料的展示。也就是資料的視覺化。
==> pandas
該工具是為了解決資料分析任務而建立的。pandas
納入了大量庫和一些標準的資料模型,提供了高效地操作大型資料集所需的工具。 pandas
提供了大量能使我們快速便捷地處理資料的函式和方法。它是使python
成為強大而高效的資料分析環境的重要因素之一。
========
選擇好這三行程式碼,敲下shift+return組合鍵。
如果結果如下,說明庫已經匯入了。
我們的環境配置也完全沒有問題。
STEP2、讀取資料
在Spyder
中,設定好檔案路徑。千萬不要忘了。
輸入下面的程式碼。然後選擇這行程式碼,敲下shift+return組合鍵。
#import dataset
dataset = pd.read_csv('Data.csv')
- 1
- 2
我們在explorer中會看到我們命名的dataset
。
雙擊開啟
根據上面的dataset
的那個圖我們可以看出,我們的目的是想要通過地區,年齡,薪資來看購買力。
那我們把country,age,salary作為X,purchased作為Y。
得到二者之間的關係,就得到了country,age,salary和purchased之間的某種關係。
#取出所有的行,(去掉最後一列 purchased)
X = dataset.iloc[:,:-1].values
取出結果
Y = dataset.iloc [:,3].values
- 1
- 2
- 3
- 4
- 5
執行結果如下:
然後我們雙擊開啟X,會發現打不開。這個是因為資料型別的原因。
我們可以在程式碼中輸入X,然後選中執行。
STEP3、遺失資料的處理
我們回過頭在看上面的dataset
的圖。
我們會發現資料缺少幾個。他用了nan
來標記缺失的資料。
注意:
對於缺失的資料,我們大體上有3中處理方法:
1、通過資料中的最大值和最小值,我們把中間值賦值給缺失的資料;
2、通過所有資料的平均值來賦值給缺失的資料;
3、刪除有空缺資料項;擇優排隊的結果是:1 > 3 、 2 > 3
因為在大部分的時候,我們的資料會非常稀少。每一個數據都來之不易。我們不能輕易的刪掉。
============
匯入庫。這個庫就是專門做資料預處理的。
#預處理impoter
from sklearn.preprocessing import Imputer
#做遺失的部分的處理 用NaN的方式填補上來
#axis:傳0或者。0代表處理列 ,1代表處理行。
#strategy的值有mean,median,most_frequent ,分別代表:平均數 中間值 最常出現的數值
imputer = Imputer(missing_values = 'NaN',strategy = 'mean', axis = 0)
#1-3行缺失的部分補上
imputer = imputer.fit(X[:,1:3])
#返回處理好的資料
X[:,1:3] = imputer.transform(X [:,1:3])
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
對於這個方法,我們不熟悉可以通過Help
來檢視。不過前提是 from sklearn.preprocessing import Imputer
這行程式碼執行過。
然後我們執行下,會發現缺失的資料已經被我們填充好了。
STEP4、資料明確化
資料明確就是為了提高執行的速度和準確性。
當然我們不進行資料明確也可以…為了更好,還是加上這步吧。
我們看country
和 purchased
,如果都變成用數字表示。那我們執行的效率就提升上去了。
熱編碼的優點:
1.能夠處理非連續型數值特徵。
2.在一定程度上也擴充了特徵。
#資料明確
#提高執行的速度和準確性
#把資料明確化,變成數字
#OneHotEncoder 熱編碼
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
#把城市資料進行數字明確化
labelencoder_X = LabelEncoder()
X[:,0] = labelencoder_X.fit_transform(X[:,0])
#熱編碼,拿出來做陣列的編排
onehotencoder = OneHotEncoder()
X = onehotencoder.fit_transform(X).toarray()
#把結果資料進行城市化
labelencoder_Y = LabelEncoder()
Y = labelencoder_Y.fit_transform(Y)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
執行,然後我們看下結果:
STEP5、資料分割
資料分割。是把資料分為兩組。一組A用來訓練,一組B是用來測試。
然後通過測試資料的Y,用訓練組的模型得到的Y值進行比較。
就是比較B.Y
和 ResultA (B.X)
的值是否一樣,如果一樣或者差別不大,那麼我們做出來的模型就是可靠的。
#資料分割
from sklearn.cross_validation import train_test_split
#0 取一次就好了,不要每次都取兩組隨機的數字
X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size = 0.2,random_state = 0)
- 1
- 2
- 3
- 4
- 5
我們就可以看到分割好的兩組資料。
X_train、Y_train
X_test 、Y_test
STEP6、資料縮放
資料縮放把這些資料,規範在一個範圍中。
如果不這麼做的話,比如 0 ,0.001, 0.2, 99… 這類資料非常不易看。
from sklearn.preprocessing import StandardScaler
#縮放
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.fit_transform(X_test)
Y_train = sc_X.fit_transform(Y_train)
Y_test = sc_X.fit_transform(Y_test)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
我們開啟X_train,然後format調成小數一位。結果如下。
以上就是資料預處理的幾步了。
END 完整程式碼
#資料預處理 data preprocessing
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
#import dataset
dataset = pd.read_csv('Data.csv')
#Matrix of feature
X = dataset.iloc[:,:-1].values
Y = dataset.iloc[:,3].values
#預處理impoter
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = 'NaN',strategy = 'mean', axis = 0)
imputer = imputer.fit(X[:,1:3])
#返回處理好的資料
X[:,1:3] = imputer.transform(X [:,1:3])
#資料明確
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
labelencoder_X = LabelEncoder()
X[:,0] = labelencoder_X.fit_transform(X[:,0])
onehotencoder = OneHotEncoder()
X = onehotencoder.fit_transform(X).toarray()
labelencoder_Y = LabelEncoder()
Y = labelencoder_Y.fit_transform(Y)
#資料分割
from sklearn.cross_validation import train_test_split
#0 取一次就好了,不要每次都取兩組隨機的數字
X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size = 0.2,random_state = 0)
#縮放X
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.fit_transform(X_test)
Y_train = sc_X.fit_transform(Y_train)
Y_test = sc_X.fit_transform(Y_test)