前言
對於數據的預處理,沒有固定的步驟。
下文寫的僅僅的常規的一些小步驟。
具體的預處理,還需要根據數據以及需求來自行處理。
====================================
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
的那個圖我們可以看出,我們的目的是想要通過地區,年齡,薪資來看購買力。
那我們把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、數據明確化
數據明確就是爲了提高運行的速度和準確性。
當然我們不進行數據明確也可以…爲了更好,還是加上這步吧。
我們看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)
運行,然後我們看下結果:
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)
我們就可以看到分割好的兩組數據。
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)
##處理age和Salary。也就是第2和第3行
training_set[,2:3] = scale(training_set[,2:3])
test_set[,2:3] = scale(test_set[,2:3])
結果如圖下所示: