Медиана или среднее?..
На практике, особенно когда мы имеем дело с "хвостатыми" (сильно неравномерными) выборками достаточно большого объёма, медиана гораздо точней и устойчивей (робастней) простого арифметического среднего. Хрестоматийные примеры - "средняя температура по больнице" или отчёты российских органов власти о "средних зарплатах". Так, 10 голодранцев трудящихся с зарплатами по 10000 руб. и один "менеджер" с 200000 руб. дают среднюю зарплату более 27 тыс. Медиана же этой выборки так и равна 10000.
Ниже приводится код простейших функций для вычисления медианы и среднего на PHP, а также тест. "Правильность" данных, например, являются ли все индексы массива числовыми, не проверяется. Этого легко добиться, если преобразовать массив оператором вида $array=array_values($array);
<?php function median ($arr) { //Медиана от массива $arr sort ($arr); $count = count($arr); $middle = floor($count/2); if ($count%2) return $arr[$middle]; else return ($arr[$middle-1]+$arr[$middle])/2; } function average ($arr) { //Арифметическое среднее от массива $arr return array_sum($arr)/count($arr); } $a = array (4,2,3,1,5); print_r ($a); echo '<br>Среднее='.sprintf("%.2f",average($a)).', медиана='.sprintf("%.2f",median($a)).'<br>'; $a[5]=1e6; print_r ($a); echo '<br>Среднее='.sprintf("%.2f",average($a)).', медиана='.sprintf("%.2f",median($a)); ?>
Результат выполнения скрипта:
Array ( [0] => 4 [1] => 2 [2] => 3 [3] => 1 [4] => 5 ) Среднее=3.00, медиана=3.00 Array ( [0] => 4 [1] => 2 [2] => 3 [3] => 1 [4] => 5 [5] => 1000000 ) Среднее=166669.17, медиана=3.50
Памятка в тему: самый короткий код для суммирования всех элементов массива на PHP. Массив загружается из текстового файла с именем file.txt
, расположенного в текущей папке.
<?php @array_sum(file('file.txt', FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES)); ?>
15.05.2013, 17:57 [11938 просмотров]