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