functools:四分位间距计算

问题描述

我使用functools这样计算百分位数:

import functools
percentiles = tuple(functools.partial(np.percentile,q=q) for q in (75,85,95))

percentiles
(functools.partial(<function percentile at 0x7f91fe1e9730>,q=75),functools.partial(<function percentile at 0x7f91fe1e9730>,q=85),q=95))

这样我的代码中的任何地方都可以像这样计算百分位数:

stat_functions =  percentiles

然后我想将inter四分位数添加到我的百分位数函数中,但是要添加[75-25]来计算平均值。

percentiles = tuple(functools.partial(np.percentile,95,75-25))

percentiles
(functools.partial(<function percentile at 0x7f91fe1e9730>,q=95),q=50))

我的意图是获得四分位间距的值而不是平均值。我该如何解决

解决方法

我前段时间向scipy.stats添加了iqr函数。

您可以按如下方式修改理解:

percentiles = tuple(ss.iqr if q is None else functools.partial(np.percentile,q=q) for q in (75,85,95,None))
,

仅通过一次调用percentile就无法获得IQR:这是两个百分点之间的差。最接近的方法是一次调用即可计算出第25和第75个百分位数:

functools.partial(np.percentile,q=(25,75))

np.diff是一个元组时,您可以修改您的理解以构造封装在q中的函数:

percentiles = tuple(lambda x: np.diff(np.percentile(x,q=q)) if isinstance(q,tuple) else functools.partial(np.percentile,(25,75)))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...