使用 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
在计算一个样本的偏度或峰度时,对于一般的数组类型,要用到统计分析工具包 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