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

相关文章

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据