首先按照惯例先来认识下直方图是谁,以下是从维基百科搬运过来的直方图的定义:
在统计学中,直方图(英语:Histogram)是一种对数据分布情况的图形表示,是一种二维统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量,以长条图(bar)的形式具体表现。因为直方图的长度及宽度很适合用来表现数量上的变化,所以较容易解读差异小的数值。
直方图也是用条形进行标注的,而条形图和直方图犹如孪生兄弟般让很多人都傻傻分不清,那么我们就先来好好区分一下这两种图形吧:
单纯文字不够直观的话,我们来个图感受下:
假设我们有一组数据,是一个学校200位同学的身高数据,如果想要知道该校学生身高的分布,那么直方图再合适不过了。
这里我用随机数生成了200个值在150到180之间的数表示身高信息:
data = np.random.randint(150,180,200) data
输出的结果:
array([162, 166, 158, 166, 165, 170, 157, 156, 164, 161, 154, 176, 166, 176, 153, 169, 164, 153, 171, 175, 171, 173, 155, 165, 168, 160, 162, 150, 151, 169, 166, 152, 174, 176, 160, 155, 158, 152, 159, 179, 179, 168, 178, 166, 174, 171, 167, 166, 165, 163, 164, 153, 153, 153, 162, 167, 169, 155, 155, 175, 161, 151, 173, 154, 151, 151, 166, 168, 167, 173, 166, 164, 175, 172, 163, 175, 154, 169, 160, 174, 163, 167, 156, 154, 157, 169, 160, 176, 150, 154, 158, 167, 164, 153, 152, 165, 165, 160, 167, 161, 164, 177, 177, 159, 161, 171, 169, 150, 165, 156, 156, 155, 165, 164, 179, 164, 179, 155, 172, 151, 178, 171, 164, 165, 161, 166, 170, 175, 163, 163, 179, 175, 173, 150, 171, 150, 178, 175, 152, 176, 168, 150, 172, 166, 176, 170, 174, 174, 152, 158, 171, 165, 167, 152, 163, 167, 164, 151, 174, 169, 169, 166, 167, 168, 179, 160, 179, 156, 168, 168, 172, 175, 160, 165, 160, 161, 164, 179, 158, 176, 175, 154, 167, 159, 153, 169, 151, 158, 163, 169, 155, 165, 178, 151, 168, 164, 169, 177, 150, 169])
以上就是200位同学的身高信息了,存储在一个数组中。
如果是常见的查看分布,直方图很容易绘制,这里我们通过这组数据探索下直方图函数中各个参数的作用,以更游刃有余的绘制符合需求的直方图。
bins参数指的是要将数据分成几组,它接收的参数可以是整数,也可以是序列,还可以是字符串,常用的是整数和序列。
通过代码来看一下区别:
fig = plt.figure(figsize=(16,4)) pic1 = fig.add_subplot(131) plt.hist(data) plt.title("bins默认10") pic2 = fig.add_subplot(132) plt.hist(data,bins = 15) plt.title("bins = 15") pic3 = fig.add_subplot(133) plt.hist(data,bins = [150,153,156,159,162,165,168,171,174,179]) plt.title("bins取值为序列");
能够看出即使是同一个数据集,分组的情况不同,呈现出来的分布也是有区别的,所以如何分组分成几组也是有学问的。
如果传给参数的是序列,则表示将每个分组的临界值都标识出来,缺点是比较麻烦,优点是很灵活,可以自主决定每个组的组距,每个组的组距都可以是不同的,如果分5组记得需要的临界值是6个,参数序列中需要有6个数值。
一般绘制直方图,都是对整个数据集绘制,有时候可能会有这样的需求,比如我想看该校中身高在155cm到175cm之间的身高分布,那么就需要将整个数据集中符合要求的身高挑选出来绘制直方图,实际上不用这么麻烦,用range参数就可以解决,这个参数就是指定绘图时使用数据的范围的,它接收的是一个元组,元组中放入两个数值表示所取数据的范围。
fig = plt.figure(figsize=(9,4)) pic1 = fig.add_subplot(121) plt.hist(data,bins = 10) plt.title('range默认None') pic2 = fig.add_subplot(122) plt.hist(data,bins = 10,range=(155,175)) #设置范围从155-175 plt.title('range=(155,175)');
能够看到x轴的数值范围发生了变化,整个直方图的形状也发生了变化。
这个参数的意思其实很直观,参数名字直译成中文就是密度的意思。普通的直方图y轴表示的都是频数,而通过density参数可以将y轴转化成密度刻度,这个参数接收布尔值,默认为None。
fig = plt.figure(figsize=(9,4)) pic1 = fig.add_subplot(121) plt.hist(data,bins = 10) #y轴表示计数 plt.title('density默认None') pic2 = fig.add_subplot(122) plt.hist(data,bins = 10, density=True) # density=True 将原本y轴的计数转换成概率密度的计数,直方图下面积为1 plt.title('density=True');
虽然两个图的形状是完全一模一样的,但是细看就能发现y轴的数值不一样,具体的参数作用已经以备注的形式标注到代码中了哦。
这里涉及到了另一个参数normed,这个参数已经被弃用了,它的作用和density一样,只用density就可以了,
大家对这个参数应该不陌生,它经常出现,表示权重。没错在这里也是表示设置权重。它接收的是一个序列,序列中是数值,数值的数量和原数据集中元素的个数一致,也就是每个数值都有自己单独的权重,我用随机数生成了200个数值作为权重传给参数,看一下和不设置权重时有哪些变化。
x0=np.random.rand(200)#生成总和为1的200个数,设置随机权重 ratio=1/sum(x0) x1=x0*ratio fig = plt.figure(figsize=(9,4)) pic1 = fig.add_subplot(121) plt.hist(data,bins = 10) plt.title('weights默认None') pic2 = fig.add_subplot(122) plt.hist(data,bins = 10,weights=x1) plt.title('设置weights');
当所有元素的权重都一样时是第一幅图的情况,而进行权重设置后,分布情况发生了变化,而且y轴也发生了变化,不再是单纯的计数。在实际工作中要谨慎使用权重,以符合业务需求为主哈。
如果英文比较好的人们,一眼就能看出这个参数的作用,直译成中文就是累积的意思。到这里又出现了一个小问题,很多人对“累积”和“累计”又傻傻分不清了,其实这两者还是很容易区分的,看下图特别直观:
是不是能直观区分“累积”和“累计”了?
那就继续探索cumulative参数吧,这个参数接收布尔值,默认为False,通过代码来看一下参数设置不同都有怎样的结果。
fig = plt.figure(figsize=(9,4)) pic1 = fig.add_subplot(121) plt.hist(data,bins = 10) plt.title('cumulative默认False') pic2 = fig.add_subplot(122) plt.hist(data,bins = 10,cumulative=True) #累积直方图,展示累积分布 plt.title('cumulative=True');
左边时普通的直方图,右边时累积直方图,同样可以根据实际的业务需求来进行参数设置哦。
由于篇幅有限,对直方图函数的介绍就先到这里啦。细心的小伙伴可能发现了介绍参数的顺序就是按照函数官方文档中参数的顺序来的,没错,就是按照这个顺序进行的。但是参数中的第一个参数x却没有进行介绍,是这个参数没什么可介绍的嘛?当然不是,这个参数也是有些小细节需要注意的,具体的讲解留到下一篇文章和其他参数一起介绍啦。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
数据分析在当今信息时代发挥着重要作用。单因素方差分析(One-Way ANOVA)是一种关键的统计方法,用于比较三个或更多独立样本组 ...
2025-04-25CDA持证人简介: 居瑜 ,CDA一级持证人国企财务经理,13年财务管理运营经验,在数据分析就业和实践经验方面有着丰富的积累和经 ...
2025-04-25在当今数字化时代,数据分析师的重要性与日俱增。但许多人在踏上这条职业道路时,往往充满疑惑: 如何成为一名数据分析师?成为 ...
2025-04-24以下的文章内容来源于刘静老师的专栏,如果您想阅读专栏《刘静:10大业务分析模型突破业务瓶颈》,点击下方链接 https://edu.cda ...
2025-04-23大咖简介: 刘凯,CDA大咖汇特邀讲师,DAMA中国分会理事,香港金管局特聘数据管理专家,拥有丰富的行业经验。本文将从数据要素 ...
2025-04-22CDA持证人简介 刘伟,美国 NAU 大学计算机信息技术硕士, CDA数据分析师三级持证人,现任职于江苏宝应农商银行数据治理岗。 学 ...
2025-04-21持证人简介:贺渲雯 ,CDA 数据分析师一级持证人,互联网行业数据分析师 今天我将为大家带来一个关于用户私域用户质量数据分析 ...
2025-04-18一、CDA持证人介绍 在数字化浪潮席卷商业领域的当下,数据分析已成为企业发展的关键驱动力。为助力大家深入了解数据分析在电商行 ...
2025-04-17CDA持证人简介:居瑜 ,CDA一级持证人,国企财务经理,13年财务管理运营经验,在数据分析实践方面积累了丰富的行业经验。 一、 ...
2025-04-16持证人简介: CDA持证人刘凌峰,CDA L1持证人,微软认证讲师(MCT)金山办公最有价值专家(KVP),工信部高级项目管理师,拥有 ...
2025-04-15持证人简介:CDA持证人黄葛英,ICF国际教练联盟认证教练,前字节跳动销售主管,拥有丰富的行业经验。在实际生活中,我们可能会 ...
2025-04-14在 Python 编程学习与实践中,Anaconda 是一款极为重要的工具。它作为一个开源的 Python 发行版本,集成了众多常用的科学计算库 ...
2025-04-14随着大数据时代的深入发展,数据运营成为企业不可或缺的岗位之一。这个职位的核心是通过收集、整理和分析数据,帮助企业做出科 ...
2025-04-11持证人简介:CDA持证人黄葛英,ICF国际教练联盟认证教练,前字节跳动销售主管,拥有丰富的行业经验。 本次分享我将以教培行业为 ...
2025-04-11近日《2025中国城市长租市场发展蓝皮书》(下称《蓝皮书》)正式发布。《蓝皮书》指出,当前我国城市住房正经历从“增量扩张”向 ...
2025-04-10在数字化时代的浪潮中,数据已经成为企业决策和运营的核心。每一位客户,每一次交易,都承载着丰富的信息和价值。 如何在海量客 ...
2025-04-09数据是数字化的基础。随着工业4.0的推进,企业生产运作过程中的在线数据变得更加丰富;而互联网、新零售等C端应用的丰富多彩,产 ...
2025-04-094月7日,美国关税政策对全球金融市场的冲击仍在肆虐,周一亚市早盘,美股股指、原油期货、加密货币、贵金属等资产齐齐重挫,市场 ...
2025-04-08背景 3月26日,科技圈迎来一则重磅消息,苹果公司宣布向浙江大学捐赠 3000 万元人民币,用于支持编程教育。 这一举措并非偶然, ...
2025-04-07在当今数据驱动的时代,数据分析能力备受青睐,数据分析能力频繁出现在岗位需求的描述中,不分岗位的任职要求中,会特意标出“熟 ...
2025-04-03