解释二维数组的百分位值
Interpreting percentile values for a 2D array
我在 3 个不同的时间收集了数据点 -
最新collection
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
旧[=52=]
receivedtime newCol
0 1.536597e+12 1080.0
1 1.536597e+12 1.0
年龄最大的 collection
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
在这些数据点上的结果是 -
最新collection
np.percentile(latest, [25, 50, 75])
array([3.25500000e+02, 7.68298069e+11, 1.53659614e+12])
旧[=52=]
np.percentile(old, [25, 50, 75])
array([8.10250000e+02, 7.68298490e+11, 1.53659698e+12])
年龄最大的 collection
np.percentile(oldest, [25, 50, 75])
array([4.24000000e+02, 7.68298062e+11, 1.53659613e+12])
为什么第一个四分位数的波动比第二个和第三个四分位数大得多?第二个和第三个似乎接近相同的值,但第一个不是。
您没有指定 np.percentile
的 axis
参数。在本例中,它计算 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)
我在 3 个不同的时间收集了数据点 -
最新collection
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
旧[=52=]
receivedtime newCol
0 1.536597e+12 1080.0
1 1.536597e+12 1.0
年龄最大的 collection
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
在这些数据点上的结果是 -
最新collection
np.percentile(latest, [25, 50, 75])
array([3.25500000e+02, 7.68298069e+11, 1.53659614e+12])
旧[=52=]
np.percentile(old, [25, 50, 75])
array([8.10250000e+02, 7.68298490e+11, 1.53659698e+12])
年龄最大的 collection
np.percentile(oldest, [25, 50, 75])
array([4.24000000e+02, 7.68298062e+11, 1.53659613e+12])
为什么第一个四分位数的波动比第二个和第三个四分位数大得多?第二个和第三个似乎接近相同的值,但第一个不是。
您没有指定 np.percentile
的 axis
参数。在本例中,它计算 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)