解释2D数组的百分位值

时间:2018-09-25 22:10:29

标签: numpy statistics percentile

我有3个不同时间收集的数据点-

最新收藏

    receivedtime    newCol
0   1.536596e+12    43.000000
1   1.536596e+12    100.000000
2   1.536596e+12    180.000000
3   1.536596e+12    50.000244
4   1.536596e+12    3792.999756
5   1.536596e+12    897.000000
6   1.536596e+12    11343.000000
7   1.536596e+12    374.000000
8   1.536596e+12    690.000000
9   1.536596e+12    1.000000

旧收藏

    receivedtime    newCol
0   1.536597e+12    1080.0
1   1.536597e+12    1.0

最旧的收藏集

    receivedtime    newCol
0   1.536596e+12    43.000000
1   1.536596e+12    100.000000
2   1.536596e+12    180.000000
3   1.536596e+12    50.000244
4   1.536596e+12    3792.999756
5   1.536596e+12    897.000000
6   1.536596e+12    11343.000000
7   1.536596e+12    374.000000
8   1.536596e+12    690.000000
9   1.536596e+12    492206.000000
10  1.536596e+12    420.000000
11  1.536596e+12    37.000244
12  1.536596e+12    509.999756
13  1.536596e+12    497.000000
14  1.536596e+12    436.000000
15  1.536596e+12    130.000000
16  1.536596e+12    1.000000

receivedTime列是timestamp,并且始终是唯一的。 newCol是2个相邻观测值之间的时间差。

在这些数据点上np.percentile的结果是-

最新收藏

np.percentile(latest, [25, 50, 75])
array([3.25500000e+02, 7.68298069e+11, 1.53659614e+12])

旧收藏

np.percentile(old, [25, 50, 75])
array([8.10250000e+02, 7.68298490e+11, 1.53659698e+12])

最旧的收藏集

np.percentile(oldest, [25, 50, 75])
array([4.24000000e+02, 7.68298062e+11, 1.53659613e+12])

为什么第一四分位数与第二和第三四分位数相比波动更大?第二个和第三个似乎接近相同的值,但第一个则不同。

1 个答案:

答案 0 :(得分:0)

您未指定np.percentileaxis参数。在这种情况下,它将计算 flattened 数组的百分位数,这意味着将两列合在一起。当然,这毫无意义,因为“ newCol”中的数字具有不同的含义。由于“ newCol”数字都小于“ receivedTime”数字,因此会发生以下情况:

    第25个百分位数是“ newCol”的中位数。数据集之间的差异很大。
  • 第50个百分位数介于最大的“ newCol”条目和最小的“ receivedTime”条目之间。由于“ newCol”与“ receivedTime”相比很小,因此它实质上是最小“ receivedTime”的1/2。
  • 第75个百分位数是“ receivedTime”的中位数,并且所有“ receivedTime”都大致相同。

实用结论:要么提取您想要百分位数的列:

np.percentile(old[:, 0], [25, 50, 75])

或指定axis=0以获取每一列的百分位数。

np.percentile(old, [25, 50, 75], axis=0)