Estadísticas Resumidas

En el análisis de datos, especialmente cuando trabajamos con conjuntos de datos tabulares, es común que lo primero que queramos hacer sea “entender el terreno”: obtener una visión rápida de los patrones, la distribución y las características principales de las variables.
A este proceso lo llamamos estadísticas resumidas (summary statistics), y constituye uno de los pilares del análisis exploratorio de datos (EDA, Exploratory Data Analysis).

Estas estadísticas nos permiten responder preguntas básicas como:

  • ¿Qué tan centrados o dispersos están los datos?
  • ¿Existen valores extremos o atípicos?
  • ¿Cómo se distribuyen los valores?
  • ¿Qué categorías son más frecuentes?

Estas herramientas —medias, dispersiones, cuartiles, gráficos y agrupaciones— nos permiten:

  • Preparar los datos para análisis más complejos.
  • Detectar errores o valores extremos.
  • Comprender patrones iniciales.

Análisis Univariado: Explorando una Variable a la Vez

El análisis univariado se enfoca en describir y entender una sola variable por vez. Es la forma más directa de comenzar el EDA y nos permite observar tendencias, detectar anomalías y entender el comportamiento general de los datos.

Podemos dividirlo en dos grandes tipos:

  • Variables cuantitativas (numéricas)
  • Variables categóricas (de tipo texto o etiquetas)

Veamos cómo se resumen y visualizan cada una.

Variables Cuantitativas

Medidas de Tendencia Central

Las medidas de tendencia central buscan representar el valor “típico” o central de un conjunto de datos.

  • Media (promedio): la suma de todos los valores dividida por el número de observaciones. Es útil, pero sensible a valores atípicos.
  • Mediana: el valor que divide al conjunto en dos partes iguales. Menos afectada por outliers, representa mejor distribuciones sesgadas.
  • Moda: el valor más frecuente. Muy útil en datos categóricos o multimodales.
  • Media recortada: elimina un porcentaje de los valores más altos y bajos antes de calcular la media.
df['column'].mean() # media
df['column'].median() # mediana
df['column'].mode() # Moda

# Media recortada:
from scipy.stats import trim_mean 
trim_mean(df.column, proportiontocut=0.1)

Medidas de Dispersión

Describen cuánto varían los valores respecto al centro.

  • Rango: diferencia entre el valor máximo y el mínimo.
  • Varianza: mide la variabilidad cuadrática respecto a la media.
  • Desviación estándar: raíz cuadrada de la varianza; indica cuánto se alejan los datos, en promedio, de la media.
  • Desviación media absoluta (MAD): promedio de las diferencias absolutas respecto a la media.
df['column'].max() - df['column'].min()  # rango
df['column'].var()  # Varianza
df['column'].std()  # Desviacion estandar
(df.column - df.column.mean()).abs().mean()  # Desviación media absoluta

Asimetría (Skewness) y Curtosis

Estas métricas describen la forma de la distribución:

  • Asimetría (Skewness): indica si los datos están sesgados a la izquierda o derecha.
    • Sesgo positivo → cola larga a la derecha
    • Sesgo negativo → cola larga a la izquierda
  • Curtosis (Kurtosis): mide el peso de las colas de la distribución (presencia de valores extremos). df['column'].kurt()
    • Leptocúrtica: colas gruesas (muchos outliers)
    • Platicúrtica: colas delgadas
    • Mesocúrtica: similar a la normal
df['column'].skew()  # Asimetría 
df['column'].kurt()  # Curtosis

Percentiles y Cuartiles

Los percentiles indican el porcentaje de observaciones por debajo de un valor dado.
Por ejemplo, el percentil 80 = 130 significa que el 80% de los valores son menores que 130.

np.percentile(df['column'], 80)

Los cuartiles dividen los datos en cuatro partes iguales:

  • Q1 (25%), Q2 (50% = mediana), Q3 (75%)

El rango intercuartílico (IQR) se calcula como:

IQR = Q3 - Q1

y representa la dispersión central, resistente a outliers.

Visualización: Histogramas y Boxplots

Visualizar los datos es esencial para complementar las estadísticas numéricas.

  • Histograma: muestra la frecuencia de valores en intervalos (bins).
sns.histplot(df['column'])
  • Boxplot (diagrama de caja): representa la mediana, los cuartiles y los valores atípicos.
sns.boxplot(df['column'])

Estos gráficos ayudan a detectar sesgos, simetrías y valores extremos de un vistazo.


Variables Categóricas

Cuando analizamos variables no numéricas (como “país”, “color” o “tipo de producto”), las estadísticas cambian.

Frecuencias y Proporciones

La herramienta básica es el conteo de valores:

df['column'].value_counts()

Y para ver proporciones:

df['column'].value_counts(normalize=True)

Estas proporciones nos ayudan a entender la distribución de categorías, especialmente cuando hay clases dominantes o poco representadas.

Visualización

  • Gráficos de barras: ideales para mostrar frecuencias.
sns.countplot(x='column', data=df)
  • Gráficos circulares (pie charts): útiles para proporciones, aunque menos precisos.

Agrupación y Agregación de Datos

En análisis exploratorios más profundos, necesitamos obtener estadísticas por grupo.
Por ejemplo: ¿Cuál es el precio promedio por tipo de carrocería?

La función groupby() de pandas permite dividir, aplicar y combinar fácilmente:

df.groupby('body-style')['price'].mean()

También podemos aplicar múltiples funciones de agregación:

df.groupby(['body-style', 'drive-wheels']).agg({
    'height': 'min',
    'length': 'max',
    'price': 'mean'
})

Y definir agregaciones personalizadas con agg():

df.agg({'length':['sum','min'], 'width':['max','min']})

Este enfoque es esencial para crear tablas resumen, indicadores por categoría y comparativas entre grupos.

Variables Categóricas Ordinales

Algunas categorías tienen un orden lógico (por ejemplo: “bajo”, “medio”, “alto”).
En estos casos, podemos convertirlas en variables de tipo category ordenadas para analizarlas numéricamente:

order = ['Preschool', 'Primary', 'Secondary', 'College', 'Graduate']
df['education'] = pd.Categorical(df['education'], categories=order, ordered=True)

Esto permite calcular la mediana de la categoría:

median_index = np.median(df['education'].cat.codes)
order[int(median_index)]

Importante:

Aunque podemos asignar números, no debemos calcular medias si las distancias entre categorías no son uniformes.

Deja un comentario