Расчет медианы
Медиана – это полусумма срединных значений ранжированного ряда.
К примеру, возьмем ряд (например, это также может быть выборка из БД):
23, 11, 21, 5, 17, 66, 34, 9
..и ранжируем (упорядочим) его:
5, 9, 11, 17, 21, 23, 34, 66
Срединными (лежащими в середине) значениями являются числа 17 и 21.
Их сумма: 17 + 21 = 38
Медиана данного ряда: 38 / 2 = 19
Вот и вся медиана.
Обычно данная величина нужна для расчета, например, среднего значения зарплаты по всей компании, среднего срока нахождения товаров на складе, среднего количества участников форумов, т.е. используется в разных масштабах и пределах.
В простом приближении, если в MySQL есть таблица ‘table’ вида:
то расчет медианы выглядит так:
а на JavaScript расчет медианы выглядит так:
Использованы статьи:
Расчет медианы в PHP+MySQL
Wiki: Медиана (статистика)
Контрольная работа: Мода. Медиана. Способы их расчета
К примеру, возьмем ряд (например, это также может быть выборка из БД):
23, 11, 21, 5, 17, 66, 34, 9
..и ранжируем (упорядочим) его:
5, 9, 11, 17, 21, 23, 34, 66
Срединными (лежащими в середине) значениями являются числа 17 и 21.
Их сумма: 17 + 21 = 38
Медиана данного ряда: 38 / 2 = 19
Вот и вся медиана.
Обычно данная величина нужна для расчета, например, среднего значения зарплаты по всей компании, среднего срока нахождения товаров на складе, среднего количества участников форумов, т.е. используется в разных масштабах и пределах.
В простом приближении, если в MySQL есть таблица ‘table’ вида:
id | value |
---|---|
1 | 13 |
2 | 444 |
3 | 0 |
4 | 67 |
5 | 54 |
6 | 21 |
7 | 49 |
8 | 72 |
то расчет медианы выглядит так:
<?php $mediana = 0; $i = 0; // счетчик количества элементов массива $mediana_data = array(); // массив для значений из БД $db = mysqli_connect('host','login','pass','dbname'); $query = 'SELECT value FROM table ORDER BY value ASC'; // упорядочим данные заранее $st = $db->query($query); while ($result = mysqli_fetch_assoc($st)) { $mediana_data[] = $result['value']; $i++; } // вычисляем медиану
// если количество элементов четное, то имеется два срединных значения,
// по которым вычисляется медиана if (is_int($i/2)) { $el = $i/2; $el2 = $el + 1; $mediana = ($mediana_data[$el] + $mediana_data[$el2]) / 2; } // если количество элементов нечетное, то медиана равна центральному элементу ряда else { $el = round($i/2); $mediana = $mediana_data[$el]; } ?>
а на JavaScript расчет медианы выглядит так:
<input type="text" id="data.1" value=""><br> <input type="text" id="data.2" value=""><br> <input type="text" id="data.3" value=""><br> <input type="text" id="data.4" value=""><br> <input type="text" id="data.5" value=""><br> <input type="text" id="data.6" value=""><br> <input type="button" value="Расчитать медиану" onclick="calculation_mediana()"><br> <input type="text" id="mediana" value=""><br> <script language="javascript"> function calculation_mediana() { var input_data = new Array(); var el_mediana = document.getElementById('mediana'); if (! el_mediana) { return; } for (var i=1; i<=6; i++) { var el = document.getElementById('data.' + i); if (el) { el.value = el.value.replace(/,/g, '.'); el.value = parseFloat(el.value) || 0; input_data[input_data.length] = el.value; } } if (input_data.length == 0) { el_mediana.value = 0; return; } input_data.sort(sort_number); var length_ary = input_data.length/2; if (length_ary == Math.ceil(input_data.length/2)) { el_mediana.value = (parseFloat(input_data[length_ary-1])+parseFloat(input_data[length_ary]))/2; } else { length_ary == Math.ceil(length_ary); el_mediana.value = input_data[length_ary-1]; } } function sort_number(a,b) { return a - b; } </script>
Использованы статьи:
Расчет медианы в PHP+MySQL
Wiki: Медиана (статистика)
Контрольная работа: Мода. Медиана. Способы их расчета
Похожие материалы:
Комментарии:
29 Июня 2011 (14:52:41)
olga
(гость)
• ответить
А количество серединных значений, которые берутся для расчета медианы зависит от количесвта значений в ранжируемом ряду?
23 Августа 2012 (12:48:06)
Serega
(гость)
• ответить
ошибка:
else {
length_ary == Math.ceil(length_ary);
el_mediana.value = input_data[length_ary-1];
}
заменить на
else {
length_ary = Math.ceil(length_ary);
el_mediana.value = input_data[length_ary-1];
}
else {
length_ary == Math.ceil(length_ary);
el_mediana.value = input_data[length_ary-1];
}
заменить на
else {
length_ary = Math.ceil(length_ary);
el_mediana.value = input_data[length_ary-1];
}