• 连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数。离散化方法经常作为数据挖掘的工具。
  • 连续属性的离散化就是将连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数 值代表落在每个子区间中的属性值。

离散化有很多种方法,这使用一种最简单的方式去操作,例如:

  • 原始人的身高数据:165,174,160,180,159,163,192,184
  • 假设按照身高分几个区间段:150~165, 165~180,180~195

1、使用pd.qcut:对数据进行分组

data = pd.Series([0,8,1,5,3,7,2,6,10,4,9])

# qcut()方法第一个参数是数据, 第二个参数定义区间的分割方法, 比如这里把数字分成两半, 那就是[0, 0.5, 1]
# 如果要分成4份, 就是[0, 0.25, 0.5, 0.75, 1], 也可以不是均分, 比如[0, 0.1, 0.2, 0.3, 1], 这就就会按照1:1:1: 7
# 如果是小的数,值就变成'small number',大的数,值就变成'large number':
qcut = pd.qcut(data,[0,0.5,1],labels=['small number','large number'])

# 自行分组,分成10组
qcut = pd.qcut(data,10)
print(qcut)

# 统计分组次数
print(qcut.value_counts())

2、使用pd.cut(data, bins)自定义区间分组:

  • pd.cut(data, bins)
data = pd.Series([0,8,1,5,3,7,2,6,10,4,9])

# 自己指定分组区间
bins = [1, 2, 4,7,10]
counts = pd.cut(data, bins)
print(counts)
c = counts.value_counts()
print(c)

3、get_dummies实现哑变量矩阵

哑变量:也叫虚拟变量,引入哑变量的目的是,将不能狗定量处理的变量量化,如职业、性别对收入的影响,战争、自然灾害对GDP的影响,这种“量化”通常是通过引入“哑变量”来完成的。根据这些因素的属性类型,构造只取“0”或“1”的人工变量

1、离散特征的取值之间没有大小的意义,比如color:[red,blue],那么就使用one-hot编码

2、离散特征的取值有大小的意义,比如size:[X,XL,XXL],那么就使用数值的映射{X:1,XL:2,XXL:3}

df = pd.DataFrame([
    ['green', 'M', 10.1, 'class1'],
    ['red', 'L', 13.5, 'class2'],
    ['blue', 'XL', 15.3, 'class1']])

df.columns = ['color', 'size', 'prize', 'class label']

size_mapping = {
    'XL': 3,
    'L': 2,
    'M': 1}
df['size'] = df['size'].map(size_mapping)
#
class_mapping = {label: idx for idx, label in enumerate(set(df['class label']))}
df['class label'] = df['class label'].map(class_mapping)
print(df)
print(pd.get_dummies(df))