Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Desarrollo Última actualización: 25 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

La media, la mediana y la moda son temas fundamentales de la estadística. Puede calcularlas fácilmente en Python, con y sin el uso de bibliotecas externas

Estas tres son las principales medidas de tendencia central. La tendencia central nos permite conocer los valores “normales” o “medios” de un conjunto de datos. Si está empezando con la ciencia de datos, este es el tutorial adecuado para usted

Mean, median, mode the three measurements of central tendency

Al final de este tutorial usted

  • Comprenderá el concepto de media, mediana y moda
  • Podrá crear sus propias funciones de media, mediana y moda en Python
  • Hará uso del módulo de estadística de Python para iniciar rápidamente el uso de estas medidas

Si desea una versión descargable de los siguientes ejercicios, no dude en consultar el repositorio de GitHub

Adentrémonos en las diferentes formas de calcular la media, la mediana y la moda

Cálculo de la media en Python

La media o promedio aritmético es la medida de tendencia central más utilizada

Recuerde que la tendencia central es un valor típico de un conjunto de datos

Un conjunto de datos es una colección de datos, por lo tanto un conjunto de datos en Python puede ser cualquiera de las siguientes estructuras de datos incorporadas

  • Listas, tuplas y conjuntos: una colección de objetos
  • Cadenas: una colección de caracteres
  • Diccionario: una colección de pares clave-valor

Nota: Aunque existen otras estructuras de datos en Python como

las

colas o las pilas, sólo utilizaremos las incorporadas

Podemos calcular la media sumando todos los valores de un conjunto de datos y dividiendo el resultado por el número de valores. Por ejemplo, si tenemos la siguiente lista de números

[1, 2, 3, 4, 5, 6]

La media o promedio sería 3 ,5 porque la suma de la lista es 21 y su longitud es 6. Veintiuno dividido por seis es 3,5. Puede realizar este cálculo con el cálculo siguiente

(1 2 3 4 5 6) / 6 = 21

En este tutorial, utilizaremos los jugadores de un equipo de baloncesto como datos de muestra

Creación de una función media personalizada

Empecemos calculando la edad media (promedio) de los jugadores de un equipo de baloncesto. El nombre del equipo será “Máquinas Pitónicas”

pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24]

def mean(dataset):
 return sum(dataset) / len(dataset)

print(mean(pythonic_machine_ages))

Desglosando este código

  • Las “pythonic_machine_ages” es una lista con las edades de los jugadores de baloncesto
  • Definimos una función mean () que devuelve la suma del conjunto de datos dado dividido por su longitud
    • La función sum () devuelve la suma total (irónicamente) de los valores de un iterable, en este caso, una lista. Si intenta pasar el conjunto de datos como argumento, devolverá 211
    • La función len () devuelve la longitud de un iterable, si le pasa el conjunto de datos obtendrá 8
  • Pasamos las edades de los equipos de baloncesto a la función mean () e imprimimos el resultado.

Si comprueba la salida, obtendrá
26.

375

#

Porque 211 / 8 = 26,375

Esta salida representa la edad media de los jugadores del equipo de baloncesto. Observe cómo el número no aparece en el conjunto de datos pero describe con precisión la edad de la mayoría de los jugadores

Uso de mean() del módulo estadístico de Python

Calcular medidas de tendencia central es una operación habitual para la mayoría de los desarrolladores. Esto se debe a que el módulo de estadística de Python proporciona diversas funciones para calcularlas, junto con otros temas básicos de estadística

Dado que forma parte de la biblioteca estándar de Python, no necesitará instalar ningún paquete externo con PIP

A continuación le explicamos cómo utilizar este módulo

from statistics import mean

pythonic_machine_ages = [19, 22, 34, 26, 32, 30, 24, 24]

print(mean(pythonic_machine_ages))

En el código anterior, sólo tiene que importar la función mean() del módulo de estadística y pasarle el conjunto de datos como argumento. Esto devolverá el mismo resultado que la función personalizada que definimos en la sección anterior
26.

375

Ahora que ya tiene claro el concepto de media continuemos con la medición de la medi ana

Encontrar la mediana en Python

La mediana es el valor medio de un conjunto de datos ordenados. Se utiliza -de nuevo- para proporcionar un valor “típico” de una población determinada

En programación, podemos definir la mediana como el valor que separa una secuencia en dos partes – La mitad inferior y la mitad superior –

Para calcular la mediana, en primer lugar, necesitamos ordenar el conjunto de datos. Podemos hacerlo con algoritmos de ordenación o utilizando la función incorporada sorted(). El segundo paso consiste en determinar si la longitud del conjunto de datos es par o impar. En función de esto se realiza alguno de los siguientes procesos

  • Impar: La mediana es el valor medio del conjunto de datos
  • Par: La mediana es la suma de los dos valores medios dividida por dos

Siguiendo con nuestro conjunto de datos de equipos de baloncesto, calculemos la mediana de la altura de los jugadores en centímetros

[181, 187, 196, 196, 198, 203, 207, 211, 215]

# Como

 el conjunto de datos es impar, seleccionamos el valor medio
mediana = 198

Como puede ver, como la longitud del conjunto de datos es impar, podemos tomar el valor medio como mediana. Sin embargo, ¿qué ocurriría si un jugador acaba de ser retirado?

Tendríamos que calcular la mediana tomando los dos valores medios del conjunto de datos

[181, 187, 196, 198, 203, 207, 211, 215]
# Seleccionamos los dos valores medios y los dividimos por 2
mediana = (198 203) / 2
mediana = 200,5

Creación de una función mediana personalizada

Implementemos el concepto anterior en una función Python

Recuerde los tres pasos que debemos seguir para obtener la mediana de un conjunto de datos

  • Ordenar el conjunto de datos: Podemos hacerlo con la función sorted()
  • Determinar si es par o impar: Podemos hacerlo obteniendo la longitud del conjunto de datos y utilizando el operador de módulo (%)
  • Devolver la mediana en función de cada caso
    • Impar Devuelve el valor medio
    • Par: Devuelve la media de los dos valores medios

El resultado sería la siguiente función

¡
after_retirement = [181, 187, 196, 198, 203, 207, 211, 215]

def mediana(conjunto_datos):
 datos = sorted(conjunto_datos)
 índice = len(datos) // 2
    
 # Si el conjunto de datos es impar
 if len(conjunto_datos) % 2 != 0:
 return

datos

<x><x>[índice]</x></x>
    
 # Si el conjunto de datos es par
 return (datos[índice - 1] datos<x><x>[índice]</x></x>) / 2

Imprimir el resultado de nuestros conjuntos de datos

print(mediana(alturas_máquinas_pitónicas))
print(mediana(tras_jubilación))

Resultado

198
200,5

Observe cómo creamos una variable de datos que apunta a la base de datos ordenada al inicio de la función. Aunque las listas anteriores están ordenadas, queremos crear una función reutilizable, por lo que ordenaremos el conjunto de datos cada vez que se invoque la función

El índice almacena el valor medio -o el valor medio-superior- del conjunto de datos, utilizando el operador de división de enteros. Por ejemplo, si pasáramos la lista “pythonic_machine_heights” tendría el valor 4

Recuerde que en Python los índices de secuencia empiezan en cero, eso es porque podemos devolver el índice medio de una lista, con una división entera

A continuación comprobamos si la longitud del conjunto de datos es impar comparando el resultado de la operación módulo con cualquier valor que no sea cero. Si la condición es verdadera, devolvemos el elemento del medio, por ejemplo, con la lista “pythonic_machine_heights”

>>> py

thonic_machine_heights

[4]

#

 198

Por otro lado, si el conjunto de datos es par devolvemos la suma de los valores medios dividida por dos. Observe que data [index -1] nos da el punto medio inferior del conjunto de datos, mientras que data[index] nos proporciona el punto medio superior

Uso de median() del módulo estadístico de Python

Esta forma es mucho más sencilla porque estamos utilizando una función ya existente del módulo de estadística

Personalmente, si hay algo ya definido para mí, lo utilizaría por el principio DRY -Don’t repeat yourself- (en este caso, no repetir el código de otros)

Puede calcular la mediana de los conjuntos de datos anteriores con el siguiente código

from statistics import mediana

pythonic_machines_heights = [181, 187, 196, 196, 198, 203, 207, 211, 215]
after_retirement = [181, 187, 196, 198, 203, 207, 211, 215]

print(mediana(pythonic_machines_heights))
print(mediana(after_retirement))

Salida

198
200.5

Cálculo de la moda en Python

La moda es el valor más frecuente del conjunto de datos. Podemos pensar en él como el grupo “popular” de una escuela, que puede representar un estándar para todos los estudiantes

Un ejemplo de modo podrían ser las ventas diarias de una tienda de tecnología. El modo de ese conjunto de datos sería el producto más vendido de un día concreto

['ordenador portátil', 'ordenador de sobremesa', 'smartphone', 'ordenador portátil', 'ordenador portátil', 'auriculares']

Como puede apreciar, el modo del conjunto de datos anterior es “portátil” porque era el valor más frecuente de la lista

Lo bueno del modo es que el conjunto de datos no debe ser numérico. Por ejemplo, podemos trabajar con cadenas

Analicemos las ventas de otro día

['ratón', 'cámara', 'auriculares', 'usb', 'auriculares', 'ratón']

El conjunto de datos anterior tiene dos modalidades: “ratón” y “auriculares” porque ambos tienen una frecuencia de dos. Esto significa que es un conjunto de datos multimodal

¿Qué ocurre si no podemos encontrar el modo en un conjunto de datos, como el siguiente?

['usb', 'cámara', 'smartphone', 'portátil', 'televisor']

Esto se denomina distribución uniforme, básicamente, significa que no hay moda en el conjunto de datos

Ahora que ya conoce el concepto de modo, vamos a calcularlo en Python

Creación de una función de modo personalizada

Podemos pensar en la frecuencia de un valor como un par clave-valor, en otras palabras, un diccionario Python

Recapitulando la analogía del baloncesto, podemos utilizar dos conjuntos de datos con los que trabajar: Los puntos por partido, y el patrocinio de zapatillas de algunos jugadores

Para encontrar el modo primero tenemos que crear un diccionario de frecuencias con cada uno de los valores presentes en el conjunto de datos, luego obtener la frecuencia máxima, y devolver todos los elementos con esa frecuencia

Traduzcamos esto a código

points_per_game = [3, 15, 23, 42, 30, 10, 10, 12]
sponsorship = ['nike', 'adidas', 'nike', 'jordan',
 'jordan', 'rebook', 'under-armour', 'adidas']

def mode(dataset):
 frequency = {}

 for value in dataset:
 frequency[value] = frequency.get(value, 0) 1

 most_frequent = max(frequency.values())

 modes = [key for key, value in frequency.items()
 if value == most_frequent]

 return modes

Comprobación del resultado pasando las dos listas como argumentos

print(modo(puntos_por_partida))
print(modo(patrocinio))

Salida

<x>[10]</x>
['nike', 'adidas', 'jordan']

Como puede ver, la primera sentencia print nos dio un único modo, mientras que la segunda devolvió múltiples modos

Explicando más profundamente el código anterior

  • Declaramos un diccionario de frecuencias
  • Iteramos sobre el conjunto de datos para crear un histograma -el término estadístico para un conjunto de contadores (o frecuencias)-
    • Si la clave se encuentra en el diccionario entonces, añade uno al valor
    • Si no se encuentra creamos un par clave-valor con un valor de uno
  • La variable mas_frecuente almacena – irónicamente – el mayor valor (no la clave) del diccionario de frecuencias
  • Devolvemos la variable modos que consiste en todas las claves del diccionario de frecuencias con la mayor frecuencia.

Observe lo importante que es la nomenclatura de las variables para escribir código legible

Uso de mode() y multimode() del módulo estadístico de Python

Una vez más, el módulo estadístico nos proporciona una forma rápida de realizar operaciones estadísticas básicas

Podemos utilizar dos funciones: mode( ) y multimode( )

from statistics import mode, multimode

points_per_game = [3, 15, 23, 42, 30, 10, 10, 12]
sponsorship = ['nike', 'adidas', 'nike', 'jordan',
 'jordan', 'rebook', 'under-armour', 'adidas']

El código anterior importa ambas funciones y define los conjuntos de datos con los que hemos estado trabajando

Aquí viene la pequeña diferencia: La función mode( ) devuelve el primer modo que encuentra, mientras que multimode() devuelve una lista con los valores más frecuentes del conjunto de datos

En consecuencia, podemos decir que la función personalizada que hemos definido es en realidad una función multimodo( ).
print(modo(puntos_por_partido))
print(modo(patrocinio))

Salida

10
nike

Nota: En Python 3.8 o superior la función mode() devuelve el primer modo que encontró. Si tiene una versión anterior obtendrá un StatisticsError

Utilizando la función multimode( )

print(multimode(puntos_por_partido))
print(multimode(patrocinio))

Salida

<x>[10]</x>
['nike', 'adidas', 'jordan']

En resumen

¡Enhorabuena! Si ha seguido hasta aquí, ha aprendido a calcular la media, la mediana y la moda, las principales medidas de tendencia central

Aunque puede definir sus propias funciones para hallar la media, la mediana y la moda, se recomienda utilizar el módulo estadístico, ya que forma parte de la biblioteca estándar y no necesita instalar nada para empezar a utilizarlo

A continuación, lea una amigable introducción al análisis de datos en Python.

  • Daniel Díaz
    Autor
Gracias a nuestros patrocinadores
Más lecturas sobre desarrollo
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder