Varianza y desviación estándar en Python

Resumen

Calcular la varianza y desviación estándar en Python se vuelve sencillo cuando combinas pandas, numpy, matplotlib y seaborn sobre una base de datos real. Aquí aprenderás a hacerlo paso a paso usando el famoso dataset Iris, tanto para la población completa como para una muestra aleatoria, e interpretar los resultados frente al promedio.

Qué librerías necesitas para analizar varianza en Python

Antes de tocar los datos, importa las herramientas que harán todo el trabajo pesado.

  • pandas as pd para manipular la tabla.
  • numpy as np para cálculos numéricos.
  • matplotlib.pyplot as plt para gráficos base.
  • seaborn as sns para visualizaciones estadísticas.

Un detalle que puede frenarte: matplotlib se escribe con b, no con p. Si te equivocas, Python te marcará error de inmediato.

¿Para qué sirve seaborn frente a matplotlib? seaborn genera visualizaciones estadísticas más estéticas con menos código, como el displot que combina histograma y curva de densidad en una sola línea.

Cómo cargar el dataset Iris desde una URL

En lugar de descargar archivos, puedes leer el CSV directamente desde una URL con pandas. El dataset Iris no trae nombres de columnas, así que debes definirlos manualmente como un vector con cinco elementos: sepal length, sepal width, petal length, petal width y la clase de flor.

python iris = pd.read_csv(url, names=names)

La longitud y el grosor del sépalo y del pétalo son variables numéricas, mientras que la clase es categórica e identifica el tipo de flor.

Cómo explorar la distribución antes de calcular la varianza

Visualizar la variable de interés es un paso obligatorio. Si los datos no siguen una distribución normal, la interpretación cambia.

Con iris.head() revisas los primeros registros y confirmas que sepal length tiene valores numéricos consistentes. Luego, un histograma rápido te muestra la forma de la distribución:

python plt.hist(iris['sepal length'], color='orange', bins=185)

Para confirmar la normalidad, seaborn ofrece el displot con estimador de kernel density, una línea suave que une la distribución de puntos.

python sns.displot(iris['sepal length'], hist=True, kde=True, bins=185, color='orange')

El resultado: una curva clásica con menos valores en los extremos y concentración en el centro, típica de una distribución normal.

Cómo calcular varianza y desviación estándar poblacional

Una vez validada la distribución, el cálculo se reduce a una línea de código por métrica.

Qué función usar en pandas para varianza

La función var aplicada sobre una columna devuelve la varianza directamente.

python iris['sepal length'].var()

El resultado para la población completa es 0.68.

Cómo interpretar la desviación estándar con el promedio

La desviación estándar se obtiene con std, abreviatura de standard deviation.

python iris['sepal length'].std()

El valor es 0.82. Pero un número aislado no dice mucho. Necesitas compararlo contra el promedio usando mean:

python iris['sepal length'].mean()

El promedio es 5.84. Como 0.82 representa cerca del 20% del promedio, la desviación es significativa. Si tuvieras un promedio de 100 y una desviación de 1, esa misma cifra sería despreciable.

¿Cuándo una desviación estándar es alta o baja? Depende del promedio. Si la desviación supera el 15 o 20% del valor medio, los datos están dispersos. Si es menor al 5%, están concentrados.

Cómo crear una muestra aleatoria simple en pandas

Trabajar con muestras es clave cuando la población es enorme. pandas incluye la función sample para extraer una fracción aleatoria.

python muestra = iris.sample(frac=0.5)

Esto toma el 50% de los registros de forma aleatoria. Cada ejecución produce una muestra distinta, así que tus números no coincidirán exactamente con los de otra persona.

Qué cambia entre varianza poblacional y muestral

Repites el procedimiento sobre la nueva tabla:

  • Varianza muestral: muestra['sepal length'].var() devuelve aproximadamente 0.59.
  • Desviación estándar muestral: muestra['sepal length'].std() devuelve cerca de 0.769.
  • Promedio muestral: muestra['sepal length'].mean() ronda 5.7.

La varianza bajó de 0.68 a 0.59 y la desviación de 0.82 a 0.76. La conclusión se mantiene: como los valores siguen siendo cercanos a 1 frente a un promedio de aproximadamente 5.7, la dispersión es elevada.

¿Por qué la muestra da resultados distintos cada vez? Porque sample selecciona registros al azar. Si necesitas reproducibilidad, agrega el parámetro random_state con un número fijo.

Cómo interpretar correctamente los resultados

El flujo correcto siempre es el mismo: calcula varianza, calcula desviación estándar, obtén el promedio y compara.

  • Si el promedio es alto y la desviación es pequeña en proporción, los datos están concentrados.
  • Si el promedio es bajo y la desviación se acerca a 1, hay dispersión significativa.
  • La varianza al cuadrado siempre será mayor que la desviación, que es su raíz cuadrada.

Este mismo análisis aplica a sepal width, petal length y petal width. Te dejo el reto: replica el procedimiento con las otras tres variables numéricas y compara cuál presenta mayor dispersión. ¿Qué variable crees que tendrá la varianza más alta? Cuéntame en los comentarios.