学习笔记

目录

箱形图

价值

局限性

Python画图


箱形图

如下灰色框里的就是箱形图(英文:Box plot):又称为盒须图盒式图盒状图箱线图,是一种用作显示一组数据分散情况资料的统计图。因型状如箱子而得名。

箱形图最大的优点就是不受异常值的影响,可以以一种相对稳定的方式描述数据的离散分布情况。

五数概括法:即用下面的五个数来概括数据(最小值;第1四分位数(Q1);中位数(Q2);第3四分位数(Q3);最大值),箱形图与之类似。

python盒图 python绘制盒图_数据

举个栗子:num=[1,2,3,4,5,6,7,8]

python盒图 python绘制盒图_数据_02

中位数Q2=4.5

下四分分位数Q1=2.75:是怎么计算出来的呢?首先序列长度n=8,(1+n)/4=2.25,说明上四分位数在第2.25个位置数,实际上这个数是不存在的,但我们知道这个位置是在第2个数与第3个数之间的。假设从第2个数到第3个数之间是均匀分布的。那么第2.25个数就是第二个数*0.25+第三个数*0.75,即2*0.25+3*0.75=0.5+2.25=2.75。 
下四分位数Q3=6.25:这个下四分位数所在位置计算方法同上,只不过是(1+n)/4*3=6.75,这个是个介于第六个位置与第七个位置之间的地方。对应的具体的值是0.75*6+0.25*7=6.25。

四分位距IQR=Q3-Q1,上限=(Q3+1.5IQR,max)取最小,下限=(Q1-1.5IQR ,min)取最大。

异常值:比如num=[1,2,3,4,5,6,7,8,20],20会被识别为异常值。

价值

序号

价值

备注

1

直观明了地识别数据批中的异常值

箱线图判断异常值的标准以四分位数和四分位距为基础,四分位数具有一定的耐抗性,多达25%的数据可以变得任意远而不会很大地扰动四分位数,所以异常值不会影响箱形图的数据形状,箱线图识别异常值的结果比较客观。由此可见,箱线图在识别异常值方面有一定的优越性。

2

利用箱线图判断数据批的偏态和尾重

对于标准正态分布的样本,只有极少值为异常值。异常值越多说明尾部越重,自由度越小(即自由变动的量的个数);

3

利用箱线图比较几批数据的形状

同一数轴上,几批数据的箱线图并行排列,几批数据的中位数、尾长、异常值、分布区间等形状信息便昭然若揭。如上图,可直观得看出第三季度各分公司的销售额大体都在下降。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = {
    'China': [1000, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2500],
    'America': [1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100],
    'Britain': [1000, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000],
    "Russia": [800, 1000, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900]
}

df = pd.DataFrame(data)

df.plot.box(title="Consumer spending in each country")
plt.grid(linestyle="--", alpha=0.3)
plt.show()

各国的消费

python盒图 python绘制盒图_python盒图_03

局限性

不能精确地衡量数据分布的偏态和尾重程度;对于批量比较大的数据,反映的信息更加模糊以及用中位数代表总体评价水平有一定的局限性

Python画图

在pyton命令行直接运行就OK

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = [1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100]

df = pd.DataFrame(data)
df.plot.box(title="hua tu")
plt.grid(linestyle="--", alpha=0.3)
plt.show()

箱形图描述数据

python盒图 python绘制盒图_箱形图_04

五数概括法:描述数据

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = [1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000, 2100]
df = pd.DataFrame(data)
print(df.describe())
count    10.000000    # 条数
mean   1650.000000    # 均值
std     302.765035    # 标准差
min    1200.000000    # 最小值
25%    1425.000000    # 下四分位
50%    1650.000000    # 中位数
75%    1875.000000    # 上四分位
max    2100.000000    # 最大值