连续变量离散化教程

本文介绍了pandas库中用于连续数据分组的cut和qcut函数。cut函数允许指定分组边界,如将年龄分为[18,25],[26,35],[35,60]和60以上四组,并可调整边界包含性。qcut函数则根据数据分布自动创建等分组,确保每组元素数量相等。这两个函数对于数据分析中的数据离散化非常有用。

为了分析连续数据,通常需要离散化或分成组。本文介绍pandas包中cut和qcut函数,对连续变量进行使用不同方式进行分组。

cut函数

假设有一组人年龄数据,现在需要分为几组,分别为[18,25],[26,35],[35,60]以及60以上。实现代码:

ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]
bins = [18, 25, 35, 60, 100]
cats = pd.cut(ages, bins)

print(cats)
pd.value_counts(cats)

# (18, 25]     5
# (35, 60]     3
# (25, 35]     3
# (60, 100]    1

与数学符合保持一致,圆括号表示不包括,中括号表示包括边界值。我们也可以通过right=False改变右侧编边界:

right参数

pd.cut(ages, [18, 26, 36, 61, 100], right=False)

标签参数

我们也可以传入分组名称作为标签:

group_names = [' Youth' , ' YoungAdult' , ' MiddleAged' , ' Senior' ]
pd.cut(ages, bins, labels=group_names)

qcut函数

如果你给cut函数传入整数表示分组数量,而不是显示指明分组边界,则会根据数据集中最大值和最小值按照等长进行计算。下面示例把均匀分布数据分为四组:

data = np.random.rand(20)
pd.cut(data, 4, precision=2)

pd.value_counts(cats)

# (0.26, 0.5]      6
# (0.74, 0.99]     5
# (0.011, 0.26]    5
# (0.5, 0.74]      4

与之类似函数是qcut,基于相同数量进行分组。
数据分布不同,使用cut不一定分组有相同元素,因此qcut可以实现每组元素相同。代码如下:

data = np.random.randn(1000) # Normally distributed
cats = pd.qcut(data, 4) # Cut into quartiles
pd.value_counts(cats)

# (0.666, 3.23]         250
# (-0.00942, 0.666]     250
# (-0.651, -0.00942]    250
# (-3.186, -0.651]      250

与cut类似,也可以传入自己的数量范围:

pd.qcut(data, [0, 0.1, 0.5, 0.9, 1.])

### Matlab 中连续变量离散化方法 在Matlab中,对于数据预处理阶段的特征工程而言,可以通过多种方式来执行连续变量离散变量之间的转换。这里介绍两种常用的方法:基于区间的等宽分箱以及利用`discretize`函数。 #### 使用 `histcounts` 函数进行等宽度区间划分 当希望按照固定间隔分割数值范围时,可以采用这种方法: ```matlab % 假设有一组随机分布的数据作为例子 data = randn(100, 1); % 创建一组正态分布的样本点 edges = linspace(min(data), max(data), 5); % 定义四个相等长度的区间边界 [~, bin] = histcounts(data, edges); disp('原始数据:'); disp(data); disp('对应的离散类别:'); disp(bin); ``` 上述代码片段展示了如何通过指定边界的数量来自动生成均匀间距的子区间,并返回每个观测值所属的具体分类编号[^1]。 #### 利用 `discretize` 函数实现更灵活的离散化操作 如果需要更加精细地控制离散化的细节,则推荐使用`discretize`命令来进行定制化设置: ```matlab % 继续沿用之前定义好的 data 变量 numBins = 4; % 设定想要得到几个不同的等级/类目 binEdges = quantile(data, numBins); % 计算四分位数作为新的边缘位置 categories = discretize(data, 'BinMethod', 'quantiles'); disp('根据四分位数确定的区间边界:'); disp(binEdges); disp('对应于各观察值的新标签:'); disp(categories); ``` 这段脚本说明了怎样依据给定量级数目自动调整分区界限,并且能够直接获取经过离散化后的结果向量。 这两种技术都可以有效地帮助研究者们简化复杂的数据集结构,在后续分析过程中提供便利条件。值得注意的是,具体选择哪种策略取决于实际应用场景和个人偏好等因素的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值