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