S3.Blog

23 Января 2017
A A A   RSS-лента
"Я знаю, что ничего не знаю, но многие не знают и этого". Сократ [?].

Расчет медианы

Дата последнего изменения: 2 Июня 2011
Метки статьи: Готовые решения, JavaScript, PHP
Медиана – это полусумма срединных значений ранжированного ряда.
 

К примеру, возьмем ряд (например, это также может быть выборка из БД):

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: Медиана (статистика)
Контрольная работа: Мода. Медиана. Способы их расчета




Похожие материалы:




olga (гость) • ответить
А количество серединных значений, которые берутся для расчета медианы зависит от количесвта значений в ранжируемом ряду?
Александрответить
грубо говоря, при нечетном количестве значений, берется одно центральное среднее, при четном - два
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];
}

 
 
  Имя *:   Решите пример *: =
 
Полужирный Курсив Подчеркнутый Перечеркнутый
 
Вставить изображение Сделать цитатой Вставить ссылку Вставить код

Вставить смайл
 
 

 



© S3.Blog: Если критикуешь, не предлагая решения проблемы, то ты становишься частью этой проблемы.