python 数据离散化_连续数据离散化,8种python技巧!让数据处理更简洁!

c9fcc3cec3fdfc035330be2578807091a5c2262c.jpeg?token=0d8b7882f21c63534b70a0880ebc6c86&s=BA0BA04C8590BDC844EE3E800300F09E

前言

python数据处理与分析学习过程中,需要有这样的一种意识,即元“为什么选择了python而不是其他?”既然选择了python,那么在实际应用中,它到底哪里不一样?大家说的方便、快捷、高复用性具体体现在哪里?带着问题进行学习,会有事半功倍的效果,记忆力和识别能力也会有所提高。

在本文,小编跟大家分享的是数据处理与分析中的“离散化或面元”。

为了便于分析,连续数据常常被离散化或拆分为“面元“(bin),假设有一组人员数据,而你希望将它们划分为不同的年龄组:

In [154]: ages=[20,22,25,27,21,23,37,31,61,45,41,32]

8种python技巧

0824ab18972bd40777951bcad03669540eb309f8.jpeg?token=2da57800358f46cd3ef19d8f6964bd17&s=69C1336293FBB9CA1EF909170000E0C2

离散化或面元:cut()

接下来将这些数据划分为“18到25“、”26到35“、”35到60“以及”60以上“几个面元。要实现此功能,需要使用pandas的cut函数:

738b4710b912c8fce9f23ea457bc6540d788219f.jpeg?token=ccf4ec4c263a4be92dddaa2b31a7e7f3&s=49A83872C774582358D80DDB000080B2

codes属性:标号

In [29]: cats.codes

Out[29]: array([0, 0, 0, 1, 0, 0, 2, 1, 3, 2, 2, 1], dtype=int8)

value_counts方法

该方法会按照离散化或面元结果,进行符合区间的值统计,具体使用方法如下:

In [30]: pd.value_counts(cats)

Out[30]:

(18, 25] 5

(35, 60] 3

(25, 35] 3

(60, 100] 1

dtype: int64

控制开/关:right=False

跟“区间“的数学符号一样,圆括号表示开端,而方括号则表示闭端(包括)。哪边是闭端可以通过right=False进行修改:

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

Out[31]:

[[18, 26), [18, 26), [18, 26), [26, 36), [18, 26), ..., [26, 36), [61, 100), [36, 61), [36, 61), [26, 36)]

Length: 12

Categories (4, interval[int64]): [[18, 26) < [26, 36) < [36, 61) < [61, 100)]

设置面元名称:labels

设置自己的面元名称,将labels选项设置为一个列表或数组即可:

In [33]: group_names=['Youth','YoungAdult','MiddleAged','Senior']

In [34]: pd.cut(ages,bins,labels=group_names)

Out[34]:

[Youth, Youth, Youth, YoungAdult, Youth, ..., YoungAdult, Senior, MiddleAged, MiddleAged, YoungAdult]

Length: 12

Categories (4, object): [Youth < YoungAdult < MiddleAged < Senior]

qcut()

qcut是一个非常类似于cut的函数,它可以根据样本分位数对数据进行面元划分。根据数据的分布情况,cut可能无法使各个面元中含有相同数量的数据点。而qcut由于使用的是样本分位数,因此可以得到大小基本相等的面元:

In [37]: data=np.random.randn(1000)

In [38]: cats=pd.qcut(data,4)

In [39]: cats

Out[39]:

[(-0.66, -0.0518], (0.68, 3.328], (-0.66, -0.0518], (0.68, 3.328], (-3.452, -0.66], ..., (-3.452, -0.66], (0.68, 3.328], (-3.452, -0.66], (-0.66, -0.0518], (-3.452, -0.66]]

Length: 1000

Categories (4, interval[float64]): [(-3.452, -0.66] < (-0.66, -0.0518] < (-0.0518, 0.68] < (0.68, 3.328]]

In [40]: pd.value_counts(cats)

Out[40]:

(0.68, 3.328] 250

(-0.0518, 0.68] 250

(-0.66, -0.0518] 250

(-3.452, -0.66] 250

设置自定义分位数

跟cut一样,也可以设置自定义的分位数(0到1之间的数值,包含端点):

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

Out[41]:

[(-1.276, -0.0518], (1.312, 3.328], (-1.276, -0.0518], (-0.0518, 1.312], (-3.452, -1.276], ..., (-3.452, -1.276], (-0.0518, 1.312], (-1.276, -0.0518], (-1.276, -0.0518], (-1.276, -0.0518]]

Length: 1000

Categories (4, interval[float64]): [(-3.452, -1.276] < (-1.276, -0.0518] < (-0.0518, 1.312] < (1.312, 3.328]]

总结

离散化或面元是数据处理与分析中的常用方法。python提供了便捷、丰富的方法。该类方法通常是解决数据分析、机器学习或深度学习中,需要将连续性变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值