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