Python数据可视化:直方图、核密度估计图、箱线图、累积分布函数图

本文使用数据来源自2023年数学建模国赛C题,以附件1、附件2数据为基础,通过excel的数据透视表等功能重新汇总了一份新的数据表,从中截取了一部分数据为例用于绘制图表。绘制的图表包括一维直方图、一维核密度估计图、二维直方图、二维核密度估计图、箱线图、累计分布函数图
本文为原创,初稿发布至博客园,网址:https://www.cnblogs.com/-zyr/p/17841061.html,如有转载请标注来源,谢谢!

一.一维直方图和核密度估计图

以某生鲜超市2023年6月30日销售流水数据为基础,整理出当日的各类商品销售情况表(如4.附件:数据的图所示),绘制了蔬菜类别的一维直方图、日销量的一维核密度估计图。核密度估计图可以反映了销售量较为集中的范围。

代码步骤如下:

①从Excel文件中读取名为"2023-6-30日销售情况"的工作表数据

②从表中提取损耗率、日销量和类别等关键列的数据

③利用seaborn和matplotlib绘制了一个包含两个子图的图形,分别是:

蔬菜类别的一维直方图,显示每个类别的销售频数

日销量的一维核密度估计图,显示销售额的分布情况

⑥设置了图形的标签、标题和布局,确保图形的可读性和美观性,通过plt.show()显示生成的图形

关键函数:

①seaborn.histplot(data, bins=20, kde=False, color=‘steelblue’) # 绘制一维直方图

seaborn.histplot() 用于绘制一维直方图,直方图是一种对数据分布进行粗略估计的图形表示。它将数据范围划分为一系列连续的区间,然后统计每个区间内数据点的数量,并将这些数量用柱状图表示。通过直方图,可以直观地看到数据的分布情况,了解数据集中的集中趋势、离散程度等信息

        data:要绘制的数据,可以是 Pandas DataFrame、NumPy 数组或其他类似的数据结构。bins:指定直方图的箱子数量,或者是箱子的边缘位置。可以是一个整数,表示箱子的数量,也可以是一个表示箱子边缘位置的序列。默认值为 `auto`,由 Seaborn 根据数据自动选择  

kde:一个布尔值,表示是否在直方图上叠加核密度估计。默认为 False

color:指定直方图的颜色。可以是字符串(表示颜色的名称)、元组(表示 RGB 值)或其他有效的颜色表示方式。

详细参数可见官方文档:seaborn.histplot — seaborn 0.13.0 documentation (pydata.org)

②seaborn.kdeplot(data, fill=True, color=‘steelblue’)#绘制一维核密度图

seaborn.kdeplot()用于绘制一维核密度图,核密度图是通过对数据进行平滑处理,估计概率密度函数的图形表示。核密度图可以提供更加平滑的数据分布估计,相比直方图,它对数据的分布进行了更加连续的建模。

        data:要绘制的数据,可以是 Pandas DataFrame、NumPy 数组或其他类似的数据结构  

fill:一个布尔值,表示是否填充核密度图下方的区域。如果为 True,则填充;如果为 False,则只绘制轮廓线。默认为 True

color:指定核密度图的颜色。可以是字符串(表示颜色的名称)、元组(表示 RGB 值)或其他有效的颜色表示方式。

代码:

 1 import pandas as pd 2 import matplotlib.pyplot as plt 3 import seaborn as sns  # matplotlib的补充4 5 # 读取Excel文件6 file\_path = "单日销售情况.xlsx"7 sheet\_name = "2023-6-30日销售情况"8 df = pd.read\_excel(file\_path, sheet\_name) 9 
10 # 提取所需的列
11 selected\_columns = \['损耗率(%)', '日销量(千克)', '类别'\]
12 selected\_data = df\[selected\_columns\]
13 
14 # 设置显示中文
15 plt.rcParams\['font.sans-serif'\] = \['KaiTi'\]  # 'SimHei'也可以
16 plt.rcParams\['axes.unicode\_minus'\] = False
17 
18 # 绘制一维直方图
19 plt.figure(figsize=(12, 6))
20 plt.subplot(1, 2, 1)
21 sns.histplot(selected\_data\['类别'\], bins=20, kde=False, color='steelblue')
22 plt.xlabel('类别')
23 plt.ylabel('频数')
24 plt.title('某生鲜超市2023年6月30日销售蔬菜类别一维直方图')
25 
26 # 绘制一维核密度估计图
27 plt.subplot(1, 2, 2)
28 sns.kdeplot(x=selected\_data\['日销量(千克)'\], fill=True, color='steelblue')
29 plt.xlabel('日销量(千克)')
30 plt.ylabel('核密度估计')
31 plt.title('某生鲜超市2023年6月30日销售额一维核密度估计图')
32 
33 # 显示图形
34 plt.tight\_layout()
35 plt.show()

二.二维统计直方图和核密度估计图

以某生鲜超市2023年6月30日销售流水数据为基础,整理出当日的各类商品销售情况表,绘制了某生鲜超市2023年6月30日39种商品的日销量和损耗率的二维统计直方图和二维核密度估计图。

关键步骤:

①读取数据:从Excel文件中读取了名为"2023-6-30日销售情况"的工作表的数据。

②提取所需列:从数据中提取了’损耗率(%)'和’日销量(千克)'两列数据。

③设置图形参数:设置了中文显示和防止负号显示问题的参数。

④绘制统计直方图和核密度估计图:利用matplotlib和seaborn绘制了一个包含两个子图的图形。左侧子图是二维直方图,表示了日销量和损耗率之间的关系;右侧子图是核密度估计图,展示了这两个变量的分布情况。

⑤显示图形:利用plt.show()将图形显示出来。

关键函数:

①plt.hist2d(x=selected_data[‘日销量(千克)’],y=selected_data[‘损耗率(%)’],bins=(50,50),cmap=‘Blues’):

该函数用于绘制二维直方图,其中x和y分别为数据的两个维度横轴和纵轴,bins参数指定了直方图的箱体数量,cmap参数指定了颜色映射。

②sns.kdeplot(x=selected_data[‘日销量(千克)’],y=selected_data[‘损耗率(%)’],cmap=‘Blues’,fill=True):

该函数用于绘制核密度估计图,其中x和y分别为数据的两个维度,cmap参数指定了颜色映射,fill=True表示使用颜色填充密度曲线下面的区域。

代码:

 1 import pandas as pd 2 import matplotlib.pyplot as plt 3 import seaborn as sns   # matplotlib的补充4 5 # 读取Excel文件6 file\_path = "单日销售情况.xlsx"7 sheet\_name = "2023-6-30日销售情况"8 df = pd.read\_excel(file\_path, sheet\_name) 9 
10 # 提取所需的列
11 selected\_columns = \['损耗率(%)', '日销量(千克)'\]
12 selected\_data = df\[selected\_columns\]
13 
14 # 设置显示中文
15 plt.rcParams\['font.sans-serif'\] = \['KaiTi'\]  # 'SimHei'也可以
16 plt.rcParams\['axes.unicode\_minus'\] = False
17 
18 # 绘制统计直方图和核密度估计图
19 plt.figure(figsize=(12, 6))
20 
21 # 绘制二维直方图
22 plt.subplot(1, 2, 1)
23 plt.hist2d(x=selected\_data\['日销量(千克)'\], y=selected\_data\['损耗率(%)'\], bins=(50, 50), cmap='Blues')
24 plt.xlabel('日销量(千克)')
25 plt.ylabel('损耗率(%)')
26 plt.title('某生鲜超市2023年6月30日39种商品日销量和损耗率直方图')
27 
28 
29 # 绘制核密度估计图
30 plt.subplot(1, 2, 2)
31 sns.kdeplot(x=selected\_data\['日销量(千克)'\], y=selected\_data\['损耗率(%)'\], cmap='Blues', fill=True)
32 plt.xlabel('日销量(千克)')
33 plt.ylabel('损耗率(%)')
34 plt.title('某生鲜超市2023年6月30日39种商品日销量和损耗率核密度估计图')
35 
36 # 显示图形
37 plt.tight\_layout()
38 plt.show()

三.箱线图、累积分布函数图

常见的数据分布图表有直方图、核密度估计图、箱线图、散点图、累积分布函数图等,本部分以某生鲜超市2020年7月-2023年2月销售流水数据为基础,整理出小白菜和云南生菜的月销量,绘制箱线图、累积分布函数图,通过箱线图和累积分布函数图分别展示了不同蔬菜销售量的总体分布和累积概率分布情况。

箱线图,又称为盒须图、箱型图,是一种用于显示数据分布情况的统计图表。它能够展示一组或多组数据的中位数、四分位数、最小值、最大值以及可能的异常值

箱体:表示数据的中间50%范围,即上四分位数到下四分位数之间的数据。箱体的长度代表数据的离散度。

中位数:位于箱体中间的线条,表示数据的中间值。

须:由箱体向外延伸的直线,表示数据的最大值和最小值。有时,须的长度可能被限制,以确定是否存在异常值。

异常值:超过须的特定范围的数据点,通常被认为是异常值。在箱线图中,异常值通常用圆点或叉号表示。

箱线图的绘制过程包括计算数据的四分位数和中位数,然后根据这些值绘制箱体和须。箱线图对于检测数据的中心趋势、分散程度以及异常值非常有用,特别适用于比较不同组或类别之间的数据分布。

**累积分布函数:**累计分布函数图是用来表示随机变量的分布情况的图形,显示的是随机变量小于或等于某个特定值的概率,是概率分布函数的积分。通过观察累积分布函数图,可以了解随机变量在不同取值上的累积概率。

关键步骤:

①从Excel文件中读取两个不同蔬菜(小白菜和云南生菜)每月销售信息的数据。

②为每个数据框添加了一个名为"来源"的标签,以便识别不同蔬菜的来源。

③将两个数据框合并为一个名为combined_data的新数据框。

④利用seaborn绘制了一个箱线图,展示了小白菜和云南生菜在2020年7月至2023年2月期间每月销量的分布情况。箱线图显示了销量的中位数、上下四分位数和异常值。

⑤针对小白菜和云南生菜分别提取销量列,计算了它们的累积分布函数,并绘制了两个累积分布函数图。这些图展示了销量在累积概率上的分布情况,帮助了解销量的累积趋势。

关键函数:

①sns.boxplot(x=‘来源’,y=‘销量(千克)’,data=combined_data):使用seaborn绘制箱线图,展示不同蔬菜来源的销量分布情况。

②累积分布函数

np.sort(sales_data):对销量数据进行排序。

np.arange(1,len(sorted_data)+1)/len(sorted_data):计算累积分布函数的概率值。

注:np.arange(1,len(sorted_data)+1)生成一个从 1 到数据集长度的数组,表示每个数据点的累积顺序。然后,除以数据集的长度 len(sorted_data),将排名归一化到范围 [0, 1],从而得到了每个数据点对应的累积概率。

plt.plot(sorted_data,cumulative_prob,marker=‘o’,linestyle=‘-’,color=‘b’):使用matplotlib绘制累积分布函数图。

代码:

 1 import numpy as np 2 import pandas as pd 3 import matplotlib.pyplot as plt 4 import seaborn as sns 5 6 # 读取Excel文件7 file\_path = "某件商品信息.xlsx"8 sheet\_name1 = "小白菜每月销售信息"9 sheet\_name2 = "云南生菜每月销售信息"
10 df1 = pd.read\_excel(file\_path, sheet\_name1)
11 df2 = pd.read\_excel(file\_path, sheet\_name2)
12 
13 # 给数据添加标签,以便识别来源
14 df1\['来源'\] = '小白菜'
15 df2\['来源'\] = '云南生菜'
16 
17 # 合并两个数据框
18 combined\_data = pd.concat(\[df1, df2\])
19 
20 # 设置显示中文
21 plt.rcParams\['font.sans-serif'\] = \['KaiTi'\]  # 'SimHei'也可以
22 plt.rcParams\['axes.unicode\_minus'\] = False
23 
24 # 绘制箱线图
25 sns.boxplot(x='来源', y='销量(千克)', data=combined\_data)
26 plt.xlabel('')
27 plt.ylabel('销量(千克)')
28 plt.title('小白菜和云南生菜2020年7月至2023年2月月销量箱线图')
29 plt.show()
30 
31 # 提取小白菜的销量列
32 sales\_data = df1\['销量(千克)'\]
33 
34 # 计算累积分布函数
35 sorted\_data = np.sort(sales\_data)
36 cumulative\_prob = np.arange(1, len(sorted\_data) + 1) / len(sorted\_data)
37 
38 # 绘制累积分布函数图
39 plt.plot(sorted\_data, cumulative\_prob, marker='o', linestyle='\-', color='b')
40 plt.xlabel('销量(千克)')
41 plt.ylabel('累积概率')
42 plt.title('小白菜销量累计分布函数图')
43 plt.grid(True)
44 plt.show()
45 
46 
47 # 提取云南生菜的销量列
48 sales\_data = df2\['销量(千克)'\]
49 
50 # 计算累积分布函数
51 sorted\_data = np.sort(sales\_data)
52 cumulative\_prob = np.arange(1, len(sorted\_data) + 1) / len(sorted\_data)
53 
54 # 绘制累积分布函数图
55 plt.plot(sorted\_data, cumulative\_prob, marker='o', linestyle='\-', color='b')
56 plt.xlabel('销量(千克)')
57 plt.ylabel('累积概率')
58 plt.title('云南生菜销量累计分布函数图')
59 plt.grid(True)
60 plt.show()

四.附录:数据

单日销售情况.xlsx

某件商品信息.xlsx 小白菜每月销售信息

某件商品信息.xlsx 云南生菜每月销售信息

五.后话

如果你也喜欢编程,想通过学习Python获取更高薪资,这里给大家分享一份Python学习资料。

👉Python所有方向的学习路线👈
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)
在这里插入图片描述

👉Python学习视频600合集👈
在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈
在这里插入图片描述

👉Python副业兼职路线&方法👈
在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以直接下方领取
【保证100%免费】
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT提效:告别CRUD

前言 随着AIGC的发展以及大语言模型的成熟,各种AI应用眼花缭乱,以至于我们看到各种新奇的应用都会产生焦虑,我有一天会不会被淘汰?且看后文分析。AIGC的发展与逐渐成熟已经是无可逆转的局势,既然我们打不过为何不加入…

chrome 录制器及性能分析工具的使用

需求背景: 对比不同VPN方案网络延迟的差异。 验证工具: chrome浏览器自带的录制器、性能插件可以完美的解决这个问题。 注意:录制的操作都在当前页面,不存在新开标签页的场景 解决方案: 使用chrome录制器&#xf…

力扣每日一题 6/20 数学+数组

博客主页:誓则盟约系列专栏:IT竞赛 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 2748.美丽下标对的数目【简单】 题目: 给你一个下标从 0 开始…

Nginx Rewrite技术

一:理解地址重写 与 地址转发的含义。二:理解 Rewrite指令 使用三:理解if指令四:理解防盗链及nginx配置 简介:Rewrite是Nginx服务器提供的一个重要的功能,它可以实现URL重定向功能。 一:理解地…

NodeJs 连接本地 mySql 数据库获取数据

写在前面 今天把 nodejs 连接本地数据库的坑简单的踩一下,为后续写接口做个铺垫 安装 mySql (mac举例子) 安装地址 安装完成大概这个样子,起动起来就行 安装本地数据库连接工具(navicat举例子) 安装地…

EXCEL数据导入HIVE

引言 本文将论述如何将Windows本地的excel表数据,导入到虚拟机Linux系统中的Hadoop生态中的Hive数据仓库中。 实验准备 DBeaver Hive3.1(Hadoop3.1) excel数据表 实验步骤 一、首先打开虚拟机,启动Hadoop,启动h…

Avalonia for VSCode

1、在VSCode中编辑AvaloniaUI界面,在VSCode中搜索Avalonia,并安装。如下图,可以发现Avalonia for VSCode还是预览版。 2、 创建一个Avalonia 项目。 选择项目类型 输入项目名称 选择项目所在文件夹 打开项目 3、项目架构如下图。 4、builde…

项目六 OpenStack虚拟机实例管理

任务一 理解OpenStack计算服务 1.1 •什么是Nova • Nova是OpenStack中的计算服务项目 ,计算虚拟机实例生命周期的所有活动都由 Nova 管理 。 • Nova 提供统一的计算资源 服务。 • Nova 需要下列 OpenStack 服务的 支持。 Keystone :为所有的 OpenSt…

django学习入门系列之第二点《浏览器能识别的标签3》

文章目录 列表表格往期回顾 列表 无序列表 <!-- <ul </ul> 无序列表 --> <ul><li> 内容1 </li><li> 内容2 </li><li> 内容3 </li><li> 内容4 </li> </ul>有序列表 <!-- <ol> &…

第6章 设备驱动程序(6)

目录 6.7 总线系统 6.7.2 PCI总线 6.7.3 USB 6.8 小结 本专栏文章将有70篇左右&#xff0c;欢迎关注&#xff0c;查看后续文章。 6.7 总线系统 6.7.2 PCI总线 PCI由Intel开发&#xff0c;用于替代ISA。 PCI已过时&#xff0c;目前采用PCIe。 PCI特点&#xff1a; 高带宽…

停车场防逃费设备有哪些,捷曜超眸相机怎么样,有哪些功能?

在当今快速发展的城市交通环境中&#xff0c;车场管理面临着诸多挑战&#xff0c;其中防逃费现象尤为突出。频繁的逃费行为不仅给车场运营带来了经济损失&#xff0c;也严重影响了停车场的正常秩序。对于车场防逃费方案中&#xff0c;超眸相机&#xff0c;以其尖端的高清成像技…

C++学习(23)

#学习自用# union 共用体和结构体相似&#xff0c;但是共用体一次只能占用一个成员的内存&#xff0c;所有成员共用同一地址。 #include<iostream> using namespace std; union A {int int_val;float float_val; }a; int main() {a.float_val 2.0f;cout << a.f…

浏览器加了token的header导致部分网页打不开

因为测试加了个token&#xff0c;忘记去掉&#xff0c;导致一些系统进不去&#xff0c;只能用无痕浏览器打开&#xff0c;后来发现是因为token的原因

零散的面试题

★1.java常见的引用类型 强:普通的变量引用 软:内存够时,GC不会主动删除,内存不够时,GC会删除 弱:一旦执行GC就会被删除 虚:用了感觉没用 ★2.JDK1.8新特性 lambda表达式(极大简化了匿名内部类的创建&#xff0c;促进函数式编程的风格)函数式接口(只能有一个抽象方法的接口 )日…

Nexus安卓木马分析报告

概述 2023年3月21日晚上&#xff0c;链安与中睿天下联合研发的监控系统检测到一种新型安卓木马。在经过睿士沙箱系统捕获样本之后&#xff0c;发现该安卓木马极有可能是原安卓网银盗号木马SOVA的变种。与此同时&#xff0c;意大利安全公司Cleafy发布了一篇题为《Nexus&#xf…

一款Wordpress网站导航主题,带昼夜切换功能

Wordpress网站导航主题&#xff0c;带昼夜切换功能。 基于wordpress&#xff0c;部署和使用都比较方便。 界面比较简洁大方。后台管理功能也比较全面&#xff0c;值得一试。 这款主题界面、功能都非常简洁。 作者把这款定位为简约导航主题&#xff0c;所以这款wordpress导航…

飞书API 2-1:如何通过 API 创建文件夹?

本文探讨如何通过飞书的 API 来创建文件夹。通过 API 创建的文件夹&#xff0c;一般是放在共享空间&#xff0c;如果要放在个人空间&#xff0c;建议手动创建。 查看 API 文档 API 路径&#xff0c;可在飞书开放平台的服务端 API&#xff0c;依次查找云文档>云空间>文件…

MavenPlus插件的基础功能完善

本次更新主要是在初版的searchEverywhere的基础上增加了pom.xml文件编辑器&#xff0c;目前的界面布局如下&#xff0c;进行适当说明&#xff1a; 打开pom文件后&#xff0c;你会得到如上图所示的布局页面&#xff0c;数据会同步显示 如果有冲突信息&#xff0c;则会以红色显示…

【Android面试八股文】你刚刚提到了V2签名使用美团的Walle实现多渠道打包,那么你能讲一讲Android 签名的 v1、v2、v3、v4版本的区别吗?

文章目录 前言一、简介二、APK 签名方案 v1 (JAR签名)2.1. 签名过程2.2 验证过程2.3 详细例子2.4 优缺点2.5 美团基于V1版本的多渠道打包方案三、APK 签名方案 v23.1 为什么要设计APK 签名方案 v2 ?3.2 APK 签名方案 v2 : 签名前和签名后的 APK3.2.1 签名前和签名后的 APK3.2…

qmt量化交易策略小白学习笔记第40期【qmt编程之期货数据--如何获取合约基础信息】

qmt编程之获取期货数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 感谢关注&#xff0c;咨询免费开通量化回测与获取实盘权限&#xff0c;欢迎和博主联系&#xff01; 获取合约基础信息 …