關於平均數

關於平均數

  根據國家統計局發佈的信息,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位的」

相關文章
相關標籤/搜索