手把手教你用Python求均值、中值和眾數(shù)
本文轉(zhuǎn)載自微信公眾號(hào)「大數(shù)據(jù)DT」,作者保羅·戴特爾 。轉(zhuǎn)載本文請(qǐng)聯(lián)系大數(shù)據(jù)DT公眾號(hào)。
本文我們將討論如何使用描述性統(tǒng)計(jì)數(shù)據(jù)進(jìn)行數(shù)據(jù)分析,包括:
- 均值——一組值的平均值;
- 中值——當(dāng)所有值按順序排列時(shí)的中間值;
- 眾數(shù)——最常出現(xiàn)的值。
以上這些都是集中趨勢(shì)度量,每種都會(huì)產(chǎn)生一個(gè)值來(lái)表示一組值中的“中心”值,或者說(shuō),在某種意義上是這組值中的典型值。
我們來(lái)計(jì)算一個(gè)整數(shù)列表的均值、中值和眾數(shù)。下面的代碼段創(chuàng)建一個(gè)名為grades的列表,然后使用內(nèi)置的sum和len函數(shù)來(lái)“手動(dòng)”計(jì)算平均值——sum計(jì)算grade的總和(397),len計(jì)算grade的個(gè)數(shù)(5):
- grades = [85, 93, 45, 89, 85]
- sum(grades) / len(grades)
與函數(shù)min和max(在《手把手教你用Python求最大值和最小值》一文中介紹)類似,sum和len都是函數(shù)式編程中約簡(jiǎn)的示例,它們會(huì)將值合集減少為單個(gè)值——值的總和與值的數(shù)量。
Python標(biāo)準(zhǔn)庫(kù)的statistics模塊提供了計(jì)算均值、中值和眾數(shù)的函數(shù),這些同樣也是約簡(jiǎn)。要使用這些功能,首先需要導(dǎo)入statistics模塊,如下:
- import statistics
然后,可以使用“statistics.”加上需要調(diào)用的函數(shù)名稱來(lái)訪問(wèn)模塊的功能。下面的代碼使用statistics模塊的mean、median和mode函數(shù)分別計(jì)算列表grades的均值(79.4)、中值(85)和眾數(shù)(85):
- statistics.mean(grades)
- statistics.median(grades)
- statistics.mode(grades)
其中,每個(gè)函數(shù)的參數(shù)都必須是可迭代的,在本例中為列表grades。要確認(rèn)中值和眾數(shù)是否正確,可以使用內(nèi)置的sorted函數(shù)來(lái)得到列表grades按值的遞增順序排列的副本:
- sorted(grades)
結(jié)果:
- [45, 85, 85, 89, 93]
列表grades具有奇數(shù)個(gè)值(5),因此median返回中間值(85)。如果列表包含偶數(shù)個(gè)值,則median會(huì)返回兩個(gè)中間值的平均值。從排好序的列表可以看到85是眾數(shù),因?yàn)樗霈F(xiàn)的次數(shù)最多(兩次)。類似于下面的列表會(huì)導(dǎo)致mode函數(shù)產(chǎn)生一個(gè)StatisticsError:
- [85, 93, 45, 89, 85, 93]
因?yàn)槠渲杏袃蓚€(gè)或更多個(gè)“出現(xiàn)最多”的值。這樣的一組值是雙峰的,85和93都出現(xiàn)了兩次。
關(guān)于作者:保羅·戴特爾,Deitel&Associates公司首席執(zhí)行官兼首席技術(shù)官,畢業(yè)于麻省理工學(xué)院,擁有38年的計(jì)算經(jīng)驗(yàn)。保羅是世界上最有經(jīng)驗(yàn)的編程語(yǔ)言培訓(xùn)師之一,自1992年以來(lái)一直針對(duì)軟件開發(fā)人員教授專業(yè)課程。他服務(wù)過(guò)的國(guó)際客戶包括思科、IBM、西門子、Oracle、戴爾、富達(dá)、美國(guó)國(guó)家航空航天局肯尼迪航天中心等。
本文摘編自《Python程序設(shè)計(jì):人工智能案例實(shí)踐》,經(jīng)出版方授權(quán)發(fā)布。