Foros del Web » Programando para Internet » PHP »

Moda y mediana en PHP

Estas en el tema de Moda y mediana en PHP en el foro de PHP en Foros del Web. hola: tengo este código para calcular la media de una serie de números: Código PHP: <?php $number_a =  rand ( 1 , 7 ); $number_b ...
  #1 (permalink)  
Antiguo 21/12/2013, 06:17
 
Fecha de Ingreso: abril-2008
Mensajes: 348
Antigüedad: 16 años, 8 meses
Puntos: 1
Moda y mediana en PHP

hola:

tengo este código para calcular la media de una serie de números:
Código PHP:
<?php
$number_a
rand(1,7);
$number_b=rand(1,7);
$number_c=rand(1,7);
$number_d=rand(1,7);
$number_e=rand(1,7);
$number_f=rand(1,7);
$number_g=rand(1,7);
$number_h=rand(1,7);
$number_i=rand(1,7);
$number_j=rand(1,7);

$division=array("$number_a""$number_b""$number_c""$number_d""$number_e""$number_f""$number_g""$number_h""$number_i""$number_j");

$elementnumber=count($division);

$resultado=($number_a+$number_b+$number_c+$number_d+$number_e+$number_f+$number_g+$number_h+$number_i+$number_j)/$elementnumber;

echo 
"La media es $resultado"
?>
¿habria alguna manera de calcular la moda y la mediana?
  #2 (permalink)  
Antiguo 21/12/2013, 06:48
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 9 meses
Puntos: 96
Respuesta: Moda y mediana en PHP

Una forma mas rapida se sacar la.media (puede que haya una mejir)

Código PHP:
Ver original
  1. for($i="a"; $i<"k"; $i++){
  2. $numarray[]=rand(1,7);
  3. }
  4. $suma=array_sum($numarray);
  5. $total=count($numarray);
  6. $media=$suma / $total;
  7. print_r($media);
La moda todavia la estoy "pensando"
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #3 (permalink)  
Antiguo 21/12/2013, 06:54
 
Fecha de Ingreso: abril-2008
Mensajes: 348
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Moda y mediana en PHP

genial¡¡¡

al menos hemos mejorado lo que tenia, a ver si tienes un día inspirado me me ayudas con la moda y mediana.
  #4 (permalink)  
Antiguo 21/12/2013, 08:58
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 14 años, 6 meses
Puntos: 95
Respuesta: Moda y mediana en PHP

para sacar la moda es bien sencillo:

Código PHP:
Ver original
  1. $cuenta = array_count_values($tuArray);
  2.     arsort($cuenta);
  3.     echo key($cuenta);
  #5 (permalink)  
Antiguo 21/12/2013, 10:44
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 9 meses
Puntos: 96
Respuesta: Moda y mediana en PHP

Y yo que me calente la cabeza para transcribir un.codigo java que encontre :P
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #6 (permalink)  
Antiguo 21/12/2013, 11:15
 
Fecha de Ingreso: abril-2008
Mensajes: 348
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Moda y mediana en PHP

Gracias a los dos por vuestro tiempo y conocimientos¡¡¡

Pero mis dudas crecen jajajaj:

- Como mostrar los diez valores que se escogen al azar en orden de menor a mayor?

- y luego calcular la mediana que quedaba pendiente.

Un saludo
  #7 (permalink)  
Antiguo 21/12/2013, 11:21
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 9 meses
Puntos: 96
Respuesta: Moda y mediana en PHP

Cita:
Iniciado por miriamgomez Ver Mensaje
Gracias a los dos por vuestro tiempo y conocimientos¡¡¡

Pero mis dudas crecen jajajaj:

- Como mostrar los diez valores que se escogen al azar en orden de menor a mayor?

- y luego calcular la mediana que quedaba pendiente.

Un saludo
Mediana == media
Para odenar el array usa la funcion sort()
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #8 (permalink)  
Antiguo 21/12/2013, 11:35
 
