Pandas-高级处理(八):数据离散化【pandas.cut:根据指定分界点对连续数据进行分箱处理】【pandas.qcut:指定箱子的数量对连续数据进行等宽分箱处理】【get_dummies】

本文主要是介绍Pandas-高级处理(八):数据离散化【pandas.cut:根据指定分界点对连续数据进行分箱处理】【pandas.qcut:指定箱子的数量对连续数据进行等宽分箱处理】【get_dummies】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Python实现连续数据的离散化处理主要基于两个函数:pandas.cut和pandas.qcut,pandas.cut根据指定分界点对连续数据进行分箱处理,pandas.qcut可以指定箱子的数量对连续数据进行等宽分箱处理(注意:所谓等宽指的是每个箱子中的数据量是相同的)

  • 应用cut、qcut实现数据的区间分组
  • 应用get_dummies实现数据的one-hot编码

数据离散化

  • 可以用来减少给定连续属性值的个数
  • 在连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数值代表落在每个子区间中的属性值。

qcut、cut实现数据分组

  • qcut:大致分为相同的几组
  • cut:自定义分组区间

get_dummies实现哑变量矩阵

# coding:utf-8import pandas as pd#指定箱子分箱(等距离分箱子)
#指定箱子分箱(等距离分箱子)
year = [1992, 1983, 1922, 1932, 1973]   # 待分箱数据
bins = [1900,  1950,  2000]   # 指定箱子的分界点result = pd.cut(year, bins)
print(result)
# 结果如下:
# [(1950, 2000], (1950, 2000], (1900, 1950], (1900, 1950], (1950, 2000]]
# Categories (2, interval[int64]): [(1900, 1950] < (1950, 2000]]
# 结果说明:其中(1950, 2000]说明year列表的第一个值1992位于(1950, 2000]区间print(pd.value_counts(result))   # 对不同箱子中的数进行计数# 结果如下:
# (1950, 2000]    3
# (1900, 1950]    2
# dtype: int64# labels参数为False时,返回结果中用不同的整数作为箱子的指示符
result2 = pd.cut(year, bins,labels=False)
# 输出结果中的数字对应着不同的箱子
print(result2)# 结果如下:
# [1 1 0 0 1]
# 结果说明:其中 1 说明year列表的第一个值1992位于(1950, 2000]区间
# 其中 0 说明year列表的第一个值1922位于(1900, 1950]区间print(pd.value_counts(result2))   # 对不同箱子中的数进行计数# 结果如下:
# 1    3
# 0    2
# dtype: int64# 可以将想要指定给不同箱子的标签传递给labels参数
group_names = [ '50_before', '50_after']
result3 = pd.cut(year, bins, labels=group_names)
print(pd.value_counts(result3))# 结果如下:
# 50_after     3
# 50_before    2
# dtype: int64#等频分箱
#等频分箱
year2 = [1992, 1983, 1922, 1932, 1973, 1999, 1993, 1995]   # 待分箱数据
result4 = pd.qcut(year2,q=4)   # 参数q指定所分箱子的数量   
# 从输出结果可以看到每个箱子中的数据量时相同的
print(result4)# 结果如下:
# [(1987.5, 1993.5], (1962.75, 1987.5], (1921.999, 1962.75], 
# (1921.999, 1962.75], (1962.75, 1987.5], (1993.5, 1999.0], 
# (1987.5, 1993.5], (1993.5, 1999.0]]
# Categories (4, interval[float64]): [(1921.999, 1962.75] < 
# (1962.75, 1987.5] < (1987.5, 1993.5] < (1993.5, 1999.0]]print(pd.value_counts(result4))  # 从输出结果可以看到每个箱子中的数据量时相同的# 结果如下:
# (1993.5, 1999.0]       2
# (1987.5, 1993.5]       2
# (1962.75, 1987.5]      2
# (1921.999, 1962.75]    2
# dtype: int64

1 为什么要离散化

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

2 什么是数据的离散化

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

离散化有很多种方法,这使用一种最简单的方式去操作

  • 原始人的身高数据:165,174,160,180,159,163,192,184
  • 假设按照身高分几个区间段:150-165, 165-180,180-195

这样我们将数据分到了三个区间段,我可以对应的标记为矮、中、高三个类别,最终要处理成一个"哑变量"矩阵

3 股票的涨跌幅离散化

我们对股票每日的"p_change"进行离散化

在这里插入图片描述

3.1 读取股票的数据

先读取股票的数据,筛选出p_change数据

data = pd.read_csv("./data/stock_day.csv")
p_change= data['p_change']

3.2 将股票涨跌幅数据进行分组

在这里插入图片描述

使用的工具:

  • pd.qcut(data, q):
    • 对数据进行分组将数据分组,一般会与value_counts搭配使用,统计每组的个数
  • series.value_counts():统计分组次数
# 自行分组
qcut = pd.qcut(p_change, 10)
# 计算分到每个组数据个数
qcut.value_counts()

自定义区间分组:

  • pd.cut(data, bins)
# 自己指定分组区间
bins = [-100, -7, -5, -3, 0, 3, 5, 7, 100]
p_counts = pd.cut(p_change, bins)

3.3 股票涨跌幅分组数据变成one-hot编码

  • 什么是one-hot编码

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

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

在这里插入图片描述

  • pandas.get_dummies(data, prefix=None)

    • data:array-like, Series, or DataFrame

    • prefix:分组名字

# 得出one-hot编码矩阵
dummies = pd.get_dummies(p_counts, prefix="rise")

在这里插入图片描述




参考资料:
利用pandas实现数据的离散化处理(分箱操作)
pandas:数据离散化与离散化数据的后期处理(one-hot)

这篇关于Pandas-高级处理(八):数据离散化【pandas.cut:根据指定分界点对连续数据进行分箱处理】【pandas.qcut:指定箱子的数量对连续数据进行等宽分箱处理】【get_dummies】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1128679

相关文章

mysql中的group by高级用法

《mysql中的groupby高级用法》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,下面给大家介绍mysql中的groupby用法... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

浅析Java中如何优雅地处理null值

《浅析Java中如何优雅地处理null值》这篇文章主要为大家详细介绍了如何结合Lambda表达式和Optional,让Java更优雅地处理null值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录场景 1:不为 null 则执行场景 2:不为 null 则返回,为 null 则返回特定值或抛出异常场景