数据预处理Part3——真值转换

真值转换

一、分类数据和顺序数据

  1. 分类数据:
    分类数据☞某些数据属性只能归于某一类别的非数值型数据。例如性别中的男、女就是分类数据。分类数据中的值没有明显的高、低、大、小等包含等级、顺序、排序、好坏等逻辑的划分,只是用来区分两个或多个具有相同或相同价值的属性。

  2. 顺序数据:
    顺序数据☞能归于某一有序类别的非数值型数据,例如用户的价值度分为高、中、低,学历分为博士、硕士、学士,这些都属于顺序数据。在顺序数据中,有明显的的排序规律和逻辑层次的划分。

二、运用标志方法处理分类和顺序变量

  分类数据和顺序数据要参与模型计算,通常都会转化为数值型数据。当然,某些算法是允许这些数据直接参与计算的,例如分类算法中的决策树、关联规则等。将非数值型数据转换为数值型数据的最佳方法是:将所有分类或顺序变量的值域从一列多值的形态转为多列只包含真值的形态,其中的真值可用True,False或0,1的方式来表示。这种标志转换的方法有时候也称真值转换。

以用户性别变量举例,原有的用户数据为:

用户性别
张三
李四
王五未知

经过转换后的数据格式为:

用户性别男性别女性别未知
张三100
李四010
王五001

  为什么不能直接用数字来表示不同的分类和顺序数据,而一定要做真值转换?这是因为在用数字直接表示分类和顺序变量的过程中,无法准确还原不同类别信息之间的信息差异和相互关联性。

  • 针对分类数据:性别变量的属性值是男和女,无论用什么值来表示都无法表达出两个值的价值相等且带有区分的含义。如果用1和2区分,那么1和2本身已经带有距离为1的差异,但实际上二者是不具有这种差异性的,其他任意数字都是如此;如果用相同的数字来表示,则无法达到区分的目的。
  • 针对顺序数据:学历变量的属性值是博士、硕士和学士,可以用3-2-1来表示顺序和排序关系,那么为什么是3-2-1,而不是30-20-10或者其他可以表示顺序关系的数字?因此,任何一个有序数字的排序也都无法准确表达出顺序数据的差异性。

三、代码实现:

这里解释一下独热编码:

  独热编码即OneHot编码,又称一位有效编码,其方法是使用N为状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。
  简单来说,对于某一个特征,如果他的值域有m个值,那么经过独热编码后,就变成了m个特征,并且这些特征之间互斥,每一个特征只有一个是生效状态。

  1. 引包
[1]:import pandas as pd
	from sklearn.preprocessing import OneHotEncoder
  1. 制造数据
[2]:df = pd.DataFrame({
	    'id':[1,2,3],
	    'sex':['male','female','female'],
	    'level':['high','low','middle'],
	    'score':[1,2,3]
	})
	df

在这里插入图片描述
3. 分开需要独热编码的特征

[3]:id_data = df["id"]
	raw_convert_data = df.iloc[:,1:]
	raw_covnvert_data

在这里插入图片描述
方法一

[4]:model_enc = OneHotEncoder() # 实例化
	df_new2 = model_enc.fit_transform(raw_convert_data).toarray() # 独热编码转换
	df_new2

在这里插入图片描述

[5]:df_all = pd.concat((id_data,pd.DataFrame(df_new2)),axis=1) # 合并ID和编码后特征
	df_all.columns = ['id','female','male','high','low','middle','score_1','score_2','score_3']
	df_all

在这里插入图片描述
方法二

[6]:df_new3 = pd.get_dummies(raw_convert_data)
	df_new3

在这里插入图片描述

[7]:df_all2 = pd.concat((id_data,df_new3),axis=1)
	df_all2 

在这里插入图片描述
  Pandas的get_dummies方法仅对object和category类型的列做转换,因此在上面示例中,score列虽然也是分类或顺序意义的变量,但不会转换。

参考资料:《Python数据分析与数据化运营

关联文章

数据预处理Part1——数据清洗
数据预处理Part2——数据标准化
数据预处理Part4——数据离散化
数据预处理Part5——样本分布不均衡
数据预处理Part6——数据抽样
数据预处理Part7——特征选择
数据预处理Part8——数据共线性
数据预处理Part9——数据降维

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值