Cálculo de la media, la mediana y la moda en Python

En este tutorial, aprenderemos a calcular la media, la mediana y la moda en Python desde cero y con el módulo de estadísticas de Python.

Introducción

Cuando intentamos describir y resumir una muestra de datos, probablemente empecemos por encontrar el significativo (o promedio), la [mediana](https ://en.wikipedia.org/wiki/Median), y el modo. Estas son medidas de tendencia central y, a menudo, son nuestro primer vistazo a un conjunto de datos.

En este tutorial, aprenderemos cómo encontrar o calcular la media, la mediana y la moda en Python. Primero codificaremos una función de Python para cada medida y luego usaremos el módulo Estadísticas de Python para lograr lo mismo. tarea.

Con este conocimiento, podremos echar un vistazo rápido a nuestros conjuntos de datos y tener una idea de la tendencia general de los datos.

Cálculo de la media de una muestra {#cálculo de la media de una muestra}

Si tenemos una muestra de valores numéricos, entonces su media o el promedio es la suma total de los valores (u observaciones) dividida por el número de valores.

Digamos que tenemos la muestra [4, 8, 6, 5, 3, 2, 8, 9, 2, 5]. Podemos calcular su media realizando la operación:

(4 + 8 + 6 + 5 + 3 + 2 + 8 + 9 + 2 + 5) / 10 = 5,2

La media (media aritmética) es una descripción general de nuestros datos. Suponga que compra 10 libras de tomates. Cuando cuentas los tomates en casa, obtienes 25 tomates. En este caso, puedes decir que el peso promedio de un tomate es de 0.4 libras. Esa sería una buena descripción de sus tomates.

La media también puede ser una mala descripción de una muestra de datos. Digamos que estás analizando un grupo de perros. Si toma el peso acumulado de todos los perros y lo divide por la cantidad de perros, probablemente sería una descripción deficiente del peso de un perro individual, ya que las diferentes razas de perros pueden tener tamaños y pesos muy diferentes.

Qué tan buena o mala describe la media una muestra depende de qué tan dispersos estén los datos. En el caso de los tomates, tienen casi el mismo peso cada uno y la media es una buena descripción de ellos. En el caso de los perros, no existe tópico canino. Pueden variar desde un chihuahua diminuto hasta un mastín alemán gigante. Entonces, la media por sí sola no es una buena descripción en este caso.

Ahora es el momento de entrar en acción y aprender cómo podemos calcular la media usando Python.

Cálculo de la media con Python

Para calcular la media de una muestra de datos numéricos, usaremos dos de las funciones integradas de Python. Uno para calcular la suma total de los valores y otro para calcular la longitud de la muestra.

La primera función es suma(). Esta función incorporada toma una iteración de valores numéricos y devuelve su suma total.

La segunda función es largo(). Esta función integrada devuelve la longitud de un objeto. len() puede tomar secuencias (cadena, bytes, tupla, lista o rango) o colecciones (diccionario, conjunto o conjunto congelado) como argumento.

Así es como podemos calcular la media:

1
2
3
4
5
6
>>> def my_mean(sample):
...     return sum(sample) / len(sample)
...

>>> my_mean([4, 8, 6, 5, 3, 2, 8, 9, 2, 5])
5.2

Primero sumamos los valores en sample usando sum(). Luego, dividimos esa suma por la longitud de sample, que es el valor resultante de len(sample).

Usando Python's mean()

Dado que calcular la media es una operación común, Python incluye esta funcionalidad en el módulo estadísticas. Proporciona algunas funciones para calcular estadísticas básicas sobre conjuntos de datos. La función estadísticas.media() toma una muestra de datos numéricos (cualquier iterable) y devuelve su media.

Así es como funciona mean() de Python:

1
2
3
4
>>> import statistics

>>> statistics.mean([4, 8, 6, 5, 3, 2, 8, 9, 2, 5])
5.2

Solo necesitamos importar el módulo statistics y luego llamar a mean() con nuestra muestra como argumento. Eso devolverá la media de la muestra. Esta es una forma rápida de encontrar la media usando Python.

Hallar la mediana de una muestra

La mediana de una muestra de datos numéricos es el valor que se encuentra en el medio cuando ordenamos los datos. Los datos pueden ordenarse en orden ascendente o descendente, la mediana permanece igual.

Para encontrar la mediana, necesitamos:

  1. Clasificar the sample
  2. Localice el valor en el medio de la muestra ordenada

A la hora de ubicar el número en medio de una muestra ordenada, podemos enfrentarnos a dos tipos de situaciones:

  1. Si la muestra tiene un número impar de observaciones, entonces el valor medio en la muestra ordenada es la mediana
  2. Si la muestra tiene un número par de observaciones, entonces necesitaremos calcular la media de los dos valores medios en la muestra ordenada

Si tenemos la muestra [3, 5, 1, 4, 2] y queremos encontrar su mediana, primero ordenamos la muestra a [1, 2, 3, 4, 5]. La mediana sería 3 ya que ese es el valor en el medio.

En cambio, si tenemos la muestra [1, 2, 3, 4, 5, 6], entonces su mediana será (3 + 4) / 2 = 3,5.

Echemos un vistazo a cómo podemos usar Python para calcular la mediana.

Encontrar la mediana con Python {#encontrar la mediana con Python}

Para encontrar la mediana, primero necesitamos ordenar los valores en nuestra muestra. Podemos lograrlo usando la función integrada ordenado (). sorted() toma un iterable y devuelve una lista ordenada que contiene los mismos valores del iterable original.

El segundo paso es ubicar el valor que se encuentra en el medio de la muestra ordenada. Para ubicar ese valor en una muestra con un número impar de observaciones, podemos dividir el número de observaciones por 2. El resultado será el índice del valor en el medio de la muestra ordenada.

Dado que un operador de división (/) devuelve un número flotante, necesitaremos usar un [operador de división de piso, (//)](https://docs.python.org/3/reference/expressions .html#binary-arithmetic-operations) para obtener un número entero. Entonces, podemos usarlo como índice en una operación de indexación ([]).

Si la muestra tiene un número par de observaciones, entonces necesitamos ubicar los dos valores medios. Digamos que tenemos la muestra [1, 2, 3, 4, 5, 6]. Si dividimos su longitud (6) por 2 usando una división de piso, entonces obtenemos 3. Ese es el índice de nuestro valor medio superior (4). Para encontrar el índice de nuestro valor medio inferior (3), podemos disminuir el índice del valor medio superior en 1.

Pongamos todos estos juntos en una función que calcula la mediana de una muestra. Aquí hay una posible implementación:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
>>> def my_median(sample):
...     n = len(sample)
...     index = n // 2
...     # Sample with an odd number of observations
...     if n % 2:
...         return sorted(sample)[index]
...     # Sample with an even number of observations
...     return sum(sorted(sample)[index - 1:index + 1]) / 2
...

>>> my_median([3, 5, 1, 4, 2])
3

>>> my_median([3, 5, 1, 4, 2, 6])
3.5

Esta función toma una muestra de valores numéricos y devuelve su mediana. Primero encontramos la longitud de la muestra, n. Luego, calculamos el índice del valor medio (o valor medio superior) dividiendo n por 2.

La sentencia if comprueba si la muestra en cuestión tiene un número impar de observaciones. Si es así, entonces la mediana es el valor en index.

El ‘retorno’ final se ejecuta si la muestra tiene un número par de observaciones. En ese caso, encontramos la mediana calculando la media de los dos valores medios.

Tenga en cuenta que la operación de corte [index - 1:index + 1] obtiene dos valores. El valor en index - 1 y el valor en index porque las operaciones de división excluyen el valor en el índice final (index + 1).

Uso de median() {#usingpythonsmedian} de Python

statistics.median() de Python toma una muestra de datos y devuelve su mediana. Así es como funciona el método:

1
2
3
4
5
6
7
>>> import statistics

>>> statistics.median([3, 5, 1, 4, 2])
3

>>> statistics.median([3, 5, 1, 4, 2, 6])
3.5

Tenga en cuenta que median() maneja automáticamente el cálculo de la mediana para muestras con un número par o impar de observaciones.

Encontrar la moda de una muestra {#encontrar la moda de una muestra}

La moda es la observación (u observaciones) más frecuente en una muestra. Si tenemos la muestra [4, 1, 2, 2, 3, 5], entonces su modo es 2 porque 2 aparece dos veces en la muestra mientras que los otros elementos solo aparecen una vez.

El modo no tiene que ser único. Algunas muestras tienen más de un modo. Digamos que tenemos la muestra [4, 1, 2, 2, 3, 5, 4]. Esta muestra tiene dos modos: 2 y 4 porque son los valores que aparecen con más frecuencia y ambos aparecen la misma cantidad de veces.

La moda se usa comúnmente para datos categóricos. Los tipos de datos categóricos comunes son:

  • booleano - Puede tomar solo dos valores como verdadero o falso, masculino o femenino
  • nominal - Puede tomar más de dos valores como en Americano - Europeo - Asiático - Africano
  • ordinal - Puede tomar más de dos valores pero los valores tienen un orden lógico como en pocos - algunos - muchos

Cuando estamos analizando un conjunto de datos categóricos, podemos usar el modo para saber qué categoría es la más común en nuestros datos.

Podemos encontrar muestras que no tienen un modo. Si todas las observaciones son únicas (no hay observaciones repetidas), entonces su muestra no tendrá moda.

Ahora que conocemos los conceptos básicos sobre el modo, echemos un vistazo a cómo podemos encontrarlo usando Python.

Encontrar el modo con Python {#encontrar el modo con Python}

Para encontrar la moda con Python, comenzaremos contando el número de ocurrencias de cada valor en la muestra en cuestión. Luego, obtendremos los valores con un mayor número de ocurrencias.

Dado que contar objetos es una operación común, Python proporciona la clase colecciones.Contador. Esta clase está especialmente diseñada para contar objetos.

La clase Contador proporciona un método definido como .most_common([n]). Este método devuelve una ’lista’ de tuplas de dos elementos con los ’n’ elementos más comunes y sus respectivos recuentos. Si se omite n o Ninguno, entonces .most_common() devuelve todos los elementos.

Usemos Counter y .most_common() para codificar una función que toma una muestra de datos y devuelve su modo.

Aquí hay una posible implementación:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
>>> from collections import Counter

>>> def my_mode(sample):
...     c = Counter(sample)
...     return [k for k, v in c.items() if v == c.most_common(1)[0][1]]
...

>>> my_mode(["male", "male", "female", "male"])
['male']

>>> my_mode(["few", "few", "many", "some", "many"])
['few', 'many']

>>> my_mode([4, 1, 2, 2, 3, 5])
[2]

>>> my_mode([4, 1, 2, 2, 3, 5, 4])
[4, 2]

Primero contamos las observaciones en la muestra usando un objeto Contador (c). Luego, usamos una lista de comprensión para crear una lista que contiene las observaciones que aparecen el mismo número de veces en la muestra.

Dado que .most_common(1) devuelve una lista con una tupla de la forma (observación, conteo), necesitamos obtener la observación en el índice 0 en la lista y luego el elemento en índice 1 en la tupla anidada. Esto se puede hacer con la expresión c.most_common(1)[0][1]. Ese valor es la primera moda de nuestra muestra.

Tenga en cuenta que la condición de comprensión compara el recuento de cada observación (v) con el recuento de la observación más común (c.most_common(1)[0][1]). Esto nos permitirá obtener múltiples observaciones (k) con el mismo recuento en el caso de una muestra multimodo.

Usando el modo() de Python

El statistics.mode() de Python toma algunos datos y devuelve su (primer) modo. Veamos cómo podemos usarlo:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
>>> import statistics

>>> statistics.mode([4, 1, 2, 2, 3, 5])
2

>>> statistics.mode([4, 1, 2, 2, 3, 5, 4])
4

>>> st.mode(["few", "few", "many", "some", "many"])
'few'

Con una muestra de modo único, mode() de Python devuelve el valor más común, 2. Sin embargo, en los dos ejemplos anteriores, devolvió 4 y pocos. Estas muestras tenían otros elementos que aparecían la misma cantidad de veces, pero no estaban incluidos.

Desde python 3.8 también podemos usar statistics.multimode() que acepta un iterable y devuelve una lista de modos.

Aquí hay un ejemplo de cómo usar multimode():

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
>>> import statistics

>>> statistics.multimode([4, 1, 2, 2, 3, 5, 4])
[4, 2]

>>> statistics.multimode(["few", "few", "many", "some", "many"])
['few', 'many']

>>> st.multimode([4, 1, 2, 2, 3, 5])
[2]

Nota: La función siempre devuelve una lista, incluso si pasa una muestra monomodo.

Conclusión

La media (o promedio), la mediana y la moda son comúnmente lo primero que vemos en una muestra de datos cuando intentamos comprender la tendencia central de los datos.

En este tutorial, hemos aprendido cómo encontrar o calcular la media, la mediana y la moda usando Python. Primero cubrimos, paso a paso, cómo crear nuestras propias funciones para calcularlas, y luego cómo usar el módulo estadísticas de Python como una forma rápida de encontrar estas medidas. s.