pandas---分箱(离散化处理)、绘图、交叉表和透视表

news2024/9/21 2:41:49

1. 分箱

分箱操作就是将连续型数据离散化。分箱操作分为等距分箱和等频分箱.

1.1 等宽分箱

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

duplicates='raise', ordered=True)

x:要分箱的一维数组或者 Series。

bins:箱子的边界指示。有三种输入方式:

整数数量的箱子数;

箱子的边缘值数组;

箱子数量与箱子间隔。例如bins=a-q表示 17 个箱子(十六进制字母中 a-q )。

data = np.random.randint(0, 100, size=(5, 3))
df = pd.DataFrame(data=data, columns=['Python', 'Pandas', 'PyTorch'])
s = pd.cut(df.Python, bins=4)
s.value_counts()
pd.cut(
    df.Python,   # 分箱数据
    bins=[0, 30, 60, 80, 100],  # 分箱断点
    right=False,  # 左闭右开,默认是左开右闭
    labels=['D', 'C', 'B', 'A']  # 分箱后分类的标签
)

 1.2 等频分箱

 pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise')

qcut函数根据数据的分位数将数据分成了几个等分(指定 q 的值),并将每个数据点对应到相应的

分组(区间)中,最后用labels中指定的标签表示每个数据点所在的分组。

pd.qcut(
    df.Python,   # 分箱数据
    q=4,  # 4等份
    labels=['D', 'C', 'B', 'A']  # 分箱后分类的标签
)

2. 绘图

Series和DataFrame都有一个用于生成各类图表的plot方法。

Pandas的绘图是基于Matplotlib, 可以快速实现基本图形的绘制,复杂的图形还是需要用

Matplotlib。

2.1 折线图

s = pd.Series([100, 250, 300, 200, 150, 100])
s.plot()

# sin曲线
x = np.arange(0, 2*np.pi, 0.1)
y = np.sin(x)
s = pd.Series(data=y, index=x)
s.plot()

 

DataFrame图表:图例的位置可能会随着数据的不同而不同。

data = np.random.randint(50, 100, size=(5, 6))
index = ['1st', '2nd', '3th', '4th', '5th']
columns = ['Jeff', 'Jack', 'Rose', 'Lucy', 'Lily', 'Bob']
df = pd.DataFrame(data=data, index=index, columns=columns)
# 每一列 一根线
df.plot()
# 每一行 一根线
# df.T.plot()

 

2.2 条形图和柱状图

series画图:

s = pd.Series(data=[100, 200, 300, 200])
s.index = ['Lily', 'Lucy', 'Jack', 'Rose']
# s.plot(kind='bar')  # 柱状图
s.plot(kind='barh')  # 水平:条形图

# kind : str
#     The kind of plot to produce:
#     - 'line' : line plot (default)
#     - 'bar' : vertical bar plot
#     - 'barh' : horizontal bar plot
#     - 'hist' : histogram
#     - 'box' : boxplot
#     - 'kde' : Kernel Density Estimation plot
#     - 'density' : same as 'kde'
#     - 'area' : area plot
#     - 'pie' : pie plot
#     - 'scatter' : scatter plot
#     - 'hexbin' : hexbin plot.

dataframe柱状图:

data = np.random.randint(0, 100, size=(4, 3))
index = list("ABCD")
columns = ['Python', 'C', 'Java']
df = pd.DataFrame(data=data, index=index, columns=columns)
# df.plot(kind='bar')
df.plot(kind='barh')
# df.plot(kind='bar')  # 第一种方式
# df.plot.bar()  # 第二种方式
# df.plot.bar(stacked=True)  # 堆叠

2.3 直方图

rondom生成随机数百分比直方图,调用hist方法:

柱高表示数据的频数,柱宽表示各组数据的组距;

参数bins可以设置直方图方柱的个数上限,越大柱宽越小,数据分组越细致;

设置density参数为True,可以把频数转换为概率。

s = pd.Series([1, 2, 2, 2, 2, 2, 2, 3, 3, 4, 5, 5, 5, 6, 6])
# 直方图
# bins=4 表式4个组
# density: 频数转换为概率
s.plot(kind='hist', bins=5, density=True)

kde图:核密度估计,用于弥补直方图由于参数bins设置的不合理导致的精度缺失问题 。

# kde图:核密度估计
s.plot(kind='hist', bins=5, density=True)
s.plot(kind='kde')  # 可以结合上面的直方图一起显示,效果更好

 

