python 計算衆數、中位數、分位數、偏度、峯度

1. 衆數、中位數、分位數

使用 numpy 的 median 函數可以得到其中位數,quantile 函數可以得到其分位數,但 numpy 包目前還沒有計算衆數的函數。例如:

>>> a = [8, 19, 34, 9, 18]
>>> np.median(a) # 得到數組 a 的中位數
18.0

>>> np.quantile(a, 0.25) # 得到數組 a 的上四分位數
9.0

>>> np.quantile(a, 0.5) # 得到數組 a 的中位數
18.0

>>> np.quantile(a, 0.75) # 得到數組 a 的下四分位數
19.0

pandas 可以使用 median,quantile,mode 函數分別計算中位數,分位數與衆數。例如:

>>> df = pd.DataFrame(np.array([[85, 68, 90], [82, 63, 88], [84, 90, 88]]), columns=['統計學', '高數', '英語'], index=['張三', '李四', '王五'])
>>> df

    統計學  高數  英語
張三   85  68  90
李四   82  63  88
王五   84  90  88

>>> df.median() # 得到每一列的中位數
統計學    84.0
高數     68.0
英語     88.0
dtype: float64

>>> df.iloc[0, :].median() # 得到第一行的中位數
85.0

>>> df.quantile(0.25, axis = 1) # 得到所有行的上四分位數
張三    76.5
李四    72.5
王五    86.0
Name: 0.25, dtype: float64

>>> df.iloc[2, :].quantile(0.75) # 得到第三行的下四分位數
89.0

>>> df.mode()  # 得到所有列的衆數
   統計學  高數    英語
0   82  63  88.0
1   84  68   NaN
2   85  90   NaN

2. 偏度、峯度

在計算一個樣本的偏度或峯度時,對於一般的數組類型,要用到統計分析工具包 scipy,對於 pandas 中的數據類型,可以調用 pandas 自帶的計算偏度或峯度的函數。

>>> import scipy.stats as st
>>> a = [89, 23, 45, 18]

>>> st.skew(a) # 計算偏度
0.7565543738808015

>>> st.kurtosis(a) # 計算峯度
-1.0489580648783101

需要注意的是,pandas 計算峯度時需要至少 4 個數據。

>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame(np.array([[85, 68, 90], [82, 63, 88], [84, 90, 78]]), columns=['統計學', '高數', '英語'], index=['張三', '李四', '王五'])
>>> df
    統計學  高數  英語
張三   85  68  90
李四   82  63  88
王五   84  90  78

>>> df.iloc[1, :].skew() # 計算第二行的偏度
-1.3294040702410526

>>> df.skew(axis = 0) # 計算所有列的偏度
統計學   -0.935220
高數     1.498959
英語    -1.545393
dtype: float64

>>> df.skew(axis = 1) # 計算所有行的偏度
張三   -1.373033
李四   -1.329404
王五    0.000000
dtype: float64

>>> df1 = pd.DataFrame(np.array([[85, 68, 90, 65], [82, 63, 88, 83], [84, 90, 78, 90], [72, 68, 91, 84]]), columns=['統計學', '高數', '英語', '計算機'], index=['張三', '李四', '王五', '馬六'])
>>> df1
    統計學  高數  英語  計算機
張三   85  68  90   65
李四   82  63  88   83
王五   84  90  78   90
馬六   72  68  91   84

>>> df1.kurt(axis = 0) # 計算 df1 所有列的偏度
統計學    3.090874
高數     3.365664
英語     3.090874
計算機    2.769386
dtype: float64

>>> df1.iloc[:, 2].kurt() #計算 df1 第 3 列的偏度
3.090874188966101
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章