functools:计算四分位数间距
functools: computing inter quartile range
我使用 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),
functools.partial(<function percentile at 0x7f91fe1e9730>, q=95))
这样我的代码中的任何地方都可以像这样计算百分位数:
stat_functions = percentiles
然后我想将四分位数添加到我的百分位数函数中,但是添加 [75-25] 计算平均值。
percentiles = tuple(functools.partial(np.percentile, q=q) for q in (75, 85, 95, 75-25))
percentiles
(functools.partial(<function percentile at 0x7f91fe1e9730>, q=75),
functools.partial(<function percentile at 0x7f91fe1e9730>, q=85),
functools.partial(<function percentile at 0x7f91fe1e9730>, q=95),
functools.partial(<function percentile at 0x7f91fe1e9730>, 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))
当 q
是一个元组时,您可以修改您的理解来构造一个包含在 np.diff
中的函数:
percentiles = tuple(lambda x: np.diff(np.percentile(x, q=q)) if isinstance(q, tuple) else functools.partial(np.percentile, q=q) for q in (75, 85, 95, (25, 75)))
我使用 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),
functools.partial(<function percentile at 0x7f91fe1e9730>, q=95))
这样我的代码中的任何地方都可以像这样计算百分位数:
stat_functions = percentiles
然后我想将四分位数添加到我的百分位数函数中,但是添加 [75-25] 计算平均值。
percentiles = tuple(functools.partial(np.percentile, q=q) for q in (75, 85, 95, 75-25))
percentiles
(functools.partial(<function percentile at 0x7f91fe1e9730>, q=75),
functools.partial(<function percentile at 0x7f91fe1e9730>, q=85),
functools.partial(<function percentile at 0x7f91fe1e9730>, q=95),
functools.partial(<function percentile at 0x7f91fe1e9730>, 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))
当 q
是一个元组时,您可以修改您的理解来构造一个包含在 np.diff
中的函数:
percentiles = tuple(lambda x: np.diff(np.percentile(x, q=q)) if isinstance(q, tuple) else functools.partial(np.percentile, q=q) for q in (75, 85, 95, (25, 75)))