Fecha de Ingreso: abril-2008
Mensajes: 348
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Moda y mediana en PHP

Investigo lo de sort;

lo de la mediana no es exactamente igual que la media:

la mediana representa el valor de la variable de posición central en un conjunto de datos ordenados.
  #9 (permalink)  
Antiguo 21/12/2013, 11:47
 
Fecha de Ingreso: abril-2008
Mensajes: 348
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Moda y mediana en PHP

He mirado lo de sort:

Código PHP:
<?php
//Ordenar desde el menor al mayor 
$alumnos = array("1""2""5""6""3"); 
sort($alumnos); 
foreach (
$alumnos as $l){

    echo 
", " $l 
}
?>
pero tal y como esta expuesto, la coma sale al principio, ¿ como evitar esa coma primera?

Un saludo
  #10 (permalink)  
Antiguo 21/12/2013, 12:24
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Moda y mediana en PHP

Cita:
Iniciado por miriamgomez Ver Mensaje
He mirado lo de sort:

Código PHP:
<?php
//Ordenar desde el menor al mayor 
$alumnos = array("1""2""5""6""3"); 
sort($alumnos); 
foreach (
$alumnos as $l){

    echo 
", " $l 
}
?>
pero tal y como esta expuesto, la coma sale al principio, ¿ como evitar esa coma primera?
Sin utilizar ningún bucle:

Código PHP:
Ver original
  1. echo implode(", ", $alumnos);

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #11 (permalink)  
Antiguo 21/12/2013, 13:37
 
Fecha de Ingreso: abril-2008
Mensajes: 348
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Moda y mediana en PHP

Arreglado lo de la coma.

nos falta la dichosa moda¡¡¡
  #12 (permalink)  
Antiguo 21/12/2013, 14:00
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 9 meses
Puntos: 96
Respuesta: Moda y mediana en PHP

La.moda esta lista, falta la mediana, que en eso estoy xd
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #13 (permalink)  
Antiguo 21/12/2013, 14:03
 
Fecha de Ingreso: abril-2008
Mensajes: 348
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Moda y mediana en PHP

mil perdones, cierto, la moda
  #14 (permalink)  
Antiguo 21/12/2013, 14:18
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Moda y mediana en PHP

Utilizando la fórmula de la mediana para datos no agrupados (el cual es tu caso), la cual indica que la mediana se encuentra en la posición indicada por la suma de la cantidad de datos más uno, dividida entre dos, es decir (n + 1) / 2:

Código PHP:
Ver original
  1. $alumnos = array("1", "2", "5", "6", "3");  
  2. sort($alumnos);
  3. echo "Datos: " . implode(", ", $alumnos) . "<br />";
  4.  
  5. $cantidad = count($alumnos);
  6. $posMediana = ($cantidad + 1) / 2;
  7. echo "Mediana: " . $alumnos[$posMediana];

Ordenando el array, los datos quedan así: 1, 2, 3, 5, 6.
La cantidad de elementos del array es 5, más 1 es 6, dividido entre 2 es 3, por lo tanto, la mediana de tu array es el elemento que se encuentre en la posición número 3, recordando que las posiciones en el array empiezan desde el cero, la mediana es el elemento 5.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #15 (permalink)  
Antiguo 21/12/2013, 15:01
 
Fecha de Ingreso: abril-2008
Mensajes: 348
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Moda y mediana en PHP

Hola:

he intentado llevarlo a la practica de esta manera
Código PHP:
<?php
$number_a
rand(1,7); 
$number_b=rand(1,7); 
$number_c=rand(1,7); 
$number_d=rand(1,7); 
$number_e=rand(1,7); 
$number_f=rand(1,7); 
$number_g=rand(1,7); 
$number_h=rand(1,7); 
$number_i=rand(1,7); 
 
