python中的第N个百分位数与Dynatrace结果不同

问题描述

我正在尝试根据从 Dynatrace 中提取的数据创建报告。

我每天都在为事件提取数据,在我的 Python Django 报告中,我需要显示第 N 个百分位数据(例如 30th 个百分位,60第 1 个百分位、75个百分位、90个百分位)。

当我尝试从 Dynatrace 中提取数据时,结果如下: [1563,2731,3586,3966,4174,4971,6055,9175,15667]

对于这个列表,当我使用 numpy.percentile 或 df.quantile 时,我得到一个类似于我在 Excel 中使用的公式的百分比值的值 然而,Dynatrace percentile 函数显示的是不同的值

例如,从 excel 和 Python 中,我得到第 75 个百分位数为 - 6055 我从 Dynatrace 得到 - 6835

我尝试使用一些在线工具来计算百分位数,但似乎都给出了 6055。 如果有人能解释一下 DynaTrace 是如何计算这个公式的,那将是一个很大的帮助

提前致谢

解决方法

这种差异通常是由 interpolation method 引起的,当样本非常小时非常明显。

但是,6055 正好是您样本中的第 75 个百分位数:

1563   2731   3586   3966   4174   4971   6055   9175  15667
 0/8    1/8    2/8    3/8    4/8    5/8    6/8    7/8    8/8
   0  0.125   0.25  0.375    0.5  0.625   0.75  0.875      1

相应地,Numpy 使用其任何 interpolation methods(线性、较低、较高、最近、中点)产生相同的结果。

Dynatrace 可能使用更复杂的插值方法,如 this one。其中一位作者隶属于 Dynatrace。