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.
Al final de este tutorial, podrás:
- Comprender el concepto de media, mediana y moda.
- Ser capaz de crear sus propias funciones de media, mediana y modo en Python
- Hacer uso de Python statistics módulo 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.
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:
- Listas, tuplas y conjuntos: una colección de objetos
- Cuerdas: una colección de personajes
- Diccionario: una colección de pares clave-valor
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:
- "Pythonic_machine_ages" es una lista con las edades de los jugadores de baloncesto
- Definimos una media() función que devuelve la suma del conjunto de datos dado dividido por su longitud
- EL sum () 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, devolverá 211
- EL len () 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 media() función e imprimir el resultado.
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:
- 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 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:
- 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 en función de cada caso:
- Impar: Devuelve 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
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:
- Declaramos un frecuencia diccionario
- Repetimos 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 par clave-valor 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 los modos variable que consta de todas las claves en el frecuencia diccionario con la mayor frecuencia.
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.
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 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.