pandas的离散化(分组、区间化)

举报
nineteens 发表于 2020/11/26 16:39:55 2020/11/26
【摘要】 pandas的离散化、分组、区间化简介

  一、离散化

  1、为什么要离散化

  连续属性离散化的目的是为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数。离散化方法经常作为数据挖掘的工具。

  2、什么是数据的离散化

  连续属性的离散化就是在连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数值代表落在每个子区间中的属性值。

  3、离散化操作

  通常对于我们不想要连续的数值,我们可将其离散化,离散化也可称为分组、区间化。

  Python实现连续数据的离散化处理主要基于两个函数,pandas.cut和pandas.qcut,前者根据指定分界点对连续数据进行分箱处理,后者则可以根据指定箱子的数量对连续数据进行等宽分箱处理,所谓等宽指的是每个箱子中的数据量是相同的。下面简单介绍一下这两个函数的用法:

  pandas.qcut函数:是均匀分配,每个区间的样本数相同

  import pandas as pd

  ages = [20, 19, 30, 34, 23, 40, 50] #需要离散化的数组

  se_ages = pd.Series(ages)

  bin = [0, 18, 25, 35, 60] #分组的依据

  se1 = pd.qcut(se_ages, q=4, labels=['Youth', 'YoungAdult', 'MiddleAge', 'Senior'])

  print(se1)

  Pandas为我们提供了方便的函数cut():

  pd.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)

  参数解释:

  x:需要离散化的数组、Series、DataFrame对象

  bins:分组的依据

  right:传入False则指定左边为闭端

  import pandas as pd

  ages = [20, 19, 30, 34, 23, 40, 50] #需要离散化的数组

  se_ages = pd.Series(ages)

  bin = [0, 18, 25, 35, 60] #分组的依据

  se1 = pd.cut(se_ages, bin)

  print(se1)

  4、对分组计数

  count = pd.value_counts(se1)

  print(count)

  5、指定左边为闭区间

  se2 = pd.cut(se_ages, bin, right=False)

  print(se2)

  6、为区间指定名称

  import pandas as pd

  ages = [20, 19, 30, 34, 23, 40, 50] #需要离散化的数组

  se_ages = pd.Series(ages)

  bin = [0, 18, 25, 35, 60] #分组的依据

  se1 = pd.cut(se_ages, bin, labels=['Youth', 'YoungAdult', 'MiddleAge', 'Senior'])

  print(se1) 郑州人流医院 http://www.gzzj020.com/

  二、one-hot编码

  1、什么是one-hot编码

  把每个类别生成一个布尔列,这些列中只有一列可以为这个样本取值为1.其又被称为热编码。

  把下图中左边的表格转化为使用右边形式进行表示:

  2、得出离散化数据的one-hot编码矩阵

  pd.get_dummies(data,prefix=None)

  data:离散化后的数据

  prefix:分组名字

  import pandas as pd

  ages = [20, 19, 30, 34, 23, 40, 50] #需要离散化的数组

  se_ages = pd.Series(ages)

  bin = [0, 18, 25, 35, 60] #分组的依据

  se1 = pd.cut(se_ages, bin, labels=['Youth', 'YoungAdult', 'MiddleAge', 'Senior'])

  print(se1)

  #获得one-hot编码

  dummies = pd.get_dummies(se1, prefix=None)

  print(dummies)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。