2.4 饼图

df = pd.DataFrame(data=np.random.rand(4, 2), 
                             index=list('ABCD'),
                              columns=['Python', 'Java']
                 )
# 画饼图
# df['Python'].plot(kind='pie', autopct='%.1f%%')
# subplots: 子图
df.plot.pie(subplots=True, figsize=(8, 8), autopct='%.1f%%')

2.5 散点图

散点图是观察两个一维数据数列之间的关系的有效方法,DataFrame对象可用。

data = np.random.normal(size=(1000, 2))
df = pd.DataFrame(data=data, columns=list('AB'))
df.head()
# df.plot(kind='scatter', x='A', y='B')
# x='A' : 使用A列作为X轴
# y='B' : 使用B列作为Y轴
df.plot.scatter(x='A', y='B')

2.6 面积图 

df = pd.DataFrame(data=np.random.rand(10, 4), columns=list('ABCD'))
# df.plot(kind='area')
df.plot.area(stacked=True)  # 堆叠

2.7 箱型图 

df = pd.DataFrame(data=np.random.rand(10, 4), columns=list('ABCD'))
# df.plot(kind='box')
df.plot.box()
#  最大值
#  75%
#  50%
#  25%
#  最小值
# 圆点:表式异常值,离群点

4. 交叉表与透视表

交叉表:交叉表用于计算一列数据对于另外一列数据的分组个数(用于统计分组频率的特殊透视表)

pd.crosstab(value1, value2)

透视表:透视表是将原有DataFrame的列分别作为行索引和列索引,然后对指定列应用聚集函数。

DataFrame.pivot_table([], index=[])

# 寻找星期几跟股票张得的关系
# 1、先把对应的日期找到星期几
date = pd.to_datetime(data.index).weekday
data['week'] = date
# 2、假如把p_change按照大小去分个类0为界限
data['posi_neg'] = np.where(data['p_change'] > 0, 1, 0)
# 通过交叉表找寻两列数据的关系
count = pd.crosstab(data['week'], data['posi_neg'])
# 算数运算,先求和
sum = count.sum(axis=1).astype(np.float32)
# 进行相除操作,得出比例
pro = count.div(sum, axis=0)
pro.plot(kind='bar', stacked=True)
plt.show()
# 通过透视表,将整个过程变成更简单一些
data.pivot_table(['posi_neg'], index='week')

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/659921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式系统概念和设计——分布式共享内存

分布式系统概念和设计 分布式共享内存 分布式共享内存是在不共享物理内存的计算机之间实现数据的共享的一个抽象。 有一个底层运行的系统保证其透明性,但是进程还是根据内存的分布处理物理内存的分布式能力 DMS最关键点: 不需要关心数据的通信&#xff…

百家号热议排名代发

百家号热议排名代发,百度排名怎么做,有什么技巧或者方式方法吗#百度首页关键词排名#百度推广#百度竞价推广#百度关键词排名#百度首页关键词排名方法# 其实百度推广并不赚钱,也没有你想象中的那么好做。 我说三点, 99% 的用户都遇…

C语言之动态内存分配讲解(2)

动态内存函数的介绍 在开始本章节之前,我们来复习一下动态内存分配(1)中所讲到的知识,看下面目录一和目录二 为什么存在动态内存分配 我们已经掌握的内存开辟方式有 int val 20;//在栈空间上开辟四个字节 char arr[10] {0};/…

Go语言并发之扇入和扇出

1、Go语言并发之扇入和扇出 编程中经常遇到扇入和扇出两个概念,所谓的扇入是指将多路通道聚合到一条通道中处理,Go 语言最简单的扇入 就是使用 select 聚合多条通道服务;所谓的扇出是指将一条通道发散到多条通道中处理,在Go语言…

揭开视频识别(动作识别)的神秘面纱(附代码和demo)!

PaddleDetection 在计算机视觉中,视频识别和检测是一个重要的方向。历年来CVPR和ICCV等顶会文章中这类论文是最多的。视频识别和检测也是最有落地场景前景的,像人脸识别、动作检测、异常检测、行人重识别、行人计数等都是很有落地前景的应用方向。本文介…

shardingsphere第三课各种功能点及核心源码

一、功能点 1.审计功能 分片审计功能是针对数据库分片场景下对执行的 SQL 语句进行审计操作。分片审计既可以进行拦截操作,拦截系统配置的非法 SQL 语句,也可以是对 SQL 语句进行统计操作。 目前ShardingSphere内置的分片审计算法只有一个,…

