关于平均数

关于平均数

  根据国家统计局发布的信息,2019年全国城镇非私营单位在岗职工社会年平均工资提升到了82461元,比2018年名义增加11%,实际增加8.7%。城镇私营单位在岗职工社会平均工资达到了49575元,比2018年上涨8.3%,扣除价格因素后,实际增加6.1%。算法

  这些数据引发了广大网友的质疑,有人说本身拖了社会主义的后腿,本身又“被平均了”;也有土豪表示“没拖后腿,本身不差钱”。不少人调侃国家统计局的平均数计算方式:“张家有财一千万,九个邻居穷光蛋,平均起来算一算,个个都是张百万”。国家统计局的计算方式可不是简单地“平均起来算一算”,这种平均数仅仅是算数平均数,也叫均值。学习

均值

  均值你们都清楚,就是求和平均,这是最深刻人心的一种平均数。spa

  在正态分布的假设下,均值也是数学指望,用μ表示,它位于倒钟的中心位置:3d

  均值并不老是能反应数据的信息,有时很还会给人误导。下表是某个企业的月薪状况:code

  该企业的月薪均值是:blog

  看起来是个待遇不错的公司,但实际状况是工程师和项目经理们每天要求加薪,缘由是两位高管的月薪远远超过了其余人,他们是数据中的“异常值”。下面的代码绘制了月薪表的直方图:排序

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3
 4 salary = np.array([4, 4, 4, 5, 5, 6, 6, 7, 7, 7, 6, 6, 25, 35])
 5 miu = np.mean(salary) # 均值
 6 print('μ =', miu)
 7
 8 plt.hist(salary, bins=40)
 9 plt.xlabel('月薪(千元)')
10 plt.ylabel('频度')
11 plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
12 plt.show()

  两位高管被孤立了,他们的月薪将影响计算结果的准确性,此时咱们说数据是偏斜的,确切地说,因为异常值在右侧,均值向右偏斜,造成了右偏态分布。get

  这种扭曲的倒钟曲线成为偏态分布,根据尾巴的位置,分为左偏态(负偏态)和右偏态(正偏态):数学

  

  左偏态将把均值拉向左侧,此时均值小于大部分数值;右偏态把均值拉向右侧,此时均值大于大部分数值。工资表的数据是右偏态。pandas

  异常值能够经过一些异常检测算法来剔除,好比基于正态分布的异常检测和使用局部异常因子的无监督学习算法。

中位数

  当异常数据对均值产生误导时,不妨试试中位数,这是另外一种平均数。

  正如它的名字同样,中位数永远在数据的中间位置。先把数据按大小排序,若是是奇数个,那么中位数正好是中间那个;若是是偶数个,那么中位数是中间两个数据的平均值。

  按照中位数的算法把工资表展开:

  共有14个数,位于中间的刚好都是6,所以中位数也是6。

1 salary = np.array([4, 4, 4, 5, 5, 6, 6, 7, 7, 7, 6, 6, 25, 35])
2 median = np.median(salary)
3 print('median =', median) # median = 6.0

  中位数也有抓瞎的时候。

  为了提高游乐园的竞争力,管理者决定根据游客的年龄来适当增长或减小一些项目。游乐园采起网上售票,全部游客在购票时都须要填写年龄。通过三个月的数据采集,计算出游客年龄的中位数是20,这但是个追求刺激的年龄,因而游乐园下架了旋转木马这类温柔的项目,添加了更大规模的过山车和大钟摆。在下一个周末:

  游客中的大多数是家长带着小朋友,一大加一小的模式,假设某个项目正好有14我的参加,他们的年龄以下:

  好了,如今中位数是20,结论是这个项目适合20岁的年轻人参加,因而:

1 ages = np.array([5, 5, 5, 6, 6, 7, 8, 32, 32, 32, 34, 35, 36, 36])
2 print('μ =', ages.mean()) # 均值,等同于np.mean(ages)
3 print('median =', np.median(ages)) # 中位数
4 plt.hist(ages, bins=40)
5 plt.xlabel('年龄')
6 plt.ylabel('频度')
7 plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
8 plt.show()

    μ = 19.928571428571427,median = 20.0,直方图以下:

  数据呈驼峰形,均值和中位数都在峰谷,其缘由是数据应该划分为两批,一批是孩子,另外一批是父母。这种状况下均值和中位数都不靠谱了,须要使用“众数”。

众数

  众数也是一种平均数,是一组数据中频数最大的数值。与前两种平均数不一样,一组数据的众数可能有多个。若是数据呈现出多种趋势,咱们能够为每种趋势给出一个众数。游乐场年龄数据能够分为两批,称这种数据是双峰数据。

  求得众数的方法不少,好比观察法,金氏插入法,皮尔逊经验法等。这里简单地介绍一下观察法。观察法大体分为2步:先将数据按照数值分组统计频数,再把频数最高的一个或几个挑选出来做为众数。可使用pandas求得众数:

1 import pandas as pd
2 df = pd.DataFrame(ages)
3 print(df.mode()) # 众数

  结果是5和32。

  众数是惟一自带分组属性的平均数,可是若是一组数据的众数太多,则只会混淆视听,此时的众数将没有任何用处。

  最后附上不一样分布下均值、中位数、众数的关系:


  做者:我是8位的

  出处:http://www.cnblogs.com/bigmonkey

  本文以学习、研究和分享为主,如需转载,请联系本人,标明做者和出处,非商业用途! 

  扫描二维码关注公做者众号“我是8位的”