Расчет медианы
Медиана – это полусумма срединных значений ранжированного ряда.
К примеру, возьмем ряд (например, это также может быть выборка из БД):
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];
}