C语言指针初进阶知识汇总

目录 1 指针 1.1 指针是乜嘢 1.2 指针的声明 1.3 运算符 1.4 简单的小例子们 1.5 指针的运算 1.5.1 指针加减运算 1.5.2 间址运算 1.5.3 指针的相减 两个地址之间的偏移量 2 指针与数组 2.1 指针和一维数组 2.1.1 定义数组及指针变量 2.1.2 能动手就不要瞎扯 2.…

当 Rokid 遇上函数计算

作者:王彬(阿里云解决方案架构师)、姚兰天(Rokid 技术专家)、聂大鹏(阿里云高级技术专家 ) 公司背景和业务 Rokid 创立于2014年,是一家专注于人机交互技术的产品平台公司。Rokid 通…

2023/6/18周报

目录 摘要 论文阅读 1、题目和现有问题 2、工作流程 3、图神经网络模块 4、注意力网络 5、实验结果和分析 深度学习 1、GNN和GRU的融合 2、相关公式推导 总结 摘要 本周在论文阅读上,对基于图神经网络和改进自注意网络的会话推荐的论文进行了学习&#…

DPdisPCA算法原理笔记

概要 本文简单理顺《Differentially Private Distributed Principal Component Analysis》论文中的算法原理,它主要提出了一种基于差分隐私的分布式PCA算法,研究了该算法在实验数据以及真实数据中的表现,在参数相同的情况下本算法取得了和没…

OpenGL之深度测试

文章目录 深度测试深度测试函数源代码 深度测试 深度缓冲就像颜色缓冲(Color Buffer)(储存所有的片段颜色:视觉输出)一样,在每个片段中储存了信息,并且(通常)和颜色缓冲有着一样的宽度和高度。深…

Python3 条件控制与循环语句 | 菜鸟教程(八)

目录 一、Python3 条件控制 (一)Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。 (二)if 语句 1、Python中if语句的一般形式如下所示: 2、注意&#…

<Linux开发>驱动开发 -之-platform 驱动

<Linux开发>驱动开发 -之-platform 驱动 交叉编译环境搭建: <Linux开发> linux开发工具-之-交叉编译环境搭建 uboot移植可参考以下: <Linux开发> -之-系统移植 uboot移植过程详细记…

基于SpringBoot+Vue的民宿管理平台系统设计与实现

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

某音短视频评论采集翻页(移动安全篇)

本章测试一个作品的评论及翻页: 以及前面的抓x包方式,在专栏里也有很多,xposed抓包过sslping,通用版本等; https://codeooo.blog.csdn.net/category_11500477.html 翻页通过页码来控制: # -*- coding:…

Docker部署(1)——将jar包打成docker镜像并启动容器

在代码编写完成即将部署的时候,如果采用docker容器的方法,需要将jar包打成docker镜像并通过镜像将容器启动起来。具体的步骤如下。 一、首先下载java镜像 先使用docker search java命令进行搜索。 然而在拉取镜像的时候要注意不能直接去选择pull java ,…

kubernetes(k8s)理论篇

注意:kubeadm与docker是有版本要求的。 如果版本不兼容,初始化 kubeadm是会出现以下问题。 学习k8s掌握知识 基础概念 什么是 Pod 控制器类型 K8S 网络通讯模式 Kubernetes 构建 K8S 集群 资源清单 资源 掌握资源清单的语法 编写 Pod 掌握 Pod 的…

C国演义 [第四章]

第四章 全排列题目理解步骤树形图递归函数递归结束条件单层逻辑 代码 全排列II题目理解步骤递归函数递归结束条件单层逻辑 代码 全排列 力扣链接 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输…

简要介绍 | 深度学习中的自注意力机制:原理与挑战

注1:本文系“简要介绍”系列之一,仅从概念上对深度学习中的自注意力机制进行非常简要的介绍,不适合用于深入和详细的了解。 注2:"简要介绍"系列的所有创作均使用了AIGC工具辅助 深度学习中的自注意力机制:原…

android jetpack databinding的基本使用(java)

目录 databing的基本使用二级页面的绑定自定义BindingAdapter自定义BinddingAdapter的可选旧值双向绑定使用ObservableField来进行双向绑定 在recycleview中使用databinding databing的基本使用 开启databing android {........dataBinding{enable true} }修改布局文件 为布…