Day1-数据预处理
原文:https://github.com/Avik-Jain/100-Days-Of-ML-Code
译文:https://github.com/MLEveryday/100-Days-Of-ML-Code
代码:
# step 1: 导入Numpy和Pandas库
import numpy as np
import pandas as pd
from sklearn.preprocessing import Imputer
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import StandardScaler
# step 2: 导入数据集
data_set = pd.read_csv('datasets/Data.csv')
print(data_set)
X = data_set.iloc[ :, :3].values # 提取除最后一列的所有数据 前闭后开
Y = data_set.iloc[ :, 3].values # 提取最后一列的数据
# step 3: 处理缺失数据 数据中只有第一列和第二列有缺失数据
imputer = Imputer(missing_values='NaN', strategy='mean', verbose=0)
imputer = imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])
# print(X)
# step 4: 编码解析数据分类
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:, 0])
# print(X)
# 创建一个虚拟变量
onehotencoder = OneHotEncoder(categorical_features=[0])
X = onehotencoder.fit_transform(X).toarray()
labelencoder_Y = LabelEncoder()
Y = labelencoder_Y.fit_transform(Y)
# print(X)
# print(Y)
# step 5: 将数据集分为训练集和测试集
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0)
# step 6: 特征缩放 归一化处理
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.fit_transform(X_test)
step 1: 导入库
- Numpy:主要用来处理数组和矩阵。
- Pandas:基于Numpy,主要用来解决数据分析任务。
step 2: 导入数据
pandas.read_csv(): 读取csv文件。
常见的pandas读写文件的操作方法:
文件格式 | 读取方法 | 写入方法 |
---|---|---|
CSV | read_csv | to_csv |
JSON | read_json | to_json |
HTML | read_html | to_html |
EXCEL | read_excel | to_excel |
step 3: 处理缺失数据
- sklearn:机器学习库,提供了大量优质的数据集,能够实现出不同的模型。
- sklearn.processing:预处理类。
- sklearn.processing.Imputer:类,能够完成数据中缺失值的插补。
代码解释:
imputer = Imputer(missing_values='NaN', strategy='mean', verbose=0)
imputer = imputer.fit(X[:, 1:3])
X[:, 1:3] = imputer.transform(X[:, 1:3])
print(X)
上述代码实际上是用数组X去训练一个Imputer类,然后再用训练好的类的对象去处理X中的缺失值,缺失值的处理方式是使用X中的均值来代替NaN,axis=0代表按列进行。这是对于X数组本身来处理,也可以使用X来训练,去处理Y数组。
step 4: 编码解析分类数据
分类数据指的是含有标签值而不是数字值的变量,取值范围通常是固定的,如:”Yes“,”No“不能用语模型的数学计算,所以需要解析成数字。
sklearn.preprocessing.LabelEncoder(): 标准化标签,将标签值统一转化为range范围内。
在数据中,我们可以看出X中的Country和Y中的Purchased都是类别字符串,对于机器学习来说无法处理,所以要进行类别编码,利用了LabelEncoder和OneHotEncoder进行编码。
step 5: 将数据集分为测试集和训练集
step 6: 特征缩放
也就是我们所谓的归一化处理,为了防止某些数据过大影响机器学习的效果。