pandas数据离散化 get_dummies()

pandas 数据离散化

离散化

  • 0 准备数据
  • 1 分组
  • 2 离散化(转化为one-hot编码)
import pandas as pd

# 原始数据
height_list = [165, 174, 160, 180, 159, 163, 192, 184]
# 准备数据
data = pd.Series(height_list)
data
0    165
1    174
2    160
3    180
4    159
5    163
6    192
7    184
dtype: int64

第一步: 分组

(1) 自动分组 qcut(series数据, 组数量)

# 自动分组 
sr = pd.qcut(data, 3)
# 分组后数据所在的区间
sr
0      (163.667, 178.0]
1      (163.667, 178.0]
2    (158.999, 163.667]
3        (178.0, 192.0]
4    (158.999, 163.667]
5    (158.999, 163.667]
6        (178.0, 192.0]
7        (178.0, 192.0]
dtype: category
Categories (3, interval[float64]): [(158.999, 163.667] < (163.667, 178.0] < (178.0, 192.0]]
查看每组内的数量value_counts()
# 查看每组内的数量
sr.value_counts()
(178.0, 192.0]        3
(158.999, 163.667]    3
(163.667, 178.0]      2
dtype: int64

(2)自动分组 cut(series数据, [区间值])

sr_cut = pd.cut(data, [150, 165, 180, 195])
sr_cut.value_counts()
(150, 165]    4
(180, 195]    2
(165, 180]    2
dtype: int64
pd.get_dummies(sr_cut, prefix='自定义身高')
自定义身高_(150, 165]自定义身高_(165, 180]自定义身高_(180, 195]
0100
1010
2100
3010
4100
5100
6001
7001

第二步: 进行离散化 get_dummies(分组好的数据, prefix="前缀")

  • 就是把分组好的数据转化为 one-hot编码或者又叫哑变量
# 将分组好的数据转化为 one-hot 编码
pd.get_dummies(sr, prefix='自动身高')
自动身高_(158.999, 163.667]自动身高_(163.667, 178.0]自动身高_(178.0, 192.0]
0010
1010
2100
3001
4100
5100
6001
7001
### 数据离散化的方法及其在数据挖掘中的应用 #### 1. 数据离散化的定义与重要性 数据离散化是在数据分析和预处理阶段的一个关键技术,它指的是将连续型变量转换成分类变量的过程。这一过程有助于简化模型结构、提高算法效率以及增强某些机器学习算法的表现力[^2]。 #### 2. 数值数据离散化技术 ##### 2.1 Binning (数据分箱) Binning 是一种常见的数值数据离散化方法,通过这种方法可以减少噪声的影响并发现重要的模式。具体来说,binning 将整个范围内的数值分成若干区间(即箱子),每个区间的边界由用户指定或自动计算得出。对于每一个观测值,则根据其所属的位置分配给相应的区间标签[^4]。 - **无监督的 binning**: 这种方式不依赖于目标变量来决定如何划分区间,而是基于统计特性如均值、中位数等来进行分割。 - **有监督的 binning**: 此类方法会考虑目标变量的信息,在构建区间时尝试最大化类别之间的差异度,从而更好地服务于预测建模的目的。 ```python import pandas as pd from sklearn.preprocessing import KBinsDiscretizer # 创建样本数据集 data = {'value': [0.2, 2.4, 0.7, 5.6, 1.3]} df = pd.DataFrame(data) # 应用 k-means 聚类法进行分箱操作 discretizer = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='kmeans') binned_data = discretizer.fit_transform(df[['value']]) print(binned_data) ``` #### 3. 字符数据离散化技术 除了数值类型的特征外,字符型或其他非数值属性同样需要被适当地转化为适合分析的形式: ##### 3.1 One-Hot 编码 One-hot 编码是一种简单而有效的字符串转整数表示的方式,它可以有效地捕捉名义尺度上的区别而不引入任何顺序关系假设。该方法会给定一组互斥的状态创建多个二元列,其中只有一个会被设置为 `1` 表明当前状态的存在。 ```python import pandas as pd # 创建带有字符型字段的数据框 categorical_df = pd.DataFrame({'category': ['red', 'green', 'blue']}) # 使用 Pandasget_dummies 函数执行 one-hot 编码 one_hot_encoded = pd.get_dummies(categorical_df['category']) print(one_hot_encoded) ``` ##### 3.2 Factorization (因子编码) Factorization 或者称为 label encoding 可以为有限集合中的每一项赋予唯一的编号作为替代标识符。这种方式特别适用于那些具有内在等级含义的情况,比如大小写敏感的文字串或者是有序排列的颜色名称等等。 ```python import pandas as pd # 构造原始数据表单 color_codes = ["Red", "Green", "Blue"] # 利用 factorize() 方法完成编码工作 factors, unique_labels = pd.factorize(color_codes) print(factors) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值