Flujo de trabajo de EDA y perfilado de datos
df.info(), df.describe(), auditoría de valores ausentes, comprobación de tipos de datos y análisis de cardinalidad.
Flujo de trabajo de EDA y perfilado de datos es una lección gratuita de Learn AI with Python en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Learn AI with Python, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Learn AI with Python incluye 4 lecciones en total.
¿Qué es el análisis exploratorio de datos?
El análisis exploratorio de datos (EDA) es lo primero que se hace con cualquier conjunto de datos antes de crear modelos. Su objetivo es comprender la estructura, detectar problemas y desarrollar intuición sobre los datos.
Una lista de comprobación disciplinada para la primera inspección del EDA responde a estas preguntas: ¿Qué tamaño tienen los datos? ¿Qué tipos tienen las columnas? ¿Dónde faltan valores? ¿Hay duplicados? ¿Cómo se distribuyen los valores?
- Detectar pronto los problemas de calidad de los datos
- Decidir qué características deben limpiarse
- Formular hipótesis que se comprobarán más adelante
Carga de los datos
Todo comienza cargando un DataFrame y echando un vistazo rápido con head() y shape.
shape devuelve una tupla (rows, columns), por lo que sabrá de inmediato a qué escala está trabajando.
import pandas as pd
df = pd.read_csv("customers.csv")
print(df.shape) # (10000, 8)
print(df.head()) # first 5 rowsdf.info() — Tipos y recuentos de valores no nulos
df.info() es el primer comando más útil. Imprime el nombre de cada columna, su dtype y el recuento de valores no nulos.
Si una columna numérica aparece como object, algo no está bien (texto residual, comas o símbolos de moneda). Si los recuentos de valores no nulos difieren entre columnas, hay datos faltantes.
df.info()
# <class pandas.DataFrame>
# RangeIndex: 10000 entries
# age 9800 non-null float64
# city 10000 non-null object
# income 9500 non-null float64df.describe() — Resumen numérico
df.describe() proporciona el recuento, la media, la desviación estándar, el mínimo, los cuartiles (25/50/75 %) y el máximo de cada columna numérica.
Busque señales de alerta: un min de -1 en una columna de edad, un max muy superior al percentil 75 (valores atípicos) o una media muy alejada de la mediana (asimetría).
print(df.describe())
# Use include="all" to also summarize categorical columns
print(df.describe(include="all"))df.isnull().sum() — Recuento de valores faltantes
Encadenar isnull() con sum() cuenta los valores faltantes por columna. Añada otro .sum() para obtener el total general.
Convierta el resultado en un porcentaje para evaluar la gravedad: quizá convenga eliminar una columna que tenga un 60 % de valores faltantes, mientras que un 2 % es fácil de imputar.
print(df.isnull().sum())
missing_pct = df.isnull().sum() / len(df) * 100
print(missing_pct.sort_values(ascending=False))df.duplicated().sum() — Búsqueda de filas duplicadas
df.duplicated() devuelve una Serie booleana que marca las filas que son copias exactas de una fila anterior. Al sumarla, se cuenta cuántos duplicados existen.
Puede limitar la búsqueda de duplicados a columnas clave con subset, lo que resulta útil cuando un id debe ser único.
print(df.duplicated().sum()) # exact duplicate rows
print(df.duplicated(subset=["id"]).sum()) # duplicate ids
df = df.drop_duplicates()value_counts() — Frecuencias de las categorías
value_counts() cuenta cuántas veces aparece cada valor único en una columna. Es la herramienta de referencia para inspeccionar variables categóricas.
Use normalize=True para ver proporciones en lugar de recuentos absolutos y dropna=False para incluir los valores faltantes en el recuento.
print(df["city"].value_counts())
print(df["city"].value_counts(normalize=True))
print(df["city"].value_counts(dropna=False))Comprobación de la cardinalidad
La cardinalidad es el número de valores distintos de una columna, que se obtiene con nunique().
- Cardinalidad baja (unas pocas categorías) → adecuada para la codificación one-hot.
- Cardinalidad alta (miles de cadenas únicas, como los identificadores de usuario) → normalmente no es una característica útil tal cual.
for col in df.select_dtypes("object").columns:
print(col, "->", df[col].nunique(), "unique")Detección de columnas constantes y similares a identificadores
Durante la creación del perfil conviene señalar dos casos extremos:
- Columnas constantes (
nunique() == 1) no contienen información, por lo que deben eliminarse. - Columnas similares a identificadores (
nunique() == len(df)) son únicas para cada fila y no aportan información útil a la mayoría de los modelos.
n = len(df)
for col in df.columns:
u = df[col].nunique()
if u == 1:
print(col, "is constant")
elif u == n:
print(col, "is ID-like")dtypes y uso de memoria
Compruebe df.dtypes para confirmar que las columnas están almacenadas correctamente y df.memory_usage(deep=True) para encontrar las columnas que ocupan más memoria.
Reducir el tamaño de los tipos numéricos y convertir las cadenas de cardinalidad baja a category puede reducir drásticamente el uso de memoria en conjuntos de datos grandes.
print(df.dtypes)
print(df.memory_usage(deep=True))
df["city"] = df["city"].astype("category")Fragmento de código reutilizable para crear un perfil
Puede agrupar toda la lista de comprobación en una función auxiliar para aplicar el mismo tratamiento de primera inspección a cada conjunto de datos nuevo.
Ejecútela en cuanto cargue cualquier DataFrame para detectar de inmediato su forma, tipos, valores faltantes, duplicados y cardinalidad.
def profile(df):
print("Shape:", df.shape)
print(df.info())
print("Missing:\n", df.isnull().sum())
print("Dupes:", df.duplicated().sum())
for c in df.select_dtypes("object"):
print(c, df[c].nunique(), "unique")
profile(df)Comprobación rápida: valores faltantes
Se desea obtener el porcentaje de valores faltantes de cada columna.
Resumen: lista de comprobación para la primera inspección del EDA
Ahora dispone de una rutina inicial que puede repetir con cualquier conjunto de datos:
shapeyhead()para conocer la escala y obtener una vista previainfo()para consultar los dtypes y los recuentos de valores no nulosdescribe()para obtener resúmenes numéricos e indicios de valores atípicosisnull().sum()para contabilizar los valores faltantesduplicated().sum()para contar las filas duplicadasvalue_counts()ynunique()para consultar las frecuencias de las categorías y la cardinalidad
A continuación, examinaremos columnas individuales mediante un análisis univariante.
Preguntas frecuentes
¿La lección «Flujo de trabajo de EDA y perfilado de datos» es gratis?
Sí — el texto completo de «Flujo de trabajo de EDA y perfilado de datos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Learn AI with Python, actualiza a CoddyKit PRO. El curso de Learn AI with Python incluye 4 lecciones en total.
¿Qué aprenderé en «Flujo de trabajo de EDA y perfilado de datos»?
df.info(), df.describe(), auditoría de valores ausentes, comprobación de tipos de datos y análisis de cardinalidad. Practicas Learn AI with Python con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Learn AI with Python?
No se requiere experiencia previa. Learn AI with Python en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Flujo de trabajo de EDA y perfilado de datos»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Learn AI with Python?
Sí. Cada lección de Learn AI with Python incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Flujo de trabajo de EDA y perfilado de datos
- Análisis univariante
- Análisis bivariante y multivariante
- Distribución de características y análisis del objetivo