一文带你了解”数据分箱“技术

一文带你了解”数据分箱“技术

引言:什么是分箱

分箱就是把数据特定的规则进行分组,实现数据的离散化,增强数据稳定性,减少过拟合风险。逻辑回归中进行分箱是非常必要的,其他树模型可以不进行分箱。

01.数据分箱

数据分箱(Binning)作为数据预处理的一部分,也被称为离散分箱或数据分段。其实分箱的概念其实很好理解,它的本质上就是把数据进行分组

我们以下面数据为例,左边是原始数据,右边是分箱后的数据:

英雄昵称(原始数据) 从属类型(分箱后)
不知火舞 法师
后羿 射手
公孙离 射手
妲己 法师
庄周 辅助
张飞 辅助
马可波罗 射手
海月 法师
盾山 辅助

英雄字段中的数据被分到了以下的不同类型

  • 法师
  • 射手
  • 辅助
数据分箱的好处
  • 相同数据进行遍历比较,避免了全部遍历比较
  • 大大减少了电脑IO次数,提高程序运行速度

02.基于python实现数据分箱案例

实现思路
  1. 先给定 last 为列表第一个数组(并存入temp列表中),将之后的数据从第二个开始与 last中的数据进行比较,如果相同存入 temp列表中。
  2. 如果数据不相同,则将 last 切换为 不同的那个数(并存入temp),并将 temp列表放入一个空列表中。

类型一:基本数据类型比对(数字)

代码实现
box = [1,1,1,2,2,2,3,3,4,4,5,5,5,5,5]

last = box[0]
temp = [box[0]]
box_list = [temp]

for a in box[1::]:
    if a == last:
        temp.append(a)
    else:
        last = a
        temp = [a]
        box_list.append(temp)

print(box_list) # [[1, 1, 1], [2, 2, 2], [3, 3], [4, 4], [5, 5, 5, 5, 5]]

# 实现按每一个分箱列表遍历数据(而不用全部遍历)
for boxs in box_list:
    for i in boxs:
        print(i)
实现效果
[1,1,1,2,2,2,3,3,4,4,5,5,5,5,5]

# 输出结果为
[[1, 1, 1], [2, 2, 2], [3, 3], [4, 4], [5, 5, 5, 5, 5]]

类型二:元组类型比对

代码实现
box = [('法师','不知火舞', '20'),  ('辅助','张飞', '18'),('法师','妲己', '21'),
       ('辅助','钟馗', '18'),('辅助','盾山', '18'),('射手','后羿', '17',),
       ('射手','公孙离', '10',),('法师','海月', '21'),('射手','马可波罗', '10',)]

last = box[0][0]
temp = [box[0]]
box_list = [temp]

for a in box[1::]:
    if a[0] == last:
        temp.append(a)
    else:
        last = a[0]
        temp = [a]
        box_list.append(temp)

print(box_list)

# 实现按每一个分箱列表遍历数据(而不用全部遍历)
for boxs in box_list:
    for i in boxs:
        print(i[0])  # 0取的英雄属性,1取英雄ID,3取使用场次

实现效果
#数据分箱前:
[('法师','不知火舞', '20'),  ('辅助','张飞', '18'),('法师','妲己', '21'),
 ('辅助','钟馗', '18'),('辅助','盾山', '18'),('射手','后羿', '17',),
 ('射手','公孙离', '10',),('法师','海月', '21'),('射手','马可波罗', '10',)]

#数据分箱后:
[[('法师', '不知火舞', '20'), ('法师', '妲己', '21'), ('法师', '海月', '21')], 
[('辅助', '张飞', '18'), ('辅助', '钟馗', '18'), ('辅助', '盾山', '18')],
[('射手', '后羿', '17'), ('射手', '公孙离', '10'), ('射手', '马可波罗', '10')]]

猜你喜欢

转载自blog.csdn.net/H931053/article/details/133177460