Интерпретация значений процентиля для двумерного массива - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть данные, собранные в 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 - разница во времени между двумя соседними наблюдениями.

Результат 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 голосов
/ 26 сентября 2018

Вы не указали axis параметр np.percentile.В этом случае он вычисляет процентили уплощенного массива , то есть оба столбца, взятые вместе.Это, конечно, не имеет большого смысла, так как числа в «newCol» имеют другое значение.Поскольку все числа «newCol» меньше, чем числа «selectedTime», вот что происходит:

  • 25-й процентиль - это медиана значения «newCol».Это сильно варьируется между наборами данных.
  • 50-й процентиль находится посередине между самой большой записью "newCol" и самой маленькой записью "receiveTime".Поскольку «newCol» является крошечным по сравнению с «ReceiveTime», это, по сути, 1/2 от наименьшего «ReceiveTime».
  • 75-й процентиль является медианой значения «receiveTime», и все «receiveTime» примерно одинаковы.

Практический вывод: либо извлеките столбец, процентили которого вы хотите:

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

или укажите axis=0, чтобы получить процентили в каждом столбце.

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