数据预处理 - 类型转换(离散型)

当我们拿到一个数据分析任务时,我们并不能直接调用数据挖掘算法来解决该问题。在实际的任务中,我们所面对的数据质量都不是特别的好,如果我们对质量较差的数据集直接应用算法建模,那么得到结果也可想而知。所以在调用算法之前,必须对数据进行预处理工作。数据预处理是整个数据挖掘过程中最累的一部分工作,但也是非常重要的一部分工作,只要得到质量较高的数据集,后期的建模工作才会更有意义。数据预处理涉及的方面非常的多,如缺失值处理,异常值处理,重复值处理,数据类型转换,样本处理等等。


Data Science.jpg

这一小节,我们先来了解下数据类型转换中的离散型数据转换。在调用算法对数据集进行训练时,算法并不能识别这些离散型的数据(例如:Male, Female),所以,我们就需要将这些离散型数据转换为计算机可识别的数值型数据(如:0,1,2...)。

这里我们介绍4种离散型数据的处理方法,其中两种是使用python的pandas库进行处理,另外两种是使用python的sklearn库进行处理。

导入数据集:
链接:https://pan.baidu.com/s/14nMqBH1kHm_CJWp_7mNE5w
提取码:i75t

import pandas as pd
import numpy as np
pk = pd.read_csv('D:\\Py_dataset\\Pokemon.csv')
pk.head()
Pokemon dataset.png

查看各个特征的类型:

print(pk.dtypes)
Pokemon dtypes.png

我们所说的离散型数据就是object和bool类型的数据,计算机无法直接处理这两类数据,所以我们需对它们做类型转换。
我们选取其中的"Generation"特征作为例子,可以看出"Genaration"特征中有6个类别值,然后分别使用4种方法对其进行处理。

print(pk['Generation'].unique())
['Gen 1' 'Gen 2' 'Gen 3' 'Gen 4' 'Gen 5' 'Gen 6']

1.Pnadas.map()

首先构造映射字典,然后将原始特征映射为新的特征。

#构造映射字典
pk_map = {'Gen 1':1, 
          'Gen 2':2, 
          'Gen 3':3, 
          'Gen 4':4, 
          'Gen 5':5, 
          'Gen 6':6}
#将原始的特征映射为新的特征
pk['Generation_label'] = pk['Generation'].map(pk_map)
#查看新特征中的数据leibie
pk['Generation_label'].unique()
array([1, 2, 3, 4, 5, 6], dtype=int64)

2.Pandas.get_dummies()

get_dummies采用的是one_hot encoding的编码方式,它将特征中的每一个类别值都编码为0,1两种,存在即为1,不存在即为0。

Gen = pd.get_dummies(pk['Generation'])
#随机选取几行结果进行观察
Gen.iloc[581:588]
pd.get_dummies.png

上图便是pd.get_dummies()的操作结果,若对数据进行后续操作,使用pd.concat([pk,gen],axis=1)将两份数据集进行合并。

3.sklearn.preprocessing.LabelEncoder

LabelEncoder方法会将原特征中不同的类别从0开始进行编码,0,1,2,3.....

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()
pk['Gen_le'] = le.fit_transform(pk['Generation'])
print(pk['Gen_le'].unique())
[0 1 2 3 4 5]

4.sklearn.preprocessing.OneHotEncoder

OneHotEncoder方法,从名字上看,与pd.get_dummies()方法是一样的。

from sklearn.preprocessing import OneHotEncoder,LabelEncoder

gen_le = LabelEncoder()
pk['Generation1'] = gen_le.fit_transform(pk1['Generation'])
ohe = OneHotEncoder()
gen_ohe = OneHotEncoder().fit_transform(pk[['Generation']]).toarray()
gen = pd.DataFrame(gen_ohe,columns = list(gen_le.classes_))
gen.head()
onehotencoder方法.png

总结:

离散型数据转化为数值型数据有4种方法[pandas.map(), pandas.get_dummies(), LabelEncoder(), OneHotEncoder()],在平时的数据处理中,我们选择其中的一种就可以。

你可能感兴趣的:(数据预处理 - 类型转换(离散型))