连续变量离散化教程

为了分析连续数据,通常需要离散化或分成组。本文介绍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.])

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,有多种方法可以对连续变量进行离散化。其中一种简单的方法是使用等宽离散化(也称为等距离离散化),它将连续变量切割为相等宽度的若干区间,使数据点落入这些区间中。在pandas库中,可以使用qcut函数来实现等宽离散化。 另一种常用的离散化方法是等频离散化。这种方法将数据根据频率划分为若干个区间,使每个区间内的数据点数量基本相等。在Python中,可以使用cut函数来实现等频离散化。 下面是一个示例代码,演示了如何使用pandas来进行连续变量的等宽离散化: import pandas as pd import numpy as np # 创建一个包含连续变量的DataFrame data = pd.DataFrame({'age': [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]}) # 使用qcut函数进行等宽离散化 data['age_discretized'] = pd.qcut(data['age'], q=4, labels=False) # 打印结果 print(data['age_discretized']) 这段代码将年龄变量age划分为4个等宽区间,并将离散化后的结果存储在新的age_discretized列中。 另外,如果你想使用等频离散化的方法对连续变量进行离散化,可以参考下面的示例代码: # 使用describe函数自动计算分位数 quantiles = np.linspace(0, 1, num=5, endpoint=False) cut_points = data['age'].describe(percentiles=quantiles)[4:-1] # 使用cut函数进行离散化 data['age_discretized'] = pd.cut(data['age'], bins=cut_points, labels=False) # 打印结果 print(data['age_discretized']) 这段代码将年龄变量age划分为4个等频区间,并将离散化后的结果存储在age_discretized列中。 以上是两种常见的连续变量离散化方法的示例代码,你可以根据自己的需求选择适合的方法进行离散化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [连续变量分箱:等宽离散化 python](https://blog.csdn.net/wellcoder/article/details/130330846)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Python 连续数据离散化最通俗的理解与操作](https://blog.csdn.net/Android_xue/article/details/112237924)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值