$serie=array("$number_a""$number_b""$number_c""$number_d""$number_e""$number_f""$number_g""$number_h""$number_i"); 
sort($serie);
echo 
"Datos: " implode(", "$serie) . "<br />";

$cantidad count($serie);
$posMediana = ($cantidad 1) / 2;
echo 
"Mediana: " $serie[$posMediana]. "<br />";
echo 
$posMediana;
?>
Atina con la posicion, pero no lee el valor correcto
  #16 (permalink)  
Antiguo 21/12/2013, 15:49
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Moda y mediana en PHP

Hice una pequeña corrección a mi algoritmo, ya que, como el array empieza desde la posición cero, si la mediana es el 2do, 3er. o 4to. elemento, sería contando desde el primero, por lo que al resultado de la posición de la mediana, habría que restarle uno.

Código PHP:
Ver original
  1. $alumnos = array();  
  2. for ($i = 0; $i < 9; $i++) $alumnos[] = mt_rand(1, 7);
  3. sort($alumnos);
  4. echo "Datos: " . implode(", ", $alumnos) . "\r\n";
  5.  
  6. $cantidad = count($alumnos);
  7. $posMediana = ($cantidad + 1) / 2;
  8. echo "Mediana: " . $alumnos[$posMediana - 1];

El código que va de la segunda a la tercera línea, hace exactamente lo mismo que haces en tus diez primeras líneas de código, luego, ordeno los datos, los imprimo, hallo la cantidad de elementos, la posición de la mediana e imprimo el dato respectivo, recordando que debemos restar 1 a dicha posición para que tome el dato correcto.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #17 (permalink)  
Antiguo 21/12/2013, 16:01
 
Fecha de Ingreso: abril-2008
Mensajes: 348
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Moda y mediana en PHP

funciona correctamente¡¡¡


genial
  #18 (permalink)  
Antiguo 21/12/2013, 16:10
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 9 meses
Puntos: 96
Respuesta: Moda y mediana en PHP

Prueba esto

Código PHP:
Ver original
  1. $j=rand(3,10);
  2. for($i=1; $i<=$j; $i++){
  3. $numarray[$i]=rand(1,7);
  4. }
  5. sort($numarray);
  6. array_unshift($numarray,0);
  7. unset($numarray[0]);
  8. echo implode(',',$numarray)."\n";
  9. $count=count($numarray);
  10. $par1= $count/2;
  11. $par2= ($count/2)+1;
  12. $impar= ($count+1)/2;
  13. if($count % 2 != 0){
  14. $m= $numarray[$impar];
  15. }else{
  16. $m= ($numarray[$par1]+$numarray[$par2])/2;
  17. }
  18. echo "la mediana es ".$m;
Me demore pero parece que funciona
PD: el codigo de alexis funciina cuando la cantidad de datis es imoar
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.

Última edición por xSkArx; 21/12/2013 a las 16:22
  #19 (permalink)  
Antiguo 21/12/2013, 16:36
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Moda y mediana en PHP

Solamente puse el caso para una lista impar porque era la que Miriam indicó, en el caso de listas pares, debes sumar los valores de los dos elementos centrales y luego divides dicho resultado entre dos. En el ejemplo, eso sería (($alumnos[$posMediana] + $alumnos[$posMediana - 1]) / 2) - 1. Como no hay posiciones en decimales, se toma el entero más cercano.

Dicho esto y actualizando el algoritmo, quedaría así:

Código PHP:
Ver original
  1. $alumnos = array();  
  2. for ($i = 0; $i < 9; $i++) $alumnos[] = mt_rand(1, 7);
  3. sort($alumnos);
  4. echo "Datos: " . implode(", ", $alumnos) . "\r\n";
  5.  
  6. $cantidad = count($alumnos);
  7. $posMediana = ($cantidad + 1) / 2;
  8. echo "Mediana: " . $cantidad % 2 != 0 ? $alumnos[$posMediana - 1] : (($alumnos[$posMediana - 1] + $alumnos[$posMediana]) / 2) - 1;

