我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

分位数并不是百分数,中位数并不是平均数。在相关的数据计算中,这些概念需要明确分辨。否则将无法理解很多内容,比如股票的K线图。本文将再次审视dataframe相关计算中的“分位数”的概念。从原理上再次解释这些分位数是怎么被计算出来的。

苏南大叔:python计算分位数,系列数据的分位数数学计算方法 - 分位数计算方法
python计算分位数,系列数据的分位数数学计算方法(图3-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验文章。本文测试环境:win10python@3.12.3。再次强调一点,分位数//中位数并不一定是真实存在的数,很有可能是个临时的插值。其强调的是位置,一切以位置为前提。

计算方法quantile

一组数据在大数据时代,会表现为一个DataFrame。本文也是从这个点引出后续的内容的。前置阅读的文章是:

最直观的感受,可以使用df.describe()来查看分位数。比如:

df.describe()

苏南大叔:python计算分位数,系列数据的分位数数学计算方法 - df
python计算分位数,系列数据的分位数数学计算方法(图3-2)

如果明确的求解分位数的话,可以使用quantile()函数:

df.quantile(q)
df["target"].quantile(q)

四分位数

最通常来说,就是求解四分位数。一般来说,排序是从小往大排列,也就是“下分位数”。

  • Q1/Q25,排序后25%位置的数,较小四分位数。
  • Q2/Q50/中位数,排序后50%位置的数,中位数。
  • Q3/Q75,排序后75%位置的数,较大四分位数。

数学计算方法

首先求解对应的分位数的位置。
1、求解数组的长度n。
2、求解对应位置,(n-1)*q。(q就是0.25/0.5/0.75等类似取值)
3、如果对应位置为整数,则返回该位置对应的数。【分位数真实存在】
4、如果对应位置不是整数,则以对应位置前一个位置n1为起点,后一个位置n2为终点。按比例计算对应插值。

举例

举例【长度小于4】的特例,分布不均匀。[2,5,10],长度为3。

  • 25%位置是(3-1)*0.25=0.5。索引位于(0,1)之间,数据位于(2,5)之间,值2+(5-2)*(0.5%1)=3.5
  • 50%位置是(3-1)*0.5=1。为整数索引值1,值为5(首个数索引值为0)。
  • 75%位置是(3-1)*0.75=1.5。索引位于(1,2)之间,数据位于(5,10)之间,值5+(10-5)*(1.5%1)=7.5

苏南大叔:python计算分位数,系列数据的分位数数学计算方法 - 计算方法验证
python计算分位数,系列数据的分位数数学计算方法(图3-3)

验证代码:

import pandas as pd
df = pd.DataFrame({"target": [2, 5, 10]})
print("q1", df["target"].quantile(0.25))
print("q1", df["target"].quantile(0.5))
print("q1", df["target"].quantile(0.75))

结语

分位数的算法,网上说的也是千奇百怪。感觉大部分都是在瞎说,包括百度的那个ai问答。本文苏南大叔的算法能和python的计算结果吻合,证明理解上是正确的。如有异议,欢迎留言。

更多python经验文章,请点击:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python