Как вычислить значение распределения 90% из набора чисел в командной строке Java или Linux? - PullRequest
2 голосов
/ 17 февраля 2012

Я запустил свой интеграционный тест и получил список времени выполнения.Мне нужно найти значение распределения 90% из этого набора результатов, а не среднее значение.Потому что он представляет то, с чем пользователь столкнется в 90% случаев.Есть ли в командной строке Linux, которая делает это?Если нет, то есть ли библиотека Java, которая делает это?

Спасибо,

Шон

Ответы [ 3 ]

2 голосов
/ 17 февраля 2012

Предполагая, что у вас есть файл с каждым измерением в отдельной строке, с фактическим измерением в первом столбце, посчитайте строки, позвоните по этому номеру L;переверните сортировку, выведите первое поле из L / 10-й строки.Как вы округляете нецелое число L / 10, зависит от вас;Вы также можете интерполировать значение между n (floor (L / 10)) и n (ceil (L / 10)).

#!/bin/sh
L=$(wc -l <data.txt)
sort -r -n data.txt |
awk "NR >= $L/10"'{print $1; exit}'

Это предполагает, что поля разделены пробелами.

1 голос
/ 17 февраля 2012

Если вы храните ваши времена в Списке или массиве, вы можете сделать это.

Если нет, то есть ли библиотека Java, которая делает это?

Это простопара строк кода Java.Я бы просто добавил его в вашу Java-программу, чтобы у вас было меньше выходных данных для обработки.

List<Long> times = new ArrayList<>();
// add times
Collections.sort(times);
System.out.printf("The typical, 90%% and 99%%tile times were %,d / %,d / %,d %n",
   times.get(times.size()/2), times.get(times.size()*9/10), times.get(times.size()*99/100));

или

long[] times = new long[SAMPLES];
// add times and
Arrays.sort(times);
System.out.printf("The typical, 90%% and 99%%tile times were %,d / %,d / %,d %n",
   times[SAMPLES/2], times[SAMPLES*9/10], times[SAMPLES*99/100]);

Поскольку он представляет то, с чем пользователь столкнется на 90%времени.

На самом деле 90-й процентиль - это время, когда оно будет меньше 90% времени.Пользователь будет испытывать эту задержку (или более) только в 10% случаев.

1 голос
/ 17 февраля 2012

Вы ищете 90-й процентиль . Просто отсортируйте время выполнения от кратчайшего до самого длинного и выберите 10% от конца. Цитируемая статья объясняет другие методы.

Вы можете легко реализовать это, используя команды Java или Unix: sort, wc, head и tail или sed.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...