直方图的常见形状什么是直方图?
直方图(Histogram),又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。
场景假设:
现想统计某一团队在一定周期内的需求交付时效的分布情况,(需求交付时效指的是从需求提出到需求上线的时间差),以便向领导展示团队的交付能力。
假设已收集到57个需求,交付时效从3到146不等(此处会涉及到团队接的需求大小不一的情况,如何来更好的衡量团队需求规模,这可以在下一个话题里讨论)
- 将以上的需求交付时效列在CSV文件中,类似下图:
需求交付时效
2.相关概念
组数:在统计数据时,把数据按照不同的范围分成几个组,分成的组的个数称为组数。
组距:每一组两个端点的差
规格上限:Tu
规格下限:Tl
公差中心:(Tu+Tl)/2
- 步骤理解:
1)求出其最大值和最小值。
2)将数据分成若干组,并做好记号。
3)计算组距的宽度。用最大值和最小值之差(极差)去除组数,求出组距的宽度。(此次假设为10)
4)计算各组的界限位。各组的界限位可以从第一组开始依次计算,第一组的下界为最小值减去最小测定单位的一半,第一组的上界为其下界值加上组距。第二组的下界限位为第一组的上界限值,第二组的下界限值加上组距,就是第二组的上界限位,依此类推。
5)统计各组数据出现频数,作频数分布表。
6)作直方图。以组距为底长,以频数为高,作各组的矩形图。
4.编写Python代码实现直方图的绘制
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#使用%matplotlib命令可以将matplotlib的图表直接嵌入到Notebook之中,或者使用指定的界面库显示图表,它有一个参数指定matplotlib图表的显示方式
#inline表示将图表嵌入到Notebook中。
#%matplotlib inline
#为了使画出来的图支%持 retina格式
#%config InlineBackend.figure_format = 'retina'
iq_data = pd.read_csv('July.csv')
#查看数据长度
len(iq_data)
#把希望展示的数据集中的 time 定义为 time
iq = iq_data['Duration']
#mean均值,是正态分布的中心,把 数据集中的均值 定义为 mean
mean = iq.mean()
print(mean)
std = iq.std()
print(std)
#normfun正态分布函数,mu: 均值,sigma:标准差,pdf:概率密度函数,np.exp():概率密度函数公式
def normfun(x,mu, sigma):
pdf = np.exp(-((x - mu)**2) / (2* sigma**2)) / (sigma * np.sqrt(2*np.pi))
return pdf
# x的范围为60-150,以1为单位,需x根据范围调试
x = np.arange(0,150,1)
# x数对应的概率密度
y = normfun(x, mean, std)
# 参数,颜色,线宽
plt.plot(x,y, color='r',linewidth = 3)
#数据,数组,颜色,颜色深浅,组宽,显示频率
plt.hist(iq, bins =10, color = 'b',alpha=0.5,rwidth= 0.7, normed=True)
plt.title('Duration distribution in July')
plt.xlabel('Duration')
plt.ylabel('Probability')
plt.show()
-
代码运行后的图形展示
直方图展示
4.上图中紫蓝色的部分为直方图,红色的线条为正态分布曲线图,从交付时效上来看此团队的交付时效并不满足正态分布的形状,更类似于韦伯分布,也就是通常我们所说的长尾分布。
直方图能很好的体现出时效值和它所出现的频率之间的关系。
- 若我们以上一篇文章敏捷团队中如何度量需求时效(Python版)的思路来计算此团队的需求交付时效的P85值,则可加上以下代码:
a=np.array(iq)
np.median(a)#中位数
s = np.percentile(a,85)#85%分位数
print(s)#此时值为84.6
也就是我们可以向领导或者业务团队承诺说下一个阶段我们交付一个需求大约85%的概率会在84.6天以内完成。
网友评论