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

转载于个人微信公众号:
Python 数据科学与数学建模

2020122211174610.png

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心态与习惯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值