【ML】數據預處理

前言

對於數據的預處理,沒有固定的步驟。
下文寫的僅僅的常規的一些小步驟。
具體的預處理,還需要根據數據以及需求來自行處理。

====================================

Python

STEP1、導入依賴包

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

把np作爲numpy的縮寫,後面可以直接使用np來調用各種方法。

==>
numpy系統是python的一種開源的數值計算擴展。
這種工具可用來存儲和處理大型矩陣,比python自身的嵌套列表結構要高效的多。
你可以理解爲凡是和矩陣有關的都用numpy這個庫。

==>
matplotlib.pyplot是用來做數據的展示。也就是數據的可視化。

==>
pandas該工具是爲了解決數據分析任務而創建的。pandas 納入了大量庫和一些標準的數據模型,提供了高效地操作大型數據集所需的工具。
pandas提供了大量能使我們快速便捷地處理數據的函數和方法。它是使python成爲強大而高效的數據分析環境的重要因素之一。

========
選擇好這三行代碼,敲下shift+return組合鍵。

如果結果如下,說明庫已經導入了。
我們的環境配置也完全沒有問題。

如果環境的配置有問題,參考博客:
http://blog.csdn.net/wiki_su/article/details/78404808

STEP2、讀取數據

原始數據在雲盤,有需要的自行下載吧。
鏈接:http://pan.baidu.com/s/1eRHXACU
密碼:4q8c

Spyder中,設置好文件路徑。千萬不要忘了。

輸入下面的代碼。然後選擇這行代碼,敲下shift+return組合鍵。

#import dataset
dataset = pd.read_csv('Data.csv')

我們在explorer中會看到我們命名的dataset

dataset

雙擊打開

根據上面的dataset的那個圖我們可以看出,我們的目的是想要通過地區,年齡,薪資來看購買力。

那我們把country,age,salary作爲X,purchased作爲Y。
得到二者之間的關係,就得到了country,age,salary和purchased之間的某種關係。

#取出所有的行,(去掉最後一列 purchased)
X = dataset.iloc[:,:-1].values

取出結果
Y = dataset.iloc[:,3].values

運行結果如下:

然後我們雙擊打開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])

對於這個方法,我們不熟悉可以通過Help來查看。不過前提是
from sklearn.preprocessing import Imputer這行代碼運行過。

然後我們運行下,會發現缺失的數據已經被我們填充好了。

STEP4、數據明確化

數據明確就是爲了提高運行的速度和準確性。
當然我們不進行數據明確也可以…爲了更好,還是加上這步吧。

我們看countrypurchased ,如果都變成用數字表示。那我們運行的效率就提升上去了。

熱編碼的優點:
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)

運行,然後我們看下結果:

STEP5、數據分割

數據分割。是把數據分爲兩組。一組A用來訓練,一組B是用來測試。
然後通過測試數據的Y,用訓練組的模型得到的Y值進行比較。

就是比較B.YResultA (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)

我們就可以看到分割好的兩組數據。
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)

我們打開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)

=========================

R

如果你跟着上文一步一步的來的話,對於R的使用, 就非常好理解了。
僅僅是寫法不同,含義是一樣的。

dataset = read.csv('Data.csv')

dataset$Age = ifelse(is.na(dataset$Age),
                     ave(dataset$Age,FUN = function(x) mean(x,na.rm = TRUE)),
                     dataset$Age)

dataset$Salary = ifelse(is.na(dataset$Salary),
                        ave(dataset$Salary,FUN = function(x) mean(x,na.rm = TRUE)),
                        dataset$Salary)

dataset$Country = factor(dataset$Country,levels = c('France','Spain','Germany'),
                         labels = c(1,2,3))


dataset$Purchased = factor(dataset$Purchased,levels = c('Yes','No'),
                           labels = c(0,1))

library(caTools)
##隨機分割,隨便傳個數都oK
set.seed(123) 
split = sample.split(dataset$Purchased,SplitRatio = 0.8)
training_set = subset(dataset,split == TRUE)
test_set = subset(dataset,split == FALSE)

##處理ageSalary。也就是第2和第3行
training_set[,2:3] = scale(training_set[,2:3])
test_set[,2:3] = scale(test_set[,2:3])

結果如圖下所示:

發佈了182 篇原創文章 · 獲贊 35 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章