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 absolutaAsimetrí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() # CurtosisPercentiles 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 - Q1y 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 una respuesta