() translation by (you can also view the original English article)
El análisis estadístico de los datos nos ayuda a dar sentido a la información en su conjunto. Esto tiene aplicaciones en muchos campos como bioestadística y análisis de negocios.
En lugar de pasar por puntos de datos individuales, sólo una mirada a su valor medio colectivo o varianza puede revelar tendencias y características que podríamos haber perdido observando todos los datos en formato "en bruto". También hace que la comparación entre dos grandes conjuntos de datos sea más fácil y más significativa.
Teniendo en cuenta estas necesidades, Python nos ha proporcionado el módulo estadísticas.
En este tutorial, aprenderá sobre diferentes maneras de calcular promedios y 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 fraction
como entrada.
Cálculo de media
Puede utilizar la función mean(datos)
para calcular la media de algunos datos dados. Se calcula dividiendo la suma de todos los puntos de datos por el número de puntos de datos. Si los datos están vacíos, se levantará un StatisticsError. Aquí están algunos ejemplos:
1 |
import statistics |
2 |
from fractions import Fraction as F |
3 |
from decimal import Decimal as D |
4 |
|
5 |
statistics.mean([11, 2, 13, 14, 44]) |
6 |
# returns 16.8
|
7 |
|
8 |
statistics.mean([F(8, 10), F(11, 20), F(2, 5), F(28, 5)]) |
9 |
# returns Fraction(147, 80)
|
10 |
|
11 |
statistics.mean([D("1.5"), D("5.75"), D("10.625"), D("2.375")]) |
12 |
# returns Decimal('5.0625')
|
Aprendiste muchas funciones para generar números aleatorios en nuestro último tutorial. Vamos a usarlos ahora para generar nuestros datos y ver si la media final es igual a lo que esperamos que sea.
1 |
import random |
2 |
import statistics |
3 |
|
4 |
data_points = [ random.randint(1, 100) for x in range(1,1001) ] |
5 |
statistics.mean(data_points) |
6 |
# returns 50.618
|
7 |
|
8 |
data_points = [ random.triangular(1, 100, 80) for x in range(1,1001) ] |
9 |
statistics.mean(data_points) |
10 |
# returns 59.93292281437689
|
Con
la función randint()
, se espera que la media esté cerca del punto
medio de ambos extremos, y con la distribución triangular, se supone que
está cerca de low + high + mode / 3
. Por lo tanto, la media en la Primero y segundo caso debe ser de 50 y 60,33 respectivamente, lo que está cerca de lo que realmente obtuvo.
Cálculo de la Moda
La
media es un buen indicador del promedio, pero algunos valores extremos
pueden resultar en un promedio que está lejos de la ubicación central
real. En algunos casos es más deseable determinar el punto de datos más frecuente en un conjunto de datos. La función mode()
devolverá el punto de datos 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.
1 |
import random |
2 |
import statistics |
3 |
|
4 |
data_points = [ random.randint(1, 100) for x in range(1,1001) ] |
5 |
statistics.mode(data_points) |
6 |
# returns 94
|
7 |
|
8 |
data_points = [ random.randint(1, 100) for x in range(1,1001) ] |
9 |
statistics.mode(data_points) |
10 |
# returns 49
|
11 |
|
12 |
data_points = [ random.randint(1, 100) for x in range(1,1001) ] |
13 |
statistics.mode(data_points) |
14 |
# returns 32
|
15 |
|
16 |
mode(["cat", "dog", "dog", "cat", "monkey", "monkey", "dog"]) |
17 |
# returns 'dog'
|
El modo de enteros aleatoriamente generados en un rango dado puede ser cualquiera de esos números, ya que la frecuencia de ocurrencia de cada número es impredecible. Los tres ejemplos en el fragmento de código anterior prueban ese punto. El último ejemplo nos muestra cómo podemos calcular el modo de datos no numéricos.
Cálculo de Mediana
Dependiendo de moda para calcular un valor central puede ser un poco engañoso. Como
acabamos de ver en la sección anterior, siempre será el punto de datos
más popular, independientemente de todos los demás valores del conjunto
de datos. Otra forma de determinar una ubicación central es utilizando la función median()
. Devolverá el valor mediano de los datos numéricos dados calculando la media de dos puntos medios si es necesario. Si el número de puntos de datos es impar, devuelve el punto medio. Si el número de puntos de datos 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 punto de datos real cuando el número de puntos de datos es par. En estos casos, puede utilizar median_low()
o median_high()
para calcular la mediana. Con
un número par de puntos de datos, estas funciones devolverán el valor
menor y mayor de los dos puntos medios respectivamente.
1 |
import random |
2 |
import statistics |
3 |
|
4 |
data_points = [ random.randint(1, 100) for x in range(1,50) ] |
5 |
statistics.median(data_points) |
6 |
# returns 53
|
7 |
|
8 |
data_points = [ random.randint(1, 100) for x in range(1,51) ] |
9 |
statistics.median(data_points) |
10 |
# returns 51.0
|
11 |
|
12 |
data_points = [ random.randint(1, 100) for x in range(1,51) ] |
13 |
statistics.median(data_points) |
14 |
# returns 49.0
|
15 |
|
16 |
data_points = [ random.randint(1, 100) for x in range(1,51) ] |
17 |
statistics.median_low(data_points) |
18 |
# returns 50
|
19 |
|
20 |
statistics.median_high(data_points) |
21 |
# returns 52
|
22 |
|
23 |
statistics.median(data_points) |
24 |
# returns 51.0
|
En
el último caso, la mediana baja y alta fueron 50 y 52. Esto significa
que no había ningún punto de datos con valor 51 en nuestro conjunto de
datos, pero la median()
calculaba todavía que la mediana era 51.0.
Medición de la difusión de datos
Determinar cuánto los puntos de datos se desvían del valor típico o medio del conjunto de datos es tan importante como calcular el valor central o medio en sí. El módulo de estadística tiene cuatro funciones diferentes para ayudarnos a calcular esta extensión de datos.
Puede
utilizar la función de pvariance(data, mu=None)
para calcular la
varianza de población de un conjunto de datos determinado.
El segundo argumento en este caso es opcional. El valor de mu, cuando se proporciona, debe ser igual a la media de los datos dados. La media se calcula automáticamente si falta el valor. Esta función es útil cuando se desea calcular la variacion de una población completa. Si
sus datos son sólo una muestra de la población, puede utilizar la
función de variance(data, xBar=None)
para calcular la varianza de
la muestra. Aquí, xBar es la media de la muestra dada y se calcula automáticamente si no se proporciona.
Para
calcular la definición estándar de población y la desviación estándar
de la muestra, puede utilizar las funciones pstdev(data, mu=None)
y stdev(data, xBar=None)
, respectivamente.
1 |
import statistics |
2 |
from fractions import Fraction as F |
3 |
|
4 |
data = [1, 2, 3, 4, 5, 6, 7, 8, 9] |
5 |
|
6 |
statistics.pvariance(data) # returns 6.666666666666667 |
7 |
statistics.pstdev(data) # returns 2.581988897471611 |
8 |
statistics.variance(data) # returns 7.5 |
9 |
statistics.stdev(data) # returns 2.7386127875258306 |
10 |
|
11 |
more_data = [3, 4, 5, 5, 5, 5, 5, 6, 6] |
12 |
|
13 |
statistics.pvariance(more_data) # returns 0.7654320987654322 |
14 |
statistics.pstdev(more_data) # returns 0.8748897637790901 |
15 |
|
16 |
some_fractions = [F(5, 6), F(2, 3), F(11, 12)] |
17 |
statistics.variance(some_fractions) |
18 |
# returns Fraction(7, 432)
|
19 |
Como se desprende del ejemplo anterior, una menor variacion implica que más puntos de datos están más próximos en valor a la media. También puede calcular la desviación estándar de decimales y fracciones.
Consideraciones finales
En este último tutorial de la serie, aprendimos sobre las diferentes funciones disponibles en el módulo de estadísticas. Pudo haber observado que los datos dados a las funciones fueron ordenados en la mayoría de los casos, pero no tienen que ser siempre asi. He utilizado listas ordernadas en este tutorial porque facilitan entender cómo el valor devuelto por diferentes funciones está relacionado con los datos de entrada.