¿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ás empezando con Ciencia de los datos, este es el tutorial adecuado para ti.

Media, mediana, moda las tres medidas de tendencia central

Al final de este tutorial, podrás:

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

Veamos las diferentes formas de calcular la media, la mediana y la moda.

Calculating the  Mean in Python

El personalizado o media aritmética 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 integradas:

Nota: Aunque hay otras estructuras de datos en Python como colas or pilas, usaremos solo los integrados.

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, usaremos a los jugadores de un equipo de baloncesto como nuestros datos de muestra.

Creación de una función de media personalizada

Comencemos calculando la edad promedio (media) de los jugadores de 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:

Si verifica la salida, obtendrá:

26.375 # Because 211 / 8 = 26.375

Esta salida representa la edad promedio de los jugadores del equipo de baloncesto. Tenga en cuenta que el número no aparece en el conjunto de datos, pero describe con precisión la edad de la mayoría de los jugadores.

Usando 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 Estadísticas de Python El módulo proporciona diversas funciones para calcularlos, junto con otros temas básicos de estadística.

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

Así es como 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 media() funcionar desde el statistics 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 personalizado continuemos con el media medición.

Finding the Median in Python

El media es la valor medio de un conjunto de datos ordenados. Se utiliza, de nuevo, para proporcionar un valor "típico" de un determinado 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:

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 acabara de retirarse?

Necesitaríamos 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.

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

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

Imprimir el resultado de nuestros conjuntos de datos:

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

Salida:

198 200.5

Tenga en cuenta 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.

El índice almacena el valor medio, o el valor medio superior, del conjunto de datos, mediante el uso de División entera operador. Por ejemplo, si pasáramos la lista "pythonic_machine_heights", tendría el valor de 4.

Recuerde que en Python los índices de secuencia comienzan en cero, eso se debe a que podemos devolver el índice medio de una lista, con una división entera.

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 del medio, 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 divididos por dos. Tenga en cuenta que datos [índice -1] nos da el punto medio inferior del conjunto de datos, mientras que datos [índice] nos proporciona el punto medio superior.

Usando median () 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 ya hay algo definido para mí, lo usaría por el principio DRY —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))

Salida:

198 200.5

Computing the Mode in Python

El modo 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, el modo del conjunto de datos anterior es "computadora portátil" porque era el valor más frecuente en 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:

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

El conjunto de datos anterior tiene dos modos: "mouse" y "auriculares" porque ambos tienen una frecuencia de dos. Esto significa que es un multimodal conjunto de datos

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

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

Esto se llama un distribución uniforme, básicamente, significa que no hay modo 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 juego y el patrocinio de zapatillas de algunos jugadores.

Para encontrar el modo 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 en 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))

Salida:

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

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

Explicando más profundamente el código anterior:

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

Usando 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: modo() y multimodo ().

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: modo() La función devuelve el primer modo que encuentra, mientras que multimodo () devuelve una lista con los valores más frecuentes del 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)) 

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á una EstadísticasError.

Usando el patrón de velas del multimodo () función:

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

Salida:

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

Para resumir

Felicitaciones! Si siguió hasta ahora, aprendió 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 el modo, 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 amistosa a análisis de datos en Python.