Como consejo, es mejor que, cuando trabajes con arrays, los hagas empezando desde la posición cero, como naturalmente es.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 21/12/2013 a las 16:42
  #20 (permalink)  
Antiguo 21/12/2013, 18:02
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 9 meses
Puntos: 96
Respuesta: Moda y mediana en PHP

segun wikipedia no necesariamente tiwne que ser entero la mediana, y si pruebo tu codigo al tener esto 1,2,5,6 devuelve 2 cuando deberia devolver 3.5
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #21 (permalink)  
Antiguo 21/12/2013, 19:21
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Moda y mediana en PHP

Me acabo de dar cuenta que cometo el error de restarle uno al resultado, cuando se lo había restado adentro. El algoritmo final es así:

Código PHP:
Ver original
  1. $alumnos = array();  
  2. for ($i = 0; $i < 9; $i++) $alumnos[] = mt_rand(1, 7);
  3. sort($alumnos);
  4. echo "Datos: " . implode(", ", $alumnos) . "<br />";
  5.  
  6. $cantidad = count($alumnos);
  7. $posMediana = ($cantidad + 1) / 2;
  8. $mediana = $cantidad % 2 != 0 ? $alumnos[$posMediana - 1] : ($alumnos[$posMediana - 1] + $alumnos[$posMediana]) / 2;
  9. echo "Mediana: " . $mediana;

Me refería a que la posición de la mediana es la que debe ser un entero, la mediana puede o no serlo.

Gracias por la observación, xSkArx.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 22/12/2013 a las 22:38
  #22 (permalink)  
Antiguo 20/01/2014, 14:02
 
Fecha de Ingreso: abril-2008
Mensajes: 348
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Moda y mediana en PHP

Hola:

Acabo de darme cuenta de un fallo:

He seguido este codigo:
Código PHP:
$datos mt_rand(37);
$alumnos = array();  
for (
$i 0$i $datos$i++) $alumnos[] = mt_rand(17);
sort($alumnos);
echo 
"Datos: " implode(", "$alumnos) . "<br />";
 
$cantidad count($alumnos);
$posMediana = ($cantidad 1) / 2;
$mediana $cantidad != $alumnos[$posMediana 1] : ($alumnos[$posMediana 1] + $alumnos[$posMediana]) / 2;
echo 
"Mediana: " $mediana
Parece que funciona, pero os pongo un ejemplo

1,2,6,7

y dice que la media es 4

No encuentro ni la explicacion ni el error....
  #23 (permalink)  
Antiguo 20/01/2014, 14:04
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 9 meses
Puntos: 96
Respuesta: Moda y mediana en PHP

La mediana en una cantidad par de datos es igual a la media de los valores centrales
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #24 (permalink)  
Antiguo 21/01/2014, 02:13
 
Fecha de Ingreso: abril-2008
Mensajes: 348
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Moda y mediana en PHP

Como comentaba, he retomado el tema

Y al mirarlo tranquilamente me han suguido algun problema, en este caso con la moda.

he seguido este codigo:

Código PHP:
<?php
$datos 
mt_rand(37);
$alumnos = array();
 
for (
$i 0$i $datos$i++) $alumnos[] = mt_rand(17);
$relacion implode(", "$alumnos);

$cuenta array_count_values($alumnos);
$relacion implode(", "$alumnos);
    
arsort($cuenta);
  
    
$resultado=key($cuenta);
    
    echo 
$relacion;

echo 
"<br>La moda es $resultado"
?>
Se pueden planterar dos problemas,

el primero seria que se plantee una serie del tipo: 1,2,3
y el otro seria :2,2,4,4

Mi pregunta es: "es posible condicionar para que la moda sea existente y unica"

Un saludo

Etiquetas: moda
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:14.