¿Cómo encontrar la media, la mediana y la moda en Python?

La media, la mediana y la moda son temas fundamentales de la estadística. Puede calcularlos 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 “promedio” de un conjunto de datos. Si recién está comenzando con la ciencia de datos, este es el tutorial adecuado para usted.

Media, mediana, moda las tres medidas de tendencia central

Al final de este tutorial usted:

Comprender el concepto de media, mediana y moda Ser capaz de crear sus propias funciones de media, mediana y moda en Python Hacer uso de Python Estadísticas módulo para iniciar rápidamente el uso de estas medidas

Veamos 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.

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 integradas:

Listas, tuplas y conjuntos: una colección de objetos
Instrumentos de cuerda: una colección de personajes
Diccionario: una colección de pares clave-valor

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 siguiente cálculo:

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

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

Creación de una función de media personalizada

Comencemos por calcular la edad promedio (media) de los jugadores en un equipo de baloncesto. El nombre del equipo será “Pythonic Machines”.

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:

El “pythonic_machine_ages” es una lista con las edades de los jugadores de baloncesto Definimos un significar() función que devuelve la suma del conjunto de datos dado dividida por su longitud. suma() La función devuelve la suma total (irónicamente) de los valores de un iterable, en este caso, una lista. Intente pasar el conjunto de datos como argumento, volverá 211
los largo() la función devuelve la longitud de un iterable, si le pasa el conjunto de datos obtendrá 8

Pasamos las edades del equipo de baloncesto al significar() función e imprimir el resultado.

Si comprueba la salida, obtendrá:

26.375
# Because 211 / 8 = 26.375

Esta salida representa la edad promedio 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 de estadísticas de Python

Calcular medidas de tendencia central es una operación común para la mayoría de los desarrolladores. Eso es porque el módulo de estadísticas de Python proporciona diversas funciones para calcularlas, junto con otros temas básicos de estadísticas.

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

Así es como se usa 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, solo necesita importar el significar() función de la Estadísticas módulo 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 tienes muy claro el concepto de significar sigamos con el mediana medición.

Encontrar la mediana en Python

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

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, primero, necesitamos ordenar el conjunto de datos. Podríamos hacer esto con algoritmos de clasificación o usando la función incorporada ordenado (). El segundo paso es determinar si la longitud del conjunto de datos es par o impar. Dependiendo de esto algunos de los siguientes procesos:

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

Continuando con nuestro conjunto de datos del equipo de baloncesto, calculemos la altura media de los jugadores en centímetros:

[181, 187, 196, 196, 198,  203, 207, 211, 215]
# Since the dataset is odd, we select the middle value
median = 198

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

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

[181, 187, 196, 198, 203, 207, 211, 215] 
# We select the two middle values, and divide them by 2
median = (198 + 203) / 2
median = 200.5

Creación de una función mediana personalizada

Implementemos el concepto anterior en una función de Python.

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

Ordenar el conjunto de datos: Podemos hacer esto con el ordenado () función
Determina si es par o impar: Podemos hacer esto obteniendo la longitud del conjunto de datos y usando el operador de módulo (%) Devuelve la mediana según cada caso:

Impar: Devolver el valor medio
Incluso: Devuelve el promedio de los dos valores medios.

Eso daría como resultado la siguiente función:

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

def median(dataset):
    data = sorted(dataset)
    index = len(data) // 2
    
    # If the dataset is odd  
    if len(dataset) % 2 != 0:
        return data[index]
    
    # If the dataset is even
    return (data[index - 1] + data[index]) / 2

Imprimiendo el resultado de nuestros conjuntos de datos:

print(median(pythonic_machines_heights))
print(median(after_retirement))

Producción:

198
200.5

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

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

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

>>> pythonic_machine_heights[4]
# 198

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

Usando mediana () del módulo de estadísticas de Python

De esta manera es mucho más simple porque estamos usando una función ya existente del módulo de estadísticas.

Personalmente, si hay algo ya definido para mí, lo usaría debido al principio SECO —No te repitas— (en este caso, no repitas el código de otros).

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

from statistics import median

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

print(median(pythonic_machines_heights))
print(median(after_retirement))

Producción:

198
200.5

Cálculo de la moda en Python

La moda es el valor más frecuente en el 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 moda podría ser las ventas diarias de una tienda de tecnología. La moda de ese conjunto de datos sería el producto más vendido de un día específico.

['laptop', 'desktop', 'smartphone', 'laptop', 'laptop', 'headphones']

Como puede apreciar, la moda del conjunto de datos anterior es “laptop” porque fue el valor más frecuente en la lista.

Analicemos las ventas de otro día:

['mouse', 'camera', 'headphones', 'usb', 'headphones', 'mouse']

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

¿Qué sucede si no podemos encontrar la moda en un conjunto de datos, como el que se muestra a continuación?

['usb', 'camera', 'smartphone', 'laptop', 'TV']

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

Ahora que tiene una comprensión rápida del concepto de modo, calculémoslo en Python.

Creación de una función de modo personalizado

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

Recapitulando la analogía del baloncesto, podemos usar dos conjuntos de datos para trabajar: los puntos por partido y el patrocinio de zapatillas de algunos jugadores.

Para encontrar la moda primero necesitamos crear un diccionario de frecuencia 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

Comprobando el resultado pasando las dos listas como argumentos:

print(mode(points_per_game))
print(mode(sponsorship))

Producción:

[10]
['nike', 'adidas', 'jordan']

Como puede ver, la primera declaración de impresión nos dio un solo modo, mientras que la segunda devolvió múltiples modos.

Explicando más profundamente el código anterior:

declaramos un frecuencia diccionario 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, agrega uno al valor. Si no se encuentra, creamos un valor clave. par con un valor de uno El más frecuente La variable almacena, irónicamente, el valor más grande (no clave) del diccionario de frecuencia. Devolvemos el modos variable que consta de todas las claves en el frecuencia diccionario con mayor frecuencia.

Tenga en cuenta lo importante que es la nomenclatura de variables para escribir código legible.

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

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

Podemos usar 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: El modo() función devuelve el primer modo que encuentra, mientras que multimodo() devuelve una lista con los valores más frecuentes en el conjunto de datos.

En consecuencia, podemos decir que la función personalizada que definimos es en realidad una multimodo() función.

print(mode(points_per_game))
print(mode(sponsorship))

Producción:

10
nike

Utilizando el multimodo() función:

print(multimode(points_per_game))
print(multimode(sponsorship))

Producción:

[10]
['nike', 'adidas', 'jordan']

Para resumir

Felicidades! Si seguiste hasta ahora, aprendiste a calcular la media, la mediana y la moda, las principales medidas de tendencia central.

Aunque puede definir sus funciones personalizadas para encontrar la media, la mediana y la moda, se recomienda usar el módulo de estadísticas, ya que es parte de la biblioteca estándar y no necesita instalar nada para comenzar a usarlo.

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

Publicaciones relacionadas

Botón volver arriba