Estadísticas Resumidas: La Base del Análisis de Datos Exploratorio

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.

Comentarios

Deja una respuesta

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