Python en Español

Tutorial de desviación estándar de Python

La desviación estándar permite medir la dispersión de los números en un conjunto de datos. Los valores grandes de las desviaciones estándar muestran que los elementos de un conjunto de datos están más dispersos que su valor medio. En este tutorial, calcularemos la desviación estándar usando Python

Las pequeñas desviaciones estándar muestran que los elementos no se desvían significativamente del valor medio de un conjunto de datos.

 

 

Terminología

Hay dos nociones de desviación estándar en las estadísticas.

Una es la desviación estándar de la población. Calcula la dispersión directamente a partir de todos los valores de una población. Se utiliza cuando los valores que tiene a mano representan la población entera.

Otra es la desviación estándar de muestreo. Intenta estimar la dispersión de la población utilizando sólo un subconjunto de valores de muestra. Se utiliza cuando los valores que tiene a mano representan sólo un subconjunto de la población entera.

La desviación estándar de la muestra es una medida aproximada. Es útil porque, con frecuencia, la población de datos es demasiado grande y sólo podemos medir directamente una muestra aleatoria de la misma.

Las desviaciones estándar de la población y de la muestra se calculan utilizando algoritmos ligeramente diferentes. Por lo tanto, cuando se programa, siempre se debe tener en cuenta cuál de ellos se quiere calcular y llamar a las APIs apropiadas.

Desviación Estándar en Python

Desde la versión 3.x Python incluye un módulo de estadística ligero en una distribución por defecto. Este módulo proporciona un montón de funciones útiles para los cálculos estadísticos.

También hay un paquete estadístico completo NumPy, que es especialmente popular entre los científicos de datos.

Este último tiene más características, pero también representa una dependencia más masiva en su código.

Calcular para una lista

El cálculo de la desviación estándar de la muestra en una lista de valores en Python se puede realizar con la función statistics.stdev().

lista stdev

import statistics

statistics.stdev([5.12, -34.11, 32.43, -1.3, 7.83, -0.32])

La desviación estándar de la población se calcula usando una función ligeramente diferente, statistics.pstdev().

lista de pstdev

import statistics

statistics.pstdev([5.12, -34.11, 32.43, -1.3, 7.83, -0.32])

En los ejemplos que siguen, mostraremos cómo aplicar la función statistics.stdev() a diferentes tipos de datos de Python. Si necesita calcular la desviación estándar de la población, use la función statistics.pstdev() en su lugar. El resto del código debe ser idéntico.

Otra opción para calcular la desviación estándar de una lista de valores en Python es usar un paquete científico NumPy.

No viene con Python por defecto, y necesitas instalarlo por separado. La forma habitual de instalar paquetes de terceros en Python es usar un Python package installer (pip).

pip numpy

pip3 install numpy

Después de instalar NumPy, calcular la desviación estándar es trivial. Tenga en cuenta que numpy.std calcula la desviación estándar de la población de forma predeterminada.

numpy std

import numpy

numpy.std([5.12, -34.11, 32.43, -1.3, 7.83, -0.32])

Si quieres calcular una desviación estándar de la muestra usando el paquete NumPy, tendrás que pasar un argumento adicional ddof con un valor de 1. ddof significa grados de libertad delta, que es una noción estadística usada en la estimación de estadísticas de poblaciones a partir de muestras de ellas.

numpy std ddof

import numpy

numpy.std([5.12, -34.11, 32.43, -1.3, 7.83, -0.32], ddof=1)

 

Calcular para un arreglo

Si trabaja con grandes conjuntos de datos, los arreglos de Python pueden ser más convenientes que sus listas más populares.

También puede realizar una operación aritmética sobre las variables de la matriz como si fueran valores singulares. En ese caso, se aplicará una operación aritmética a cada valor de una matriz de forma independiente.

En el ejemplo siguiente, también pasamos un argumento d a un constructor de matrices para indicar que nuestros valores son de tipo doble.

matriz stdev

import statistics

from array import array

statistics.pstdev(array('d', [5.12, -34.11, 32.43, -1.3, 7.83, -0.32]))

numpy.std también funciona con los valores de los arreglos.

matriz numpy stdev

import numpy

from array import array

numpy.std(array('d', [5.12, -34.11, 32.43, -1.3, 7.83, -0.32]), ddof=1)

 

Calcular para valores diccionarios

A veces sus datos se almacenan en una estructura de datos de valor clave como el dictado de Python, en lugar de una estructura de datos secuenciales como una lista.

Por ejemplo, puede tener una estructura de datos que relacione a los estudiantes con los resultados de sus exámenes, como en la imagen de abajo.

Si desea calcular una desviación estándar de los resultados de los exámenes de todos los estudiantes, puede hacerlo llamando a statistics.pstdev en los valores del diccionario, sin las claves. Para ello, llame a la función dict.values() incorporada en Python.

dict stdev

import statistics

scores = {'Kate': 73, 'Alex': 56, 'Cindy': 98}

statistics.pstdev(scores.values())

 

Calculate for a matrix

Para el tratamiento de las matrices, es mejor recurrir al paquete NumPy. NumPy proporciona un tipo de datos numpy.matrix específicamente diseñado para trabajar con matrices.

Generemos una matriz cuadrada de 4×4.

import numpy

m = numpy.matrix('4 7 2 6, 3 6 2 6, 0 0 1 3, 4 6 1 3')

Se pueden calcular las desviaciones estándar por columna (numpy.matrix.std(0)), por fila (numpy.matrix.std(1)) o para todos los elementos, como si la matriz fuera un vector (numpy.matrix.std()).

matriz estándar

import numpy

m = numpy.matrix('4 7 2 6; 3 6 2 6; 0 0 1 3; 4 6 1 3')

m.std(0) # by column

m.std(1) # by row

m.std()  # for all elements

 

Calcular para series pandas

pandas.series es un arreglo unidimensional con etiquetas de ejes. Se construye sobre el numpy.ndarray.

Una de sus aplicaciones es para trabajar con datos de series temporales.

El cálculo de la desviación estándar de la muestra de pandas.Series es fácil.

muestra de series de datos de pandas

import pandas

s = pandas.Series([12, 43, 12, 53])

s.std()

Si necesitas calcular la desviación estándar de la población, sólo tienes que pasar un argumento ddof adicional como el que se muestra a continuación.

población de series de datos de pandas

import pandas

s = pandas.Series([12, 43, 12, 53])

s.std(ddof=0)

 

Calcular para pandas dataframe

pandas.DataFrame es una estructura de datos tabulares bidimensionales, que permite realizar fácilmente operaciones aritméticas tanto en filas como en columnas.

Su analogía más cercana en Python puro es el tipo de datos dict.

Vamos a crear un objeto DataFrame que represente los resultados de los exámenes de los estudiantes, como hicimos en el ejemplo de dict anterior.

dataframe

import pandas

scores = {

  'Name': ['Kate', 'Alex', 'Cindy'],

  'Math Score': [73, 56, 98],

  'History Score': [84, 99, 95]}

df = pandas.DataFrame(scores)

Ahora podemos calcular las desviaciones estándar de la muestra para cada materia, a saber, Matemáticas e Historia. Note que serán cálculos por fila.

dataframe std by row

import pandas

scores = {

  'Name': ['Kate', 'Alex', 'Cindy'],

  'Math Score': [73, 56, 98],

  'History Score': [84, 99, 95]}

df = pandas.DataFrame(scores)

df.std()

Alternativamente, podemos calcular las desviaciones estándar de la muestra por persona. Para ello, pasaremos un argumento de eje adicional con un valor igual a 1. Nótese que, en este caso, serán cálculos por columna.

dataframe std by column

import pandas

scores = {

  'Name': ['Kate', 'Alex', 'Cindy'],

  'Math Score': [73, 56, 98],

  'History Score': [84, 99, 95]}

df = pandas.DataFrame(scores)

df.std(axis=1)

En la foto de arriba, se puede ver que Alex tiene la mayor desviación estándar de 30,4. Tiene sentido, porque la diferencia en sus puntuaciones es mucho mayor en comparación con Kate y Cindy.

Todo lo anterior fueron muestras de desviaciones estándar. Para calcular la desviación estándar de una población, pasa un argumento ddof adicional con un valor igual a 0 como es habitual.

dataframe std population

import pandas

scores = {

  'Name': ['Kate', 'Alex', 'Cindy'],

  'Math Score': [73, 56, 98],

  'History Score': [84, 99, 95]}

df = pandas.DataFrame(scores)

df.std(ddof=0)

En las tres secciones siguientes nos centraremos en explicar las diferencias entre la desviación estándar y otras medidas estadísticas agregadas como la media, la media y la mediana.

Desviación Estándar Vs. Media (Promedio)

Como se mencionó anteriormente, la desviación estándar es una medida de cuán dispersos están los números en un conjunto de datos. Otra interpretación de la desviación estándar es cuán lejos está cada elemento de un conjunto de datos del valor medio de este conjunto de datos.

¿Qué es la media? La media es sólo un concepto abstracto que intenta estimar un valor promedio en un conjunto de datos. Se obtiene sumando todos los números de un conjunto de datos y dividiendo el resultado por la cantidad de estos números (es decir, el tamaño del conjunto de datos).

A continuación, se muestra un ejemplo de cómo se obtendría un número medio para un conjunto de datos. También se puede ver que el valor de la desviación estándar para este conjunto de datos es bastante diferente de su valor medio.

número medio

dataset = [2, 4, 5, 1, 6]

mean = sum(dataset) / len(dataset)

print(mean)


import statistics

std_dev = statistics.stdev(dataset)

print(std_dev)

 

Standard deviation vs. median

La mediana es otra medida agregada en las estadísticas. Su objetivo es expresar la noción de un número promedio. Sin embargo, es diferente del número promedio.

Imagine que usted tiene un conjunto de datos, y que ordena todos los números de este conjunto de datos en un orden no decreciente. Por ejemplo [1, 2, 4, 5, 6].

Puedes ver que el 4 se encuentra justo en medio de este conjunto de datos ordenados. Este número, que se encuentra en el medio del conjunto de datos después de que lo hayamos ordenado en orden no decreciente, se llama el valor mediano de este conjunto de datos.

Si el tamaño del conjunto de datos es par, como en [1, 2, 4, 5, 6, 7], terminarás teniendo dos números en el medio, en este caso, 4 y 5. En tal caso, calcula el valor mediano como el valor medio de estos dos números, es decir, 4.5 en este ejemplo.

A continuación, se muestra un ejemplo del cálculo del valor mediano para un conjunto de datos. Ten en cuenta que, una vez más, es bastante diferente de la desviación estándar.

mediana

import statistics

odd_dataset = [2, 4, 5, 1, 6]

odd_median = statistics.median(odd_dataset)

print(odd_median)




even_dataset = [2, 4, 5, 1, 6, 7]

even_median = statistics.median(even_dataset)

print(even_median)




odd_std_dev = statistics.stdev(odd_dataset)

print(odd_std_dev)

even_std_dev = statistics.stdev(even_dataset)

print(even_std_dev)

 

Desviación estándar acumulada

A veces, cuando se tienen múltiples muestras de sus datos, se querrá estimar la desviación estándar de su población utilizando todas esas desviaciones estándar de la muestra. Este es el escenario en el que la desviación estándar acumulada resulta útil.

La desviación estándar acumulada es sólo un promedio ponderado de todas las desviaciones estándar de la muestra. Cuantas más posiciones haya en una muestra, más importancia se le dará a la desviación estándar de esta muestra en el cálculo de la desviación estándar agrupada.

A continuación, se muestra un ejemplo de cómo se puede calcular la desviación estándar acumulada.

Desviación estándar acumulada

import math

import statistics

sample1 = [1, 2, 3]

sample2 = [1, 2, 3, 10, 20, 30]

s1 = statistics.stdev(sample1)

print(s1)

s2 = statistics.stdev(sample2)

print(s2)

pooled_std = math.sqrt(((len(sample1) - 1) * (s1 ** 2) + (len(sample2) - 1) * (s2 ** 2)) / (len(sample1) - 1 + len(sample2) - 1))

print(pooled_std)

 

Graficar la desviación estándar y las barras de error

Si desea graficar datos estadísticos en Python, puede utilizar la biblioteca de graficado 2D de matplotlib.

Se instala matplotlib usando el comando install matplotlib de pip3 en su terminal.

Instalar matplotlib

pip3 install matplotlib

Vamos a crear una gráfica de valores medios de las puntuaciones de los estudiantes por asignatura y usar la desviación estándar para mostrar nuestros rangos de confianza (también conocidos como barras de error).

Preparemos los datos como en el ejemplo a continuación. Calculemos las medias y las desviaciones estándar de las puntuaciones por asignatura.

Preparar datos

import statistics

math_scores = [73, 56, 98, 23, 14]

history_scores = [84, 99, 95, 34, 10]

english_scores = [89, 98, 99, 67, 56]




math_mean = statistics.mean(math_scores)

history_mean = statistics.mean(history_scores)

english_mean = statistics.mean(english_scores)




math_stdev = statistics.stdev(math_scores)

history_stdev = statistics.stdev(history_scores)

english_stdev = statistics.stdev(english_scores)




x = [0, 1, 2]

y = [math_mean, history_mean, english_mean]

yerr = [math_stdev, history_stdev, english_stdev]

Luego conecte x, y yerr como entradas a la función matplotlib.pyplot.errorbar(). matplotlib.pyplot.show() mostrará entonces un bonito gráfico de barras de error.

Terminal de trama

import mathplotlib.pyplot as plot

plot.errorbar(x, means, std, linestyle='None', marker='^')

plot.show()

Plot GUI

Espero que el tutorial le sea útil. Sigue viniendo.

Mokhtar Ebrahim
Fundadora de LikeGeeks. Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable de mantener, proteger y solucionar problemas de servidores Linux para múltiples clientes de todo el mundo. Me encanta escribir guiones de shell y Python para automatizar mi trabajo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *