问题描述
我使用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)))