机器学习—编程基础1
预处理黑色星期五数据(熟悉流程,后续文章有进行预测部分)
主要步骤流程:
- 1. 导入包和数据集
- 2. 处理缺失数据
- 3. 特征工程
- 4. 处理类别型字段
- 5. 得到自变量和因变量
- 6. 拆分训练集和测试集
- 7. 特征缩放
1. 导入包和数据集
In [2]:
# 导入包
import numpy as np
import pandas as pd
In [3]:
# 导入数据集
data = pd.read_csv('BlackFriday.csv')
data.head(5)
Out[3]:
2. 处理缺失数据
In [4]:
# 处理缺失数据
# 检测缺失值
null_df = data.isnull().sum()
null_df
Out[4]:
Marital_Status字段有3个缺失值;根据业务场景,缺失的默认是未婚,即用0填补。 Product_Category_2字段有15721个缺失值;根据业务场景,这个字段不重要,删除。 Product_Category_3字段有34817个缺失值;根据业务场景,这个字段不重要,删除。
In [5]:
# 删除2个缺失列
data = data.drop(['Product_Category_2', 'Product_Category_3'], axis = 1)
In [6]:
# 填补缺失列
data['Marital_Status'].fillna(0, inplace = True)
In [7]:
# 再次检测缺失值
null_df = data.isnull().sum()
null_df
Out[7]:
3. 特征工程
特征工程(Feature Engineering)是将原始数据转化成更好的表达问题本质的特征的过程
In [8]:
# 特征工程
# 删除无用的列
data = data.drop(['User_ID', 'Product_ID'], axis = 1)
In [9]:
# 处理Stay_In_Current_City_Years列
data['Stay_In_Current_City_Years'].replace('4+', 4, inplace = True)
data['Stay_In_Current_City_Years'] = data['Stay_In_Current_City_Years'].astype('int64')
4. 处理类别型字段
In [10]:
# 处理类别型字段
# 检查类别型变量
print(data.dtypes)
根据业务场景,Occupation列、Marital_Status列和Product_Category_1列应该是类别型字段。需要转换。
In [11]:
# 转换变量类型
data['Product_Category_1'] = data['Product_Category_1'].astype('object')
data['Occupation'] = data['Occupation'].astype('object')
data['Marital_Status'] = data['Marital_Status'].astype('object')
In [12]:
# 检查类别型变量
print(data.dtypes)
In [13]:
# 字符编码&独热编码
data = pd.get_dummies(data, drop_first = True)
data.head(5)
Out[13]:
5. 得到自变量和因变量
In [14]:
# 得到自变量和因变量
y = data['Purchase'].values
print(y.shape)
data = data.drop(['Purchase'], axis = 1)
x = data.values
print(x.shape)
6. 拆分训练集和测试集
In [15]:
# 拆分训练集和测试集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 205)
print(x_train.shape)
print(x_test.shape)
print(y_train.shape)
print(y_test.shape)
自变量保存到x_train和x_test中,因变量保存到y_train和y_test中。
7. 特征缩放
In [16]:
y_train.shape
Out[16]:
In [17]:
a = y_train.reshape(-1, 1)
a.shape
Out[17]:
In [18]:
# 特征缩放
from sklearn.preprocessing import StandardScaler
sc_x = StandardScaler()
x_train = sc_x.fit_transform(x_train)
x_test = sc_x.transform(x_test)
sc_y = StandardScaler()
y_train = np.ravel(sc_y.fit_transform(y_train.reshape(-1, 1)))
In [19]:
x_train[:3,:]
Out[19]:
In [20]:
y_train[:3]
Out[20]:
缩放后的x_train和y_train,所有特征的值处于相似范围内。
结论: 数据预处理有固定的方法。 Python提供了丰富的库,方便人们做数据预处理工作。 最初的数据通过数据预处理生成了x_train、y_train、x_test、y_test。在下一章中,前2个变量将训练模型,后2个变量将评估模型。