数据集预处理系列

第一篇 连续型数据的离散化 代码实操



文章目录

  • 数据集预处理系列
  • 前言
  • 一、数据及离散化过程
  • 1.数据
  • 2. 离散化例子
  • 3.使用的api接口
  • 4.实现过程
  • pd.qcut实现
  • pd.cut实现
  • 总结



前言

连续型数据有其好处,其能够精准地表示出某个项的具体内容。例如身高,能够具体表示出其为180cm,或者172cm,而离散化的数据是没办法的。但是我们有时候不需要如此精确,例如,我只需要知道身高是高一点,还是中等,还是低,这就是一个范围问题

本文会用一个数据集例子,配合所用到的代码,说明如何把连续型数据离散化并可以作为输入进入模型。


一、数据及离散化过程

1.数据

可以同时将连续型数据和离散型数据输入神经网络模型吗 连续型数据离散化举例_数据集


这里从一个数据集中提取了某一列的前30个数据作为例子,上图是其内容。

2. 离散化例子

例如:
身高:165,174,160,180,159,163,192,184
离散化后:150 ~ 165,165 ~ 180,150 ~ 165,180 ~ 195,150 ~ 165,150 ~ 165,180 ~ 195,180 ~ 195

每一个数目都会变成一个范围!

3.使用的api接口

  • pd.qcut
  • pd.cut
pd.qcut能够让程序自动帮你把df中的数据划分成几个部分(即实现离散化),主要使用的有两个参数,
         第一个为x,传入的是dataframe,第二个为q,指定的是要划分的个数
         
  pd.cut能够指定划分的是区域,x传入的是dataframe,bins传入一个指定的划分区域,例如        
        [-1,100,200,300,400,500],指的是-1到100为一个划分(不包括-1)

4.实现过程

pd.qcut实现

pd_qcut = pd.qcut(src_bytes_data.rank(method='first'), q=5)

前9个的结果为:
0 (24.2, 30.0]
1 (12.6, 18.4]
2 (0.999, 6.8]
3 (18.4, 24.2]
4 (12.6, 18.4]
5 (0.999, 6.8]
6 (0.999, 6.8]
7 (0.999, 6.8]
8 (0.999, 6.8]

这里用了rank,是因为qcut在分段的时候,每个段的边界数值必须独一无二,如果有重复是会报错的,使用rank会进行排序,把数值替换成排序的序号,可以参考下面文章
rank的使用

pd.cut实现

q=[-1,100,200,300,400,500]
pd_cut = pd.cut(x=src_bytes_data, bins=q)

前9个的结果为:
0 (400, 500]
1 (100, 200]
2 (-1, 100]
3 (200, 300]
4 (100, 200]
5 (-1, 100]
6 (-1, 100]
7 (-1, 100]
8 (-1, 100]

如果想要看每个划分的个数,可以使用pd的value_counts对象

print(pd_cut.value_counts())

输出划分个数,结果如下:
(-1, 100]     15
(200, 300]     8
(100, 200]     3
(400, 500]     2
(300, 400]     2

最后,每一个数值都被一个范围代替了,我们可以使用独热编码进行编码,使之能够输入模型。
这里用了pd.get_dummies方法,具体结果如下:

data_(-1, 100]  data_(100, 200]  ...  data_(300, 400]  data_(400, 500]
	0               0                0  ...                0                1
	1               0                1  ...                0                0
	2               1                0  ...                0                0
	3               0                0  ...                0                0
	4               0                1  ...                0                0

总结

以上就是我个人对连续型数据的离散化的初步理解,希望配合上其他文章,能让初学者更容易理解。如果觉得有用,请大家点赞支持!!!!