100-Days-Of-ML-Code Day1 数据预处理

数据预处理|第1天

Steps

Datasets

Country Age Salary Purchased
France 44 72000 No
Spain 27 48000 Yes
Germany 30 54000 No
Spain 38 61000 No
Germany 40 Yes
France 35 58000 Yes
Spain 52000 No
France 48 79000 Yes
Germany 50 83000 No
France 37 67000 Yes

Code

第1步:导入库

1
2
import numpy as np
import pandas as pd

第2步:导入数据集

1
2
3
dataset = pd.read_csv('Data.csv')#读取csv文件
X = dataset.iloc[ : , :-1].values#.iloc[行,列]
Y = dataset.iloc[ : , 3].values#:全部行or列;[a]第a行or列;[a,b,c]第a,b,c行or列

第3步:处理丢失数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = "NaN",strategy = "mean",axis = 0)
#填补缺失值sklearn.preprocessing.Imputer(missing_values=’NaN’, strategy=’mean’, axis=0, verbose=0, copy=True)
#missing_values:缺失值,可以为整数或NaN(缺失值numpy.nan用字符串‘NaN’表示),默认为NaN
#strategy:替换策略,字符串,默认用均值‘mean’替换
#①若为mean时,用特征列的均值替换
#②若为median时,用特征列的中位数替换
#③若为most_frequent时,用特征列的众数替换
#axis:指定轴数,默认axis=0代表列,axis=1代表行
#copy:设置为True代表不在原数据集上修改,设置为False时,就地修改,存在如下情况时,即使设置为False时,也不会就地修改
#①X不是浮点值数组
#②X是稀疏且missing_values=0
#③axis=0且X为CRS矩阵
#④axis=1且X为CSC矩阵
#statistics_属性:axis设置为0时,每个特征的填充值数组,axis=1时,报没有该属性错误
imputer = imputer.fit(X[:,1:3])#填补缺失值
X[:,1:3] = imputer.transform(X[:,1:3])#替换原数据

第4步:解析分类数据

1
2
3
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
labelencoder_X = LabelEncoder()#LabelEncoder给标签编码为0-n_classes-1之间的值
X[:,0] = labelencoder_X.fit_transform(X[:,0])#编码并返回替换原数据

创建虚拟变量

1
2
3
4
5
6
7
8
9
10
11
onehotencoder=OneHotEncoder(categorical_features = [0])
#将分类特征的每个元素转化为一个可以用来计算的值OneHotEncoder(n_values=’auto’, categorical_features=’all’, dtype=<class ‘numpy.float64’>, sparse=True, handle_unknown=’error’)
#n_values=’auto’,表示每个特征使用几维的数值由数据集自动推断,即几种类别就使用几位来表示
#categorical_features = 'all'这个参数指定了对哪些特征进行编码,默认对所有类别都进行编码
#dtype=<class ‘numpy.float64’> 表示编码数值格式,默认是浮点型
#sparse=True 表示编码的格式,默认为 True,即为稀疏的格式,指定 False 则就不用 toarray() 了
#handle_unknown=’error’,其值可以指定为 "error" 或者 "ignore",即如果碰到未知的类别,是返回一个错误还是忽略它
#方法 transform(X) 就是对 X 进行编码了。在实际应用中,我们更常用方法 fit_transform(),也就是一步到位
X = onehotencoder.fit_transform(X).toarray()#编码并替换
labelencoder_Y = LabelEncoder()
Y = labelencoder_Y.fit_transform(Y)

第5步:拆分数据集为训练集合和测试集合

1
2
3
4
5
6
7
from sklearn.model_selection import train_test_split
X_train, X_test,Y_train,Y_test = train_test_split(X,Y,test_size = 0.2,random_state = 0)
#将矩阵随机划分为训练子集和测试子集,并返回划分好的训练集测试集样本和训练集测试集标签train_test_split(train_data,train_target,test_size=0.3, random_state=0)
#train_data:被划分的样本特征集
#train_target:被划分的样本标签
#test_size:如果是浮点数,在0-1之间,表示样本占比;如果是整数的话就是样本的数量
#random_state:是随机数的种子

第6步:特征量化

1
2
3
4
5
6
7
8
from sklearn.preprocessing import StandardScaler
sc_X=StandardScaler()
#计算训练集的平均值和标准差,以便测试数据集使用相同的变换StandardScaler(copy=True, with_mean=True, with_std=True)
#z = (x - u) / s删除平均值,并缩放到单位方差
#u是训练样本的均值,如果with_mean=False,则为0
#s是训练样本的标准偏差,如果with_std=False,则为1
X_train = sc_X.fit_transform(X_train)
X_test=sc_X.transform(X_test)