|
|
|
| Есть массив:
Array
(
[0] => 46
[1] => 16
[2] => 944
[3] => 26
[4] => 9
[5] => 618
[6] => 8
[7] => 9
[8] => 432
[9] => 15
[10] => 8
[11] => 398
[12] => 13
[13] => 5
[14] => 385
[15] => 8
[16] => 12
[17] => 545
[18] => 9
[19] => 23
[20] => 691
[21] => 17
[22] => 106
[23] => 2047
[24] => 75
[25] => 23
[26] => 571
[27] => 10
[28] => 15
[29] => 421
[30] => 13
[31] => 9
[32] => 313
[33] => 8
[34] => 11
[35] => 265
[36] => 13
[37] => 8
[38] => 184
[39] => 5
[40] => 3
[41] => 157
[42] => 6
[43] => 4
[44] => 172
[45] => 3
[46] => 17
[47] => 542
[48] => 23
[49] => 5
[50] => 105
[51] => 1
[52] => 4
[53] => 84
[54] => 2
[55] => 1
[56] => 57
[57] => 2
[58] => 73
[59] => 1
)
|
Ключи - это количество секунд, значения - сколько раз это количество встречается.
Надо: выбрать наиболее часто встречающееся количество секунд. Это - ключ максимального значения [23] => 2047, т.е. 23.
Вывожу
echo array_search(max($diafora_times),$diafora_times);
|
Потом требуют среднее время. Сложить все ключи и разделить на их количество?
Не смогла найти функцию подсчета суммы ключей. Делаю array_keys и сразу array_sum. Это оно?
print round(array_sum(array_keys($diafora_times))/sizeof($diafora_times),0)
|
Потом вывожу частоту вхождения интервалов в % от общего числа.
1"-10": 22.2%,
11"-20": 21.6%,
21"-30": 34.5%,
31"-40": 8.5%,
41"-50": 10.8%,
51"-60": 2.4%,
|
23 секунды входят в интервал с наибольшим процентом (21"-30": 34.5%,) - это значит, я правильно посчитала? | |
|
|
|
|
|
|
|
для: elenaki
(09.03.2016 в 15:38)
| | >echo array_search(max($diafora_times),$diafora_times);
Все верно
>print round(array_sum(array_keys($diafora_times))/sizeof($diafora_times),0)
Среднее время разве не по произведению секунд на количество раз нужно считать? Вроде как 23 секунды в 2047 раз чаще встречается, чем 59 секунд, это не нужно учесть?
<?php
// Копия массива $diafora_times
$arr = (new ArrayObject($diafora_times))->getArrayCopy();
// Сумма произведения секунд на количество раз
array_walk($arr, function(&$item, $key){ $item = $item * $key; });
// Среднее время секунд
echo round(array_sum($arr) / array_sum($diafora_times)); // 22
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(09.03.2016 в 19:37)
| | Это средневзвешенное получилось? Оно, конечно, точнее. Спасибо.
PS
А с другой стороны - 23 (секунды) тут не число. Т.е. это число, но оно только для обозначения интервала, можно было написать не 23, а "23 секунды" или "время простоя 23". Тогда как умножать? | |
|
|
|
|
|
|
|
для: elenaki
(10.03.2016 в 10:20)
| | Запуталась в массивах
Есть список меток времени с указанием кода агента. Там много еще чего есть, но меня интересует только время и код агента.
Из него делаю массив, где ключ - код агента, а значение - разница между соседними метками времени.
Потом из этого массива делаю ассоциативный массив со значениями в качестве ключей и их количествами в качестве значений.
Получаю - 1 секунда встречается 7 раз, 2 секунды встречаются 3 раза и т.д. - по каждому агенту.
Сортирую массив по возрастанию.
Беру только первые 60 значений, интервалы больше минуты меня не интересуют.
Потом эти массивы, где по 60 записей для каждого агента, разбиваю еще раз на 6 массивов по 10 записей, потому что мне надо выбрать среднее по 6 интервалам (1"-10", 11"-20" и т.д.).
Нахожу простое среднее по каждому массиву для каждого агента.
Складываю эти средние по всем агентам и получаю 200%, 398%... Что за фигня?
Или от меня опять требуют невозможного? Мне нужны средние значения интервалов простоя по всем агентам.
Частный случай - когда выбран агент - считается нормально. | |
|
|
|