Módulos matemáticos en Python: Estadísticas

El análisis estadístico de datos nos ayuda a dar sentido a la información en su conjunto. Esto cuenta con aplicaciones en muchos campos como la bioestadística o el análisis empresarial.

En lugar de repasar cada uno de los valores de forma individual, de un solo vistazo, el hecho de analizar la media colectiva o la moda puede revelar tendencias y características que podríamos haber ignorado observando todos los datos en formato raw. También hace que la comparación entre dos grandes conjuntos de datos sea más sencilla y más significativa.

Teniendo en cuenta estas necesidades, Python nos ha proporcionado el módulo statistics.

En este tutorial, veremos las diferentes maneras de calcular promedios y de medir la propagación de un conjunto dado de datos. A menos que se indique lo contrario, todas las funciones de este módulo admiten conjuntos de datos basados en int, float, decimal y fracciones como input.

Calculando la media

Puedes utilizar la función mean(data) para calcular la media de ciertos datos dados. Esto se calcula dividiendo la suma de todos los valores entre el número de valores. Si los datos están vacíos, el sistema arrojará un StatisticsError. Aquí tienes algunos ejemplos:

import statistics
from fractions import Fraction as F
from decimal import Decimal as D
 
statistics.mean([11, 2, 13, 14, 44])
# returns 16.8
 
statistics.mean([F(8, 10), F(11, 20), F(2, 5), F(28, 5)])
# returns Fraction(147, 80)
 
statistics.mean([D("1.5"), D("5.75"), D("10.625"), D("2.375")])
# returns Decimal('5.0625')

En anteriores artículos hemos visto funciones para generar números aleatorios. Vamos a utilizarlos ahora para generar nuestros datos y ver si la media final es igual a lo que esperamos que sea:

import random
import statistics
 
data_points = [ random.randint(1, 100) for x in range(1,1001) ]
statistics.mean(data_points)
# returns 50.618
 
data_points = [ random.triangular(1, 100, 80) for x in range(1,1001) ]
statistics.mean(data_points)
# returns 59.93292281437689

Con la función randint(), esperamos que la media esté cerca del punto medio de ambos extremos, y con la distribución triangular, se supone que está cerca de alto + bajo + moda / 3. Por lo tanto, la media en el primer y segundo caso debe ser de 50 y 60,33 respectivamente, lo que está cerca de lo que realmente hemos obtenido.

Calculando la moda

La media es un buen indicador del promedio, pero es posible que ciertos valores del conjunto estén alejados de lo que es la media real, y pueden ser muchos de dichos valores. La función mode() devolverá el valor más común a partir de datos numéricos discretos y no numéricos. Esta es la única función estadística que se puede utilizar con datos no numéricos.

import random
import statistics
 
data_points = [ random.randint(1, 100) for x in range(1,1001) ]
statistics.mode(data_points)
# returns 94
 
data_points = [ random.randint(1, 100) for x in range(1,1001) ]
statistics.mode(data_points)
# returns 49
 
data_points = [ random.randint(1, 100) for x in range(1,1001) ]
statistics.mode(data_points)
# returns 32
 
mode(["cat", "dog", "dog", "cat", "monkey", "monkey", "dog"])
# returns 'dog'

Como generamos aleatoriamente números en un rango dado puede ser que la moda sea cualquiera de esos números, ya que la frecuencia de ocurrencia de cada número es impredecible. Los tres ejemplos del código anterior prueban ese punto. El último ejemplo nos muestra cómo podemos calcular la moda en datos no numéricos.

Cálculo de mediana

Depender de la moda para calcular el valor central puede ser un poco engañoso. Como acabamos de ver en la sección anterior, siempre será el valor más popular, independientemente de todos los demás valores. Otra forma de determinar un valor central es utilizando la función median(). Esta función devolverá el valor mediano de los datos numéricos dados calculando la media de dos valores medios si es necesario. Si el número de valores es impar, devuelve el punto medio. Si el número de valores es par, devuelve el promedio de dos valores medianos.

El problema con la función median() es que el valor final puede no ser un valor real cuando el número de puntos de datos sea par. En estos casos, puedes utilizar median_low() o median_high() para calcular la mediana. Con un número par de valores, estas funciones devolverán el valor menor y mayor de dos puntos medios respectivamente.

import random
import statistics
 
data_points = [ random.randint(1, 100) for x in range(1,50) ]
statistics.median(data_points)
# returns 53
 
data_points = [ random.randint(1, 100) for x in range(1,51) ]
statistics.median(data_points)
# returns 51.0
 
data_points = [ random.randint(1, 100) for x in range(1,51) ]
statistics.median(data_points)
# returns 49.0
 
data_points = [ random.randint(1, 100) for x in range(1,51) ]
statistics.median_low(data_points)
# returns 50
 
statistics.median_high(data_points)
# returns 52
 
statistics.median(data_points)
# returns 51.0

En este último caso, la mediana baja y alta fueron 50 y 52. Esto significa que no hubo ningún valor con valor 51 en nuestro conjunto de datos, pero median() calculó que la mediana era 51.0.

Fuente: Monty Shokeen

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
SIGUIENTE ARTÍCULO