当前位置: 首页 > news >正文

整理数据制作 直方图,箱须图,概率密度估计(KDE)图

1.导入库和设置
import math
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] # 设置中文字体,作用设置 matplotlib 使用中文字体显示文本

rcParams:matplotlib 的配置参数字典,用于控制图表的各种默认设置

'font.sans-serif':指定无衬线字体族

['SimHei']:字体列表,SimHei 是 Windows 系统自带的中文字体"黑体"

plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题

'axes.unicode_minus':控制坐标轴负号的显示方式

False:使用 ASCII 的减号 -,而不是 Unicode 的负号

2.数据准备
z = [6.0, 5.9, 3.5 , 2.9 , 8.7 , 7.9 , 7.1 , 5.0 , 5.2 , 3.9,
3.7, 6.1, 5.8, 4.1, 5.8, 6.4, 3.8, 4.9, 5.7, 5.5,
6.9, 4.0 , 4.8, 5.1, 4.3, 5.4, 6.8 , 5.9, 6.9, 5.4,
2.4, 4.9, 7.2, 4.2 , 6.2 , 5.8 , 3.8 , 6.2 , 5.7 , 6.8,
3.4 , 5.0 , 5.2, 5.3 , 3.0, 3.6, 3.8, 5.8, 4.9, 3.7]

3.直方图
low = min(z) # 最小值 = 2.4
high = max(z) # 最大值 = 8.7
bins = [i for i in range(math.floor(low), math.ceil(high)+1)] # 创建分组区间 [2,3,4,5,6,7,8,9]

plt.hist(z, bins, weights=np.zeros_like(z)+1./len(z)) # 绘制频率直方图

基础参数:z:输入的数据数组,bins:直方图的分组区间(如 [2,3,4,5,6,7,8,9])

解释第三个参数:

逐步分解:

len(z) 数据总个数,比如50

1./len(z) 1/50 = 0.02,每个数据点的权重

np.zeros_like(z) 创建与z形状相同的全0数组

np.zeros_like(z)+1./len(z) 每个元素都变成 0.02

plt.legend() #显示图例,在这里没有,因为上一行代码plt.hist没有设置label
plt.title(u'频率直方图') #u 前缀表示这是一个 Unicode 字符串
plt.show()

4.箱须图
plt.boxplot(z) #箱须图需要的五个关键统计量都会自动计算:最小值(排除异常值后),第一四分位数 (Q1),中位数 (Q2),第三四分位数 (Q3),最大值(排除异常值后),异常值(基于 IQR 自动识别)
plt.title(u'销售金额箱须图')
plt.show()

5.正态概率分布图
z = np.array(z)
u = z.mean() # 计算均值
var = z.var() # 计算方差
sigma = math.sqrt(var) # 计算标准差

生成正态分布曲线数据

xx = np.linspace(u-3sigma, u+3sigma, num=100)

参数解释:u-3sigma:均值减去 3 倍标准差,u+3sigma:均值加上 3 倍标准差,num=100:生成 100 个等间距点,u±3*sigma 覆盖了99.73% 的数据,能够完整展示正态分布的主要特征。

yy = [np.exp(-(x-u)2/(2*sigma2))/(sigmamath.sqrt(2math.pi)) for x in xx]

f(x) = (1 / (σ√(2π))) * e^(-(x-μ)²/(2σ²))

plt.plot(xx, yy)
plt.title(u'正态概率分布图')
plt.show()

解答疑惑:
-(1)为什么要导入数学库import math # 导入数学库

代码中使用到的 math 函数:

math.floor(low) # 向下取整,用于确定直方图的最小边界
math.ceil(high) # 向上取整,用于确定直方图的最大边界
math.sqrt(var) # 开平方根,计算标准差
math.pi # 圆周率 π,用于正态分布公式
math.sqrt(2*math.pi) # 计算 2π 的平方根
-(2)为什么要导入数学库import numpy as np
numpy 是 Python 中最重要的科学计算库,提供了高效的数组操作和数学函数。

1. 将普通列表转为numpy数组,便于数学运算

z = np.array(z)

2. 计算统计量(比手动计算方便得多)

u = z.mean() # 平均值
var = z.var() # 方差

3. 创建权重数组,用于直方图频率计算

weights=np.zeros_like(z)+1./len(z)

相当于创建了一个数组,每个元素都是 1/数据个数

这样直方图显示的是频率而不是计数

4. 生成平滑的x坐标点,用于绘制正态分布曲线

xx = np.linspace(u-3sigma, u+3sigma, num=100)

在 [均值-3标准差, 均值+3标准差] 范围内生成100个等间距点

5. 计算正态分布概率密度函数

np.exp(-(x-u)2/(2*sigma2)) # 计算e的幂次

http://www.hskmm.com/?act=detail&tid=24828

相关文章:

  • UCosIII 在 Tang Nano 20K 的 SparrowRV 软核移植
  • SIP抓包工具 SIP抓包 SIP抓包
  • 2025声级计厂家最新权威推荐排行榜单! 数字声级计,精密声级计,防爆声级计,手持式声级计,剂量声级计公司推荐!
  • python中使用高并发分布式队列库celery的那些坑 - 指南
  • 在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名计算机控制AI框架需求洞察
  • Codeforces Round 1040 (Div. 1)
  • 2025十一集训——Day3做题
  • 目标检测任务的评估指标P-R曲线 - 指南
  • abc426 题解
  • 运行npp并打开实时双向同步的今日日记纯文本文档 2025年10月5日
  • 完整教程:python学习打卡day43
  • mac 下修改本机hosts
  • 2025测振仪厂家最新企业品牌推荐排行榜,自动诊断测振仪,防爆测振仪,智能测振仪,诊断故障测振仪推荐!
  • 【JNI】JNI环境搭建
  • CS自学笔记
  • vue: 报错: vue ResizeObserver loop completed with undelivered notifications.
  • 原来一个人真的是通过别人认识自己的
  • ds调度mssql多个T-SQL语句同步阻塞实现
  • 2025提升门厂家最新企业品牌推荐排行榜,保温提升门,钢质提升门,消防提升门,分段式提升门,工业提升门公司推荐!
  • 高考数学易错考点02 | 临阵磨枪 - 指南
  • 2025升降机厂家最新企业品牌推荐排行榜,固定式升降机,液压升降机,电动升降机,铝合金式升降机公司推荐!
  • 在 2025 年安装 Visual Studio 2013
  • 算法伦理与机器学习研究获PROSE奖
  • 实验1 C语言开发环境使用和数据类型、运算符、表达符
  • UiPath推出全新AI代理开发功能,简化自动化构建流程
  • 2025年T型螺栓厂家TOP企业品牌推荐排行榜,光伏T型螺栓,不锈钢T型螺栓,地铁专用T型螺栓,高铁T型螺栓公司!
  • 2025 年碳纤维布厂家最新推荐排行榜:精选建筑碳纤维布 ,加固碳纤维布,300克碳纤维布,碳纤维加固布公司
  • MySQL Docker 容器化部署全指南
  • 2025热浸塑钢管工厂最新企业品牌推荐排行榜 ,NHAP热浸塑钢管,电力热浸塑钢管,N-HAP热浸塑钢管,电力涂塑钢管公司推荐!
  • 2025广告喷绘公司最新推荐榜单, 覆盖广告喷绘广告牌,广告喷绘写真,广告喷绘广告牌写真,广告喷绘门头服务!