- Aprender
- Informática
- Ciencia de datos e IA
- Análisis de datos con Python
- Análisis exploratorio de datos en Python
Análisis exploratorio de datos en Python
IntermedioUnidad 8 de 8 del curso Curso de Análisis de datos con Python
Lo que aprenderás
- Explica para qué sirve el análisis exploratorio de datos, convierte una solicitud amplia en preguntas concretas y prepara un cuaderno que cualquier persona pueda volver a ejecutar de principio a fin.
- Define el propósito y las preguntas de un análisis exploratorioDescribe qué hace el análisis exploratorio de datos, sigue su flujo de trabajo desde las preguntas hasta los hallazgos y escribe preguntas específicas que los datos puedan responder.
- Organiza un cuaderno interactivo que cualquier persona pueda volver a ejecutarEstructura un cuaderno de Jupyter para que se ejecute de principio a fin con los mismos resultados, con secciones claras, rutas relativas, versiones registradas, semillas aleatorias fijas y comprobaciones incorporadas.
- Define el propósito y las preguntas de un análisis exploratorio
- Inspecciona el tamaño, la estructura y los tipos de variables de un conjunto de datos nuevo, mide los datos faltantes y duplicados y comprueba que los valores sean válidos y consistentes antes de confiar en cualquier patrón.
- Inspecciona la estructura, el tamaño y los tipos de variablesUtiliza los métodos de inspección de pandas para conocer la forma, las columnas, los tipos y las claves de un conjunto de datos, clasificar cada variable para el análisis y detectar valores almacenados con un tipo incorrecto.
- Cuantifica los valores faltantes y los duplicadosCuenta los valores faltantes y su proporción por columna, encuentra códigos ocultos de valores faltantes, comprueba si la ausencia de datos sigue un patrón y detecta filas completas y claves duplicadas.
- Comprueba la validez y la consistencia de los valoresAplica comprobaciones de intervalos, categorías, relaciones entre columnas, unidades y cobertura temporal, y mantén un registro de cada problema de calidad de los datos y cada decisión.
- Inspecciona la estructura, el tamaño y los tipos de variables
- Resume y representa variables numéricas y categóricas por separado, reconoce las formas de las distribuciones, detecta valores atípicos y decide cómo tratarlos.
- Resume una variable numérica mediante medidas de tendencia central y dispersiónCalcula e interpreta medidas de tendencia central, dispersión y posición en pandas, y elige resúmenes robustos cuando los datos sean asimétricos o contengan valores extremos.
- Representa y describe las formas de las distribucionesDibuja histogramas, curvas de densidad, diagramas de caja y bigotes y ECDF con pandas y seaborn, elige intervalos y escalas que muestren la forma real y describe una distribución con palabras y números.
- Resume variables categóricasCrea tablas de frecuencias y gráficos de barras para variables categóricas, conserva el orden de las categorías ordinales, trata las categorías poco frecuentes y las etiquetas faltantes e indica el denominador de cada porcentaje.
- Detecta valores atípicos y decide cómo tratarlosMarca valores inusuales con la regla del IQR, puntuaciones z y puntuaciones robustas, investiga su causa y elige y documenta una forma justificada de tratarlos.
- Resume una variable numérica mediante medidas de tendencia central y dispersión
- Muestra relaciones entre variables numéricas mediante diagramas de dispersión, mide su intensidad con coeficientes de correlación e interpreta qué puede mostrar una asociación y qué no.
- Representa y describe relaciones entre dos variables numéricasDibuja diagramas de dispersión y matrices de diagramas de dispersión que sigan siendo legibles con muchos puntos, añade una tercera variable mediante colores o paneles y describe la dirección, la forma, la intensidad y los puntos inusuales.
- Mide la asociación mediante coeficientes de correlaciónCalcula e interpreta las correlaciones de Pearson, Spearman y Kendall en pandas, lee una matriz de correlaciones y un mapa de calor, y reconoce lo que un coeficiente no muestra.
- Interpreta las relaciones sin extraer conclusiones que excedan la evidenciaExplica por qué una asociación no establece una causa, reconoce la confusión, la paradoja de Simpson, las tendencias temporales, los intervalos restringidos, la agregación y los hallazgos casuales, y formula las conclusiones en consecuencia.
- Representa y describe relaciones entre dos variables numéricas
- Compara distribuciones, proporciones y tasas entre grupos y períodos, teniendo en cuenta los tamaños de los grupos y utilizando los denominadores adecuados, y reconoce cuándo una diferencia se basa en datos insuficientes.
- Compara una variable numérica entre gruposResume una variable numérica por grupo con recuentos, medidas de tendencia central y dispersión, representa las distribuciones de los grupos una junto a otra y expresa las diferencias en términos absolutos y relativos.
- Compara proporciones de categorías y tasas entre segmentosCrea tablas de contingencia con porcentajes por fila o columna, compara tasas con el denominador adecuado y distingue los puntos porcentuales de las variaciones porcentuales.
- Compara segmentos a lo largo del tiempoAgrega datos por período y segmento, evita problemas como períodos incompletos y de distinta duración, separa los patrones estacionales de las tendencias y examina las fechas ausentes y los cambios repentinos.
- Compara una variable numérica entre grupos
- Convierte la exploración en hallazgos claros y respaldados por evidencia, con limitaciones expresadas honestamente, y comparte el análisis como un cuaderno limpio o un informe que otras personas puedan volver a ejecutar y comprobar.
- Convierte las observaciones en hallazgos claros y respaldados por evidenciaRedacta hallazgos que respondan a las preguntas con evidencia, magnitud y alcance, elige y etiqueta gráficos que hagan visible cada hallazgo e indica las limitaciones y los siguientes pasos.
- Comparte un análisis reproduciblePrepara un cuaderno limpio que pueda volver a ejecutarse, calcula mediante código cada cifra comunicada, expórtalo como informe, guarda figuras y tablas, registra la procedencia y protege los datos personales.
- Convierte las observaciones en hallazgos claros y respaldados por evidencia
Guía de estudio de Análisis exploratorio de datos en Python
1Planifica un análisis exploratorio en un cuaderno interactivo
Las preguntas claras hacen útil un análisis exploratorio, y un cuaderno fiable permite comprobar sus resultados. Empieza relacionando la solicitud con una decisión, identificando la población y averiguando qué significa cada fila. Después organiza el código, la configuración y las comprobaciones para que una sesión nueva pueda reproducir el trabajo. Estos hábitos dan a los gráficos y las comparaciones posteriores un propósito y un punto de partida fiable.
1.1 Preguntas que dan un propósito a la exploración
El análisis exploratorio de datos, o EDA, utiliza resúmenes y gráficos para conocer el contenido de un conjunto de datos. Buscas problemas de calidad, patrones y sorpresas, y después los conviertes en mejores preguntas. John Tukey desarrolló y promovió este enfoque, especialmente en su libro de 1977 Exploratory Data Analysis.
Empieza con una decisión
Una solicitud como «¿Cómo van nuestras entregas?» es demasiado amplia para orientar el primer cálculo. Pregunta qué decisión respaldará el análisis y después identifica las variables y comparaciones importantes. Algunas preguntas útiles son «¿Cuál es el tiempo de entrega habitual y cuánto varía?», «¿Qué proporción de pedidos tarda más de 45 minutos?», «¿Los tiempos varían según la ciudad o la hora?» y «¿Ha cambiado la mediana mensual desde enero?». Cada una orienta hacia un resumen, un gráfico o una comparación.
Antes de calcular, establece de dónde proceden los datos, cómo se recopilaron, su período y población, y el significado y la unidad de cada columna. Un aumento de los campos completados puede reflejar un cambio en un formulario que hizo obligatorio un campo. Ese contexto cambia la explicación del patrón.
Conoce el significado de cada fila
La unidad de observación, también llamada granularidad, es lo que representa cada fila. Puede ser un pedido, un artículo de un pedido, un cliente o una tienda en un día determinado. Una tabla con 12 000 filas de líneas de pedido y 4000 identificadores de pedido distintos tiene en promedio 3 filas por pedido. Su recuento de filas describe artículos, por lo que una pregunta sobre pedidos necesita un recuento de pedidos. Los identificadores de pedido repetidos son esperables en esa tabla; serían un problema de calidad en una tabla que debería contener una fila por pedido.
Sigue un ciclo
Un flujo de trabajo útil es:
- Plantear las preguntas y la decisión que respaldan.
- Cargar los datos y confirmar el significado de una fila.
- Caracterizar la estructura, los tipos y la calidad.
- Examinar las variables importantes por separado.
- Explorar las relaciones entre variables.
- Comparar segmentos y períodos.
- Escribir los hallazgos, las limitaciones y las siguientes preguntas.
Estas etapas forman un ciclo. Una relación sorprendente puede llevarte de vuelta a la fuente para comprobar las unidades o los valores faltantes. Los datos nuevos pueden cambiar el perfil y reabrir preguntas anteriores. Partir de preguntas mantiene el análisis centrado; prestar atención a las sorpresas hace que siga siendo exploratorio. Representar todos los pares posibles sin un propósito suele producir una larga colección de gráficos con poco que explicar.
Distingue una pista de una confirmación
La exploración genera hipótesis. El análisis confirmatorio comprueba una hipótesis formulada de antemano, idealmente con datos que no revelaron el patrón. Examinar muchos gráficos hace más probables los patrones casuales, por lo que un resultado exploratorio llamativo necesita seguimiento antes de respaldar una afirmación general. El análisis exploratorio ayuda a preparar ese trabajo al mostrar las variables utilizables, las distribuciones asimétricas y las relaciones prometedoras.
La cobertura de los datos también determina el alcance de un hallazgo. Las reseñas de productos proceden de personas que decidieron escribirlas. Sus valoraciones describen a esas personas; extender el resultado a todos los clientes requiere evidencia sobre las diferencias entre quienes respondieron y los demás.
Puntos clave
- Empieza con una decisión y preguntas concretas sobre variables, poblaciones y comparaciones.
- Confirma qué representa cada fila antes de interpretar recuentos o claves repetidas.
- Utiliza el flujo de trabajo como un ciclo: las sorpresas pueden revelar problemas de calidad o nuevas preguntas.
- La exploración genera hipótesis; la confirmación comprueba hipótesis formuladas de antemano.
- El proceso de recopilación y la población limitan el alcance de los hallazgos.
1.2 Un cuaderno que se ejecuta de principio a fin
Un cuaderno de Jupyter combina código, resultados y explicaciones Markdown. Su núcleo de ejecución es el proceso de Python que mantiene las variables en memoria. El núcleo recuerda el orden en que se ejecutaron las celdas, que puede diferir del orden visible en la página.
Elimina el estado oculto
Supón que ejecutas una celda que crea clean, eliminas esa celda y sigues utilizando clean más abajo. La sesión actual sigue funcionando porque la variable permanece en memoria. Una sesión nueva falla porque el cuaderno ya no contiene su definición. Editar una celda anterior después de ejecutar cálculos posteriores también puede dejar resultados antiguos junto a código nuevo.
Los contadores de ejecución como [7] ayudan a detectar ejecuciones fuera de orden. La prueba práctica es más rigurosa: en JupyterLab, elige Kernel → Restart Kernel and Run All Cells. Comprueba que todo el cuaderno termine y que sus cifras coincidan con los resultados que quieres compartir.
Ordena claramente las dependencias
Empieza con un título, el propósito y las preguntas. Continúa con las importaciones y una celda de configuración, y después incluye secciones para la carga, las comprobaciones de calidad, las distribuciones, las relaciones, las comparaciones y los hallazgos. Por ejemplo:
from pathlib import Path
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
DATA = Path("data/raw/orders.csv")
LATE_MINUTES = 45
SEED = 42
df = pd.read_csv(DATA)
Una ruta relativa funciona dentro de la estructura compartida del proyecto. Una ruta ligada al escritorio de una persona deja de funcionar cuando el proyecto se traslada. Indica el directorio de trabajo utilizado para ejecutar el cuaderno, de modo que la ruta relativa se resuelva correctamente. Conserva los archivos en bruto y guarda los datos procesados por separado. Haz los cambios mediante código: una edición manual en una hoja de cálculo es invisible para la siguiente ejecución.
Registra el entorno y las elecciones aleatorias
Guarda las versiones de los paquetes en un archivo de entorno, como la salida de pip freeze > requirements.txt, e imprime las versiones importantes en el cuaderno con print(pd.__version__). El comportamiento cambia entre versiones: pandas 3 asigna al texto un tipo de datos específico str, y un DataFrame que contiene texto necesita una selección numérica explícita para calcular correlaciones.
Un gráfico basado en una muestra debe mostrar las mismas observaciones en cada ejecución. Utiliza df.sample(n=1000, random_state=42) cuando haya al menos 1000 filas disponibles, o crea un generador de NumPy con rng = np.random.default_rng(42). Registra la semilla junto con las demás opciones de configuración. Una semilla controla las elecciones aleatorias; reproducir el resultado completo también requiere las mismas entradas y el mismo software.
Convierte los supuestos en comprobaciones ejecutables
Convierte las expectativas importantes en comprobaciones:
assert df["order_id"].is_unique
assert df["minutes"].ge(0).all()
La primera exige un identificador de pedido único por fila. La segunda exige que cada duración esté presente y no sea negativa para datos ordinarios de coma flotante. Si se permiten tiempos faltantes, define una comprobación separada de valores faltantes y aplica la regla del intervalo solo a los tiempos registrados. Una aserción fallida detiene la ejecución en el punto en que la entrada incumple por primera vez lo esperado.
Agrupa los procedimientos repetidos en funciones para que una corrección actualice todos sus usos. Mantén el código y los cuadernos bajo control de versiones. Los resultados de los cuadernos se almacenan en su JSON, lo que puede dificultar la comparación de cambios; puede ayudar borrar los resultados antes de confirmar los cambios o vincular el cuaderno a un script de texto mediante Jupytext.
Puntos clave
- El núcleo almacena variables del historial de ejecución, incluidas las de celdas que ya no son visibles.
- Reinicia el núcleo y ejecuta todas las celdas para descubrir dependencias ocultas y resultados desactualizados.
- Mantén juntas las importaciones y la configuración, utiliza rutas relativas y conserva las entradas en bruto.
- Registra las versiones de los paquetes y fija la semilla de cada paso aleatorio.
- Utiliza aserciones para comprobar los supuestos que debe cumplir un archivo de entrada nuevo.
- Haz cada cambio en los datos mediante código para que otra ejecución pueda repetirlo.
2Caracteriza un conjunto de datos y evalúa su calidad
Un conjunto de datos puede parecer ordenado mientras oculta registros repetidos, códigos de valores faltantes o unidades incompatibles. Caracteriza su estructura y sus significados, mide las ausencias y los duplicados, y aplica reglas que reflejen cómo se recopilaron los datos. El objetivo es comprender qué observaciones respaldan cada resultado y dejar un registro visible de las decisiones que modifican los datos analizados.
2.1 La primera inspección de un conjunto de datos
Una primera inspección establece el tamaño de la tabla, qué representan sus columnas y si los tipos almacenados son adecuados para esos significados. Esta caracterización te ayuda a elegir resúmenes razonables antes de confiar en el resultado de un comando práctico.
Inspecciona la estructura desde varios ángulos
Utiliza df.shape para los recuentos de filas y columnas, df.head() y df.tail() para los extremos del archivo, y df.sample(5, random_state=0) para una muestra reproducible cuando existan al menos cinco filas. Las primeras filas pueden pertenecer todas a la fecha más temprana o a la misma tienda. Ejecuta df.info() para inspeccionar los nombres de columnas, los recuentos de valores no nulos, los tipos de datos y el uso de memoria. Utiliza df.nunique() para contar los valores registrados distintos en cada columna.
Separa el significado del almacenamiento
| Tipo de análisis | Ejemplo | Tratamiento útil |
|---|---|---|
| Numérica continua | Distancia en km | Tendencia central, dispersión y distribución |
| Numérica discreta | Artículos por pedido | Recuentos e intervalos centrados en enteros |
| Categoría nominal | Ciudad | Frecuencias y proporciones |
| Categoría ordinal | Bajo, medio, alto | Frecuencias en un orden significativo |
| Fecha y hora | Marca de tiempo del pedido | Cobertura y comparaciones entre períodos |
| Identificador | Identificador de cliente | Unicidad y vínculos entre registros |
| Texto libre | Un comentario escrito | Inspección del texto y su calidad |
Un tipo de datos entero no convierte todas las columnas en cantidades. Los códigos de región y los identificadores de clientes tienen almacenamiento numérico, pero su media aritmética no es útil. Una valoración de 1 a 5 tiene un conjunto pequeño de respuestas ordenadas y suele beneficiarse de una representación categórica.
pandas utiliza habitualmente int64, float64, bool, datetime64, category y, desde pandas 3, str. Las versiones anteriores de pandas utilizaban a menudo object para el texto. Los datos enteros ordinarios pueden convertirse en float64 cuando aparecen valores faltantes porque NaN es un marcador de coma flotante; Int64, que admite valores faltantes, permite conservar enteros con valores faltantes.
Comprueba las conversiones y las claves
Una cadena que parece numérica puede ocultar separadores, unidades o códigos de valores faltantes. Para una Series que contiene «1,234», «950», «n/a» y «1,010»:
parsed = pd.to_numeric(
s.str.replace(",", ""), errors="coerce"
)
Los valores se convierten en 1234,0, 950,0, NaN y 1010,0. Compara los recuentos de valores faltantes antes y después de la conversión e inspecciona las entradas que hayan pasado a ser faltantes. La coerción de tipos también convierte en NaN un valor no tratado como «12 kg», por lo que una ejecución sin errores no basta para demostrar que la conversión conservó los datos.
Lee como texto los códigos cuyos ceros iniciales son significativos, por ejemplo pd.read_csv(path, dtype={"postal_code": "str"}). Recuperar un cero perdido más tarde requiere información que la representación como entero descartó.
Identifica la clave esperada de las filas. df["order_id"].is_unique comprueba una clave de una sola columna; df.duplicated(subset=["store_id", "date"]).sum() comprueba las combinaciones repetidas de tienda y fecha. Relaciona los recuentos de claves con el significado de las filas. Una columna con un solo valor no puede explicar diferencias dentro de este conjunto de datos; miles de supuestas categorías de ciudades pueden indicar etiquetas inconsistentes.
Completa un diccionario de datos mientras inspeccionas: registra el significado, el tipo de análisis, la unidad, los valores permitidos y los problemas conocidos de cada columna. Esas entradas proporcionan las reglas para las siguientes comprobaciones de calidad.
Puntos clave
- Inspecciona el tamaño, filas de muestra, recuentos de valores no nulos, tipos de datos y recuentos de valores distintos.
- Elige los métodos de análisis según el significado de una variable, incluidos su orden y sus unidades.
- Comprueba las entradas que pasaron a ser faltantes después de cualquier conversión que transforme los fallos de interpretación en valores faltantes.
- Comprueba la clave esperada teniendo en cuenta la unidad de observación de la tabla.
2.2 Valores faltantes y registros repetidos
Los valores faltantes cambian qué observaciones contribuyen a un resultado. Los registros duplicados pueden dar más peso a algunas observaciones. Cuantifica ambos antes de elegir un tratamiento y deja constancia visible de la decisión en el análisis.
Cuantifica la ausencia de datos y su patrón
pandas utiliza NaN, NaT para fechas y horas faltantes y <NA> para tipos que admiten valores faltantes. Cuenta y ordena los valores faltantes con:
missing_count = df.isna().sum()
missing_share = df.isna().mean().sort_values(ascending=False)
rows_with_gaps = df.isna().any(axis=1).sum()
Una media de valores booleanos da una proporción porque True cuenta como 1 y False como 0. Con 96 edades faltantes entre 1200 filas, la proporción de valores faltantes es del 8 %. Las filas con alguna ausencia pueden ser mucho más numerosas que las entradas faltantes de una columna; esta es la pérdida de filas que causaría aplicar df.dropna() a todas ellas.
Algunas ausencias se ocultan tras valores ordinarios. La lectura predeterminada de CSV reconoce muchos marcadores vacíos y de texto, pero códigos como -999, «unknown» y «?» pueden permanecer. Inspecciona las frecuencias y los extremos, consulta el diccionario de datos y declara marcadores adicionales con na_values. El cero necesita contexto: puede significar que no hubo devoluciones o ser un marcador no documentado.
Comprueba si las ausencias se concentran en un segmento:
age_gaps = df["customer_age"].isna()
age_gaps.groupby(df["city"]).mean()
Si una ciudad tiene un 40 % de edades faltantes y las demás alrededor de un 2 %, un análisis de filas completas infrarrepresentará esa ciudad. Los términos MCAR, MAR y MNAR describen mecanismos diferentes: ausencia no relacionada con valores observados ni faltantes; ausencia que depende solo de variables observadas; y ausencia que depende del propio valor faltante. Las personas con ingresos altos que omiten una pregunta sobre sus ingresos son un ejemplo de MNAR. El análisis exploratorio puede detectar relaciones con variables registradas; determinar el mecanismo completo requiere más evidencia sobre la recopilación.
Indica el denominador
Para 6 pagos con tarjeta, 2 pagos en efectivo y 2 valores faltantes, value_counts(normalize=True) informa de un 75 % con tarjeta y un 25 % en efectivo entre los 8 pagos registrados. Al añadir dropna=False, informa de un 60 % con tarjeta, un 20 % en efectivo y un 20 % de valores faltantes entre las 10 filas. Cada tabla responde a una pregunta distinta. Indica la población en la que se basa cada proporción.
Inspecciona filas completas y claves duplicadas
df.duplicated().sum() cuenta las copias posteriores a la primera aparición de cada fila completa. Una comprobación basada en claves puede encontrar registros contradictorios que no son idénticos:
repeated = df["order_id"].duplicated(keep=False)
df.loc[repeated].sort_values("order_id")
Considera los identificadores 101, 102, 102, 103, 104, 104 con importes de 20, 35, 35, 12, 50, 55. Hay 1 fila completamente duplicada, 2 apariciones repetidas de claves después de la primera y 4 filas implicadas en claves repetidas. Los dos registros 104 discrepan en el importe, por lo que eliminar una copia sin investigar podría descartar el valor correcto.
Registra el recuento, la causa probable, el tratamiento y las filas afectadas para cada problema. Eliminar todas las ausencias puede suprimir un subconjunto sesgado; rellenarlas con la media oculta su patrón y reduce la dispersión aparente. Elige un tratamiento adecuado para la pregunta y el proceso de recopilación, y mantén la posibilidad de medir la ausencia original de datos.
Puntos clave
- Cuenta las ausencias por columna y las filas con alguna ausencia antes de elegir un tratamiento.
- Comprueba los códigos centinela y compara la ausencia de datos entre segmentos relevantes.
- Los mecanismos de ausencia describen por qué faltan datos; los patrones observados por sí solos no permiten identificar el mecanismo completo.
- Las proporciones de frecuencia predeterminadas excluyen los valores faltantes, así que indica el denominador.
- Las filas completas duplicadas y las claves repetidas con datos contradictorios requieren investigaciones distintas.
- Registra los tratamientos porque eliminar o rellenar valores cambia los datos analizados.
2.3 Reglas que revelan datos inválidos o inconsistentes
Un valor es válido cuando cumple el intervalo o conjunto permitido para su columna. Los registros son consistentes cuando sus valores concuerdan entre columnas, filas y fuentes. Crea comprobaciones a partir del diccionario de datos y del conocimiento del proceso que generó los datos.
Comprueba intervalos sin incluir ausencias
Empieza por los mínimos y máximos, y después comprueba límites explícitos. Para contar las edades registradas fuera del intervalo de 0 a 120:
invalid_age = df["age"].notna() & ~df["age"].between(0, 120)
invalid_age.sum()
between devuelve False para los valores faltantes. Negarlo por sí solo contaría las edades faltantes como inválidas; la comprobación de presencia separa ambos problemas. Otras reglas pueden exigir cantidades no negativas, porcentajes no superiores a 100 o fechas de extracción no anteriores a los eventos que contienen. El intervalo permitido procede del significado de la columna.
Unifica etiquetas y comprueba columnas
«Lyon», «lyon» y « Lyon» son tres cadenas, aunque nombren la misma ciudad. Los recuentos de 410, 22 y 5 pasan a ser 437 para «lyon» tras una eliminación justificada de espacios y una conversión de mayúsculas y minúsculas:
city_clean = df["city"].str.strip().str.lower()
Compara los recuentos de categorías antes y después. Las variantes ortográficas y los sinónimos necesitan una correspondencia explícita; cambiar solo las mayúsculas y minúsculas no puede unir «UK» con «United Kingdom». Conserva la regla utilizada para que una nueva ejecución tome la misma decisión.
Las comprobaciones entre columnas buscan contradicciones. df.query("delivered_at < ordered_at") encuentra entregas registradas antes de sus pedidos. Otras comprobaciones preguntan si los importes de los artículos suman el total, si la edad concuerda con la fecha de nacimiento o si un pedido cancelado tiene una hora de entrega inesperada. Estas reglas requieren unidades, convenciones de tiempo y definiciones compartidas entre columnas.
Busca cambios de escala y cobertura
Mezclar kilogramos y gramos puede crear agrupaciones cuyos valores difieren aproximadamente 1000 veces. Una proporción registrada en parte en una escala de 0–1 y en parte en una escala de 0–100 también crea una distribución engañosa. Comprueba la fuente antes de convertir: dos agrupaciones también pueden representar dos poblaciones reales. Un gráfico sugiere dónde investigar; la fuente establece qué unidades se aplican.
Inspecciona las fechas más temprana y más reciente y los recuentos por mes. Un mes ausente puede ser una falta en la extracción, mientras que un último mes incompleto contiene naturalmente menos registros. Un aumento brusco puede reflejar un nuevo sistema de registro. Registra la cobertura que realmente tienes antes de comunicar un patrón temporal.
Mantén un registro de calidad
Utiliza una tabla pequeña con el problema, la comprobación, el número de filas afectadas, la evidencia y la acción. Por ejemplo, una duración negativa puede marcarse mediante una regla de tiempo no negativo, investigarse con las marcas de tiempo y corregirse solo cuando la fuente establezca su valor verdadero. Las expectativas importantes pueden convertirse en aserciones que detengan una ejecución futura.
Una entrega de 120 minutos es inusual pero posible. Una duración de −5 minutos es imposible con la misma definición de duración. La primera necesita una investigación como valor atípico; la segunda, una investigación como error.
Puntos clave
- Utiliza reglas del dominio para comprobar intervalos válidos, conjuntos de categorías y concordancia entre columnas.
- Cuenta los valores faltantes por separado de los valores registrados fuera de un intervalo permitido.
- Comprueba variantes de etiquetas, unidades mezcladas y cobertura temporal antes de interpretar patrones.
- Mantén un registro de calidad y convierte las expectativas importantes sobre las entradas en aserciones.
- Investiga los valores inusuales; distingue un valor extremo posible de uno imposible.
3Describe la distribución de cada variable
Una sola media puede ocultar una cola larga, dos grupos distintos o un límite de registro. Describe cada variable importante con resúmenes y gráficos adecuados a su significado. Las variables numéricas necesitan comprobaciones de tendencia central, dispersión, forma y valores inusuales; las variables categóricas necesitan etiquetas, orden y denominadores claros. Las reglas de valores atípicos ayudan a localizar registros que merece la pena investigar, mientras que el contexto determina su tratamiento.
3.1 Tendencia central, dispersión y efecto de los valores extremos
Una distribución numérica describe qué valores aparecen y con qué frecuencia. Su tendencia central indica una posición típica, su dispersión muestra la variación y su forma revela lo que esos resúmenes omiten. Utiliza un gráfico junto con los números.
Elige resúmenes adecuados para la distribución
La media es la suma dividida por el recuento. La mediana es el valor central ordenado, o la media de los dos valores centrales si el recuento es par. El rango es el máximo menos el mínimo. El rango intercuartílico, o IQR, es Q3 menos Q1: la distancia entre los percentiles 75 y 25. La desviación estándar mide la dispersión alrededor de la media en las propias unidades de la variable.
En pandas, s.std() utiliza el cálculo muestral con ddof=1, dividiendo la suma de desviaciones al cuadrado por el recuento menos uno. np.std(a) de NumPy utiliza de forma predeterminada ddof=0, dividiendo por el recuento. Esto importa especialmente en muestras pequeñas, así que utiliza configuraciones equivalentes al comparar resultados.
Lee el resumen antes de interpretarlo
s = df["minutes"]
s.describe(percentiles=[0.1, 0.5, 0.9])
El resultado incluye el recuento de valores presentes, la media, la desviación estándar, el mínimo, los percentiles solicitados y el máximo. La entrada del 50 % es la mediana. En un DataFrame, describe() incluye de forma predeterminada las columnas numéricas y de fecha y hora; los resúmenes de fecha y hora incluyen su media y sus percentiles. describe(include="all") también resume las demás columnas. Las columnas de texto y categóricas reciben count, unique, top y freq, donde top es un valor de los más frecuentes y freq es su recuento. Excluye los identificadores numéricos de los resúmenes aritméticos.
Examina una cola larga a la derecha
Considera los tiempos de entrega de 18, 22, 25, 25, 27, 29, 31, 34, 38, 41 y 95 minutos. Su suma es 385 y su recuento es 11, por lo que la media es de 35,0 minutos. El sexto valor ordenado es 29, que da la mediana. pandas da Q1 = 25, Q3 = 36, IQR = 11 y una desviación estándar muestral de unos 21,02 minutos.
Sin la entrega de 95 minutos, la media es 29,0, la mediana 28 y la desviación estándar aproximadamente 7,15. Un valor desplaza la media 6 minutos y triplica aproximadamente la desviación estándar; la mediana se desplaza 1 minuto. Por eso la mediana y el IQR son resúmenes resistentes útiles para datos con valores extremos. Una distribución aproximadamente simétrica sin valores extremos suele describirse bien con su media y su desviación estándar.
Describe la cola y las posiciones útiles
La asimetría a la derecha tiene una cola larga hacia valores altos; la asimetría a la izquierda tiene una cola larga hacia valores bajos. La media suele estar desplazada hacia la cola larga con respecto a la mediana, pero comprueba la forma porque esta regla orientativa tiene excepciones. s.skew() es positivo para una cola a la derecha y negativo para una cola a la izquierda; es aproximadamente 2,71 para estos tiempos de entrega.
s.quantile(0.9) da aquí 41 minutos, una descripción útil de la parte superior de la distribución. Una de las 11 entregas supera los 45 minutos, aproximadamente el 9,1 %. Calcula las proporciones respecto a umbrales sobre los valores registrados cuando haya ausencias. Los cuartiles de muestras pequeñas pueden diferir entre programas: pandas utiliza interpolación lineal de forma predeterminada. Registra el método cuando los cuartiles exactos sean importantes.
Puntos clave
- Utiliza medidas de tendencia central y dispersión y un gráfico para describir una distribución numérica.
- La mediana y el IQR resisten los valores extremos; la media y la desviación estándar responden fuertemente a ellos.
- Comprueba los recuentos de valores presentes y que las configuraciones de desviación estándar coincidan.
- Los percentiles y las proporciones respecto a umbrales pueden responder directamente a preguntas prácticas.
- La dirección de la asimetría describe la cola larga, no el lado que contiene la mayoría de las observaciones.
3.2 Gráficos que muestran la forma de una distribución
Un gráfico de distribución revela colas, picos, huecos y límites que una medida central por sí sola oculta. Cada gráfico destaca características distintas, así que elígelo según la pregunta y comprueba cómo afectan las opciones de visualización a la imagen.
Utiliza intervalos significativos en los histogramas
Un histograma divide una escala numérica en intervalos y cuenta las observaciones de cada uno. sns.histplot(data=df, x="minutes", binwidth=5) utiliza intervalos de cinco minutos. seaborn elige intervalos automáticos de forma predeterminada; los histogramas de pandas y Matplotlib utilizan 10. Prueba varias configuraciones razonables. Un intervalo muy amplio puede unir dos picos, mientras que intervalos muy estrechos pueden convertir el ruido de muestreo en una estructura aparente. Para recuentos enteros, discrete=True centra una barra en cada entero.
Describe la forma como simétrica, asimétrica a la derecha o a la izquierda, uniforme, o con uno, dos o varios picos. Busca huecos y límites superiores e inferiores. Los picos en valores redondos como 30 y 60 minutos pueden reflejar una acumulación en valores redondos debida al redondeo de los datos declarados por las personas. Dos picos cerca de 25 y 50 minutos podrían reflejar entregas en bicicleta y en automóvil. Añadir hue="vehicle" permite comprobar si esos grupos explican la separación.
Compara los principales tipos de gráficos
| Gráfico | Qué ayuda a ver | Qué comprobar |
|---|---|---|
| Histograma | Recuentos por intervalo, picos y huecos | Amplitud y alineación de los intervalos |
| KDE | Una estimación suave de la forma de la distribución | Ancho de banda y colas imposibles |
| Diagrama de caja y bigotes | Mediana, mitad central y extremos marcados | Picos ocultos y tamaño de la muestra |
| ECDF | La proporción menor o igual a cada valor | Unidades de los ejes y población |
Una estimación de densidad por núcleos, o KDE, suaviza las observaciones para formar una curva. sns.kdeplot(data=df, x="minutes") puede ser útil, pero el ancho de banda cambia su forma. El suavizado puede ocultar límites superiores o extenderse por debajo de cero incluso cuando las duraciones no son negativas. Interpreta esa extensión como una característica de la estimación, no como duraciones negativas observadas.
Un diagrama de caja y bigotes dibuja la mediana dentro de una caja que va de Q1 a Q3. Los bigotes predeterminados llegan hasta los valores observados más extremos que aún están a una distancia máxima de 1,5 IQR de la caja; los puntos más alejados aparecen por separado. Por tanto, un bigote no es necesariamente el mínimo o el máximo, y su extremo es un valor observado, no el límite calculado.
Lee proporciones acumuladas y escalas multiplicativas
sns.ecdfplot(data=df, x="minutes")
Una ECDF muestra la proporción menor o igual a cada valor. Lee horizontalmente desde una proporción como 0,9 para localizar un percentil. Evita la elección de intervalos de un histograma y resulta útil para comparar con qué frecuencia los valores permanecen por debajo de un umbral.
Una escala logarítmica ayuda con datos positivos que abarcan razones grandes. En una escala de base 10, 10, 100 y 1000 están igualmente espaciados porque cada paso multiplica por 10. Los logaritmos reales ordinarios requieren valores positivos; np.log1p(x) calcula el logaritmo natural de uno más el valor y admite el cero en datos no negativos.
Al comparar grupos de distinto tamaño, normaliza dentro de cada grupo mediante stat="percent", common_norm=False, o utiliza paneles con ejes compartidos. Termina con una descripción numérica, como «Los tiempos de entrega son asimétricos a la derecha, con una mediana de 29 minutos y la mitad de los pedidos entre 25 y 36 minutos; un pedido tardó 95 minutos».
Puntos clave
- Prueba configuraciones razonables de intervalos antes de decidir que un pico o un hueco es real.
- Comprueba si una mezcla de grupos explica la presencia de varios picos.
- El suavizado de una KDE puede ocultar características o extenderse más allá de las observaciones posibles.
- Un diagrama de caja y bigotes resume la posición y la dispersión, pero oculta el número de picos y el tamaño de la muestra.
- Una ECDF da proporciones acumuladas sin intervalos de clase.
- Las escalas logarítmicas muestran razones; los gráficos normalizados por separado ayudan a comparar las formas de los grupos.
3.3 Recuentos de categorías, orden y denominadores
Los resúmenes categóricos cuentan observaciones en grupos con nombre. Su significado depende de las etiquetas, su orden y la población utilizada para cada porcentaje. Un código numérico de categoría sigue necesitando un resumen categórico.
Crea una tabla de frecuencias
s.value_counts() enumera las categorías de mayor a menor frecuencia. Utiliza normalize=True para obtener proporciones y dropna=False para incluir una fila de valores faltantes. Para texto, describe() informa del número de valores registrados, el número de valores distintos, un valor de los más frecuentes y su recuento.
En 200 respuestas a una encuesta, 30 valoraciones son «baja», 50 son «media» y 120 son «alta». Dividir cada recuento por 200 da 15 %, 25 % y 60 %. Si esas son las 200 personas que respondieron a una pregunta de una encuesta más amplia, los porcentajes describen a quienes respondieron esa pregunta. Las respuestas faltantes cambian el denominador cuando se incluyen.
Conserva un orden significativo
Las categorías nominales como las ciudades no tienen un orden inherente; ordenarlas por frecuencia puede facilitar las comparaciones. Las categorías ordinales tienen un orden natural que debe permanecer visible:
order = ["low", "medium", "high"]
counts = s.value_counts().reindex(order, fill_value=0)
Una variable categórica ordenada registra el orden para la ordenación, las comparaciones y los gráficos. Su value_counts() sigue ordenando por frecuencia de forma predeterminada; utiliza sort=False o reordena explícitamente los recuentos. Un gráfico ordenado como «alto», «medio», «bajo» por la frecuencia puede hacer más difícil reconocer la escala.
Mantén separadas las etiquetas poco frecuentes y las ausencias
Cuando muchas categorías hacen que un gráfico sea ilegible, conserva las etiquetas más frecuentes y reúne el resto en «Other»:
top = s.value_counts().nlargest(5).index
grouped = s.where(s.isna() | s.isin(top), "Other")
La presencia de s.isna() mantiene las ausencias como valores faltantes. Sin ella, las entradas faltantes también pasarían a ser «Other», mezclando las respuestas ausentes con respuestas reales poco frecuentes. Indica cuántas etiquetas y observaciones se combinaron. Comprueba que una categoría poco frecuente importante para la pregunta no haya desaparecido dentro del grupo combinado.
Los gráficos de barras horizontales son adecuados para etiquetas largas. Por ejemplo, sns.countplot(data=df, y="city", order=df["city"].value_counts().index) ordena los recuentos de ciudades. Empieza el eje de recuentos en cero porque la longitud de las barras representa el número de observaciones. Un gráfico circular resulta difícil de comparar cuando contiene muchos sectores.
Convierte intervalos numéricos en categorías etiquetadas
bands = pd.cut(
df["minutes"], bins=[0, 30, 45, np.inf],
labels=["up to 30", "over 30 to 45", "over 45"],
include_lowest=True
)
Los intervalos predeterminados, cerrados por la derecha, sitúan 30 en la primera banda y 45 en la segunda. include_lowest=True también incluye 0 en la primera banda. Los valores fuera de estos intervalos pasan a ser faltantes en el resultado agrupado, así que comprueba las duraciones negativas antes de interpretar su recuento de valores faltantes. Registra los límites porque una etiqueta como «30–45» por sí sola no aclara cómo se trata el 30.
Para códigos nominales, asigna a 1 y 2 sus etiquetas de región antes de mostrarlos. Calcular la media de los códigos de región describiría su numeración arbitraria, no la distribución de las regiones.
Puntos clave
- Las tablas de frecuencias presentan recuentos o proporciones de categorías; indica el denominador.
- Mantén los valores ordinales en su orden natural, aunque las frecuencias difieran.
- Mantén separadas las respuestas faltantes al combinar etiquetas poco frecuentes en «Otros».
- Empieza en cero los ejes de recuentos de los gráficos de barras y haz legibles las etiquetas largas.
- Define límites explícitos para las bandas numéricas y comprueba sus extremos.
3.4 Marcas de valores atípicos y decisiones de tratamiento
Un valor atípico está lejos de la mayor parte de los datos según una regla y un contexto determinados. Puede ser un error de registro, un suceso real poco frecuente o un elemento de un grupo distinto. Una marca inicia una investigación.
Calcula los límites del IQR
La regla del IQR marca los valores inferiores o superiores a estos límites:
Para los tiempos de entrega 18, 22, 25, 25, 27, 29, 31, 34, 38, 41 y 95, Q1 es 25 y Q3 es 36. El IQR es 11, por lo que el límite inferior es 8,5 y el superior es 52,5. El pedido de 95 minutos queda marcado.
q1, q3 = s.quantile([0.25, 0.75])
iqr = q3 - q1
flag = (s < q1 - 1.5 * iqr) | (s > q3 + 1.5 * iqr)
Estos son los límites predeterminados que determinan los puntos atípicos de un diagrama de caja y bigotes. Un valor situado exactamente en un límite queda dentro de él. En una cola larga a la derecha, la regla puede marcar muchos valores altos reales.
Comprende el enmascaramiento y las puntuaciones robustas
Una puntuación z mide la distancia a la media en unidades de desviación estándar:
Una marca habitual es una puntuación z absoluta mayor que 3. Aquí la media es 35 y la desviación estándar muestral es aproximadamente 21,02, por lo que 95 da una puntuación z de aproximadamente 2,85. El valor extremo ha aumentado precisamente la medida central y la dispersión utilizadas para evaluarlo. Este efecto, llamado enmascaramiento, puede hacer que un valor inusual escape a la regla. La regla también se ajusta mejor a distribuciones aproximadamente simétricas que a distribuciones asimétricas.
La desviación absoluta mediana, o MAD, es la mediana de las distancias absolutas a la mediana. Utiliza cantidades resistentes. Una puntuación z modificada es:
Aquí la mediana es 29 y la MAD es 5. Para 95 minutos, la puntuación modificada es aproximadamente 8,90, por encima del umbral absoluto habitual de 3,5. Si la MAD es cero, esta división no está definida; inspecciona los valores repetidos y utiliza otra comprobación justificada en lugar de comunicar una puntuación infinita como resultado medido.
Investiga antes de cambiar los datos
Las reglas del dominio tienen prioridad. Una duración transcurrida negativa es un error según esta definición, independientemente de su puntuación estadística. Para un posible valor extremo, inspecciona toda la fila, sus marcas de tiempo, distancia, grupo y fuente. Una tormenta o una ruta larga pueden explicar una entrega lenta.
| Evidencia | Acción posible |
|---|---|
| La fuente establece el valor correcto | Corrígelo mediante código y registra el cambio |
| Se ha demostrado que un registro es erróneo y no se puede recuperar su valor | Elimínalo o márcalo como faltante y registra el efecto |
| El valor es real | Consérvalo; utiliza resúmenes resistentes o una escala útil |
| La conclusión depende mucho del valor | Compara los resultados con él y sin él |
Comparar los resultados con la observación y sin ella es un análisis de sensibilidad. Limitar los valores extremos a un percentil elegido, lo que se conoce como winsorización, es otra transformación deliberada; indica el límite y que los valores cambiaron. Inspecciona también las combinaciones inusuales: dos mediciones individualmente plausibles pueden formar un punto poco frecuente en un diagrama de dispersión.
Puntos clave
- Los límites del IQR marcan los valores fuera de Q1 − 1,5 IQR y Q3 + 1,5 IQR.
- Los valores extremos pueden aumentar la media y la desviación estándar y enmascararse en las puntuaciones z.
- Las puntuaciones z modificadas utilizan la mediana y la MAD; una MAD igual a cero requiere otro enfoque.
- Las reglas del dominio distinguen los valores imposibles de los extremos posibles.
- Investiga el registro completo y documenta cada tratamiento.
- Utiliza análisis de sensibilidad para mostrar cuándo los valores extremos cambian una conclusión.
- Busca combinaciones inusuales además de valores extremos de una sola variable.
4Explora relaciones entre variables
Dos variables pueden variar juntas en línea recta, a lo largo de una curva o solo porque se combinaron grupos distintos. Utiliza diagramas de dispersión para ver la forma, coeficientes de correlación para resumir aspectos específicos de la asociación y comprobaciones por subgrupos para investigar su origen. La interpretación requiere conocer la población, el tamaño de la muestra utilizable y el proceso de recopilación, además de la intensidad aparente del patrón.
4.1 Diagramas de dispersión que revelan la relación
Un diagrama de dispersión sitúa una observación en cada par de valores numéricos. Coloca una posible variable explicativa en el eje horizontal y la respuesta en el eje vertical. El gráfico te ayuda a ver la forma de una relación antes de resumirla en un coeficiente.
Describe cuatro características
Utiliza la dirección, la forma, la intensidad y los puntos inusuales. La dirección positiva significa que la respuesta tiende a aumentar cuando aumenta la variable horizontal; la negativa significa que tiende a disminuir. La forma puede ser recta, curva o estar dividida en agrupaciones. La intensidad describe hasta qué punto los puntos siguen esa forma, y puede ser fuerte incluso cuando la forma es curva.
Para temperaturas de 8, 12, 15, 18, 21, 24, 27 y 30 °C, los alquileres diarios de bicicletas son 310, 420, 515, 600, 690, 760, 800 y 780. La relación es fuerte y positiva en conjunto. Es casi lineal hasta aproximadamente 27 °C, después se estabiliza y desciende ligeramente. Describirla solo como «positiva» omite el cambio en el extremo de temperaturas más altas.
sns.scatterplot(data=df, x="temp_c", y="rentals")
Haz legibles los gráficos densos
Con muchas filas, los puntos se cubren entre sí: la superposición de puntos oculta dónde se concentran las observaciones. Los marcadores más pequeños y alpha=0.2 revelan parte de la densidad mediante transparencia. Un gráfico de intervalos hexagonales agrega las observaciones en hexágonos:
df.plot.hexbin(x="distance_km", y="minutes", gridsize=30)
Un sns.histplot bidimensional ofrece una vista similar con intervalos rectangulares. Una muestra aleatoria puede reducir la acumulación; fija su semilla para que las siguientes ejecuciones muestren el mismo subconjunto. Cuando un eje toma solo unos pocos valores, el desplazamiento aleatorio separa los puntos superpuestos para hacerlos visibles. Es un desplazamiento de visualización, no una mayor precisión de la medición.
Añade grupos y comprueba una línea ajustada
Utiliza hue="season" para el color o sns.relplot(..., col="season") para paneles separados. Una nube conjunta puede contener agrupaciones estacionales distintas. El tamaño de los marcadores puede representar otra cantidad cuando su significado siga siendo claro.
sns.regplot(data=df, x="temp_c", y="rentals") añade una recta de mínimos cuadrados y una banda sombreada de incertidumbre. Una línea ayuda a interpretar el gráfico, pero puede pasar por alto una curvatura. lowess=True dibuja una curva suave cuando está instalada la dependencia statsmodels. Inspecciona las observaciones antes de elegir cualquiera de las dos representaciones.
Para una selección pequeña de variables, una matriz de gráficos por pares dibuja sus diagramas de dispersión por pares y sus distribuciones individuales. Por ejemplo, utiliza la longitud del pico en mm, la longitud de la aleta en mm, la masa corporal en g y la especie como grupo de color. Entre tres y seis variables numéricas aproximadamente siguen siendo legibles; añadir muchas más crea una pared de paneles pequeños.
Investiga la acumulación y las tendencias temporales compartidas
Los ejes logarítmicos pueden separar valores positivos que abarcan razones grandes, como la población y el consumo total de energía. Mantén la escala visible en las etiquetas. Cuando un punto extremo determine un rango enorme para los ejes, inspecciónalo y añade una vista claramente etiquetada de la mayor parte de los datos para que el patrón restante sea visible.
Dos variables también pueden trazar un patrón porque ambas crecen con el tiempo. Colorea los puntos por fecha o representa cada serie frente al tiempo. Esa comprobación puede revelar si la relación aparente es principalmente una tendencia temporal compartida.
Puntos clave
- Describe la dirección, la forma, la intensidad y las observaciones inusuales.
- Utiliza transparencia, puntos más pequeños, agrupación en intervalos o muestras con semilla fija para revelar la densidad.
- Utiliza colores o paneles para investigar grupos dentro de un patrón conjunto.
- Inspecciona la curvatura antes de confiar en una recta ajustada.
- Comprueba las escalas, los puntos extremos y las tendencias temporales que pueden dominar la representación.
4.2 Qué mide un coeficiente de correlación
Un coeficiente de correlación resume un aspecto de la asociación. Elige el coeficiente según la relación que quieras describir e interprétalo junto con un gráfico y el número de observaciones utilizables.
Pearson mide una relación lineal
El coeficiente de Pearson es la suma de los productos de los valores centrados dividida por el producto de las longitudes centradas:
Su intervalo va de −1 a 1. El signo indica la dirección y la magnitud indica la intensidad lineal. Los valores positivos o negativos perfectos significan que todos los puntos utilizables están sobre una recta, con variación en ambas variables. El coeficiente no tiene unidad, no cambia al intercambiar los ejes y no cambia con una conversión positiva entre unidades de medida.
Un coeficiente cercano a cero indica poca asociación lineal. Para entradas −3, −2, −1, 0, 1, 2, 3 y salidas iguales a sus cuadrados, la correlación de Pearson es exactamente cero a pesar de una relación perfecta en forma de U. La correlación también es distinta de la pendiente: una recta poco inclinada puede tener una correlación alta.
Los métodos de rangos describen el orden
La correlación de Spearman calcula la correlación de Pearson sobre los rangos y describe la asociación monótona: los valores tienden a moverse de forma coherente hacia arriba o hacia abajo, incluso a lo largo de una curva. La tau de Kendall compara pares de observaciones concordantes, ordenados de la misma manera en ambas variables, con pares discordantes, ordenados de forma opuesta. Los métodos de rangos son menos sensibles a las magnitudes extremas que Pearson.
Para el ejemplo de temperatura y alquileres, Pearson es 0,974, Spearman 0,976 y Kendall 0,929. El diagrama de dispersión sigue mostrando la estabilización por encima de unos 27 °C. Un coeficiente alto puede coexistir con una curvatura importante.
Calcula una matriz con cuidado
cols = ["temp_c", "rentals", "distance_km"]
corr = df[cols].corr(method="spearman")
sns.heatmap(corr, annot=True, fmt=".2f",
vmin=-1, vmax=1, center=0, cmap="vlag")
Para un DataFrame mixto, df.corr(numeric_only=True) selecciona las columnas numéricas; excluye también los identificadores y códigos de categorías que no tengan una relación numérica significativa. Los valores faltantes se excluyen par por par, por lo que las celdas de la matriz pueden describir subconjuntos diferentes. Comprueba el recuento utilizable de cada par. La matriz es simétrica. La correlación de una variable consigo misma es 1 cuando está definida; una columna constante tiene correlación indefinida y su fila, columna y entrada diagonal aparecen como faltantes.
Comprueba la sensibilidad a la geometría de los datos
Para las entradas de 1 a 10 y las salidas 3, 1, 4, 2, 5, 3, 4, 2, 5, 3, Pearson es aproximadamente 0,307. Añadir el único punto (30, 30) lo eleva a 0,938; Spearman pasa a ser aproximadamente 0,462. Un punto puede dominar Pearson mientras que la mayor parte de los datos conserva un patrón débil.
El cuarteto de Anscombe hace visible la misma lección: cuatro conjuntos de datos comparten una media de entrada de 9, una media de salida de 7,50, una varianza de entrada de 11, una correlación cercana a 0,816 y la recta ajustada , pero sus gráficos muestran una nube, una curva y distintos puntos influyentes. Informa del valor y del recuento junto con cualquier etiqueta verbal de intensidad; los campos tienen convenciones distintas para etiquetas como «fuerte».
Puntos clave
- Pearson describe la asociación lineal, sin unidad y con valores entre −1 y 1.
- Una correlación de Pearson igual a cero puede ocultar una relación curva fuerte.
- Spearman y Kendall describen el orden y reducen la sensibilidad a magnitudes extremas.
- La exclusión de valores faltantes por pares puede dar muestras distintas a las celdas de la matriz.
- Una variable constante tiene una correlación indefinida.
- Los gráficos y los análisis de sensibilidad revelan características que coeficientes idénticos pueden ocultar.
4.3 Asociaciones, causas y comparaciones engañosas
Una asociación describe cómo aparecen juntas las variables en los datos observados. Su causa necesita una explicación separada. Entre los posibles orígenes están un efecto causal, la causalidad inversa, una tercera variable, la selección y el azar.
Pregunta qué podría explicar la relación
Una variable de confusión influye en ambas variables y crea o distorsiona su asociación. El calor aumenta las ventas de helados y los accidentes al nadar. Reducir las ventas de helados dejaría intacto el riesgo relacionado con el clima. Una variable mediadora es diferente: se encuentra en la cadena causal entre las variables.
La causalidad inversa invierte la dirección propuesta. Los clientes que visitan las páginas de ayuda con más frecuencia pueden tener más pedidos fallidos porque los fallos los llevan a esas páginas. La relación observada no da motivos para esperar menos fallos después de ocultar las páginas de ayuda.
Separa los patrones de los subgrupos del resultado conjunto
La paradoja de Simpson ocurre cuando la comparación conjunta invierte la dirección observada en cada subgrupo. Los datos sobre tratamientos de cálculos renales de un estudio de 1986 ilustran el cálculo:
| Grupo | Tratamiento A | Tratamiento B |
|---|---|---|
| Cálculos pequeños | 81/87 = 93,1 % | 234/270 = 86,7 % |
| Cálculos grandes | 192/263 = 73,0 % | 55/80 = 68,8 % |
| Combinados | 273/350 = 78,0 % | 289/350 = 82,6 % |
A tiene la mayor proporción de éxito en ambos grupos de tamaño de cálculo. B tiene la mayor proporción conjunta porque A se utilizó sobre todo en los casos más difíciles de cálculos grandes. Las tasas conjuntas ponderan las tasas de los subgrupos según sus recuentos. Inspecciona la composición y compara subgrupos relevantes antes de interpretar un resultado combinado.
Comprueba el tiempo, la selección y la agregación
Dos series no relacionadas pueden aumentar con los años y parecer muy correlacionadas. Represéntalas a lo largo del tiempo e inspecciona los cambios de un período a otro o las relaciones dentro de cada período. La relación entre los niveles puede reflejar principalmente su tendencia temporal común.
Un intervalo seleccionado también cambia lo que es visible. Entre estudiantes seleccionados por sus puntuaciones altas de acceso, el intervalo de puntuaciones es estrecho y la correlación entre puntuación y calificaciones puede ser mucho más débil que entre todas las personas aspirantes. Describe la población seleccionada; su coeficiente responde a una pregunta distinta de la del coeficiente para todas las personas aspirantes.
Una correlación entre medias de ciudades corresponde a las ciudades. Aplicarla a sus habitantes individuales es la falacia ecológica. La agregación puede fortalecer, debilitar o invertir una asociación porque el patrón dentro de los grupos y la composición entre ellos no tienen por qué coincidir.
Trata una búsqueda amplia como fuente de hipótesis
Con 20 variables numéricas hay 190 pares distintos. Examinar esos pares y muchos segmentos da numerosas oportunidades para que aparezcan patrones por azar. Indica la amplitud de la exploración e identifica después un patrón sorprendente como una hipótesis para datos nuevos o para un análisis confirmatorio planificado.
Utiliza una formulación ligada a las observaciones: «Los pedidos realizados bajo la lluvia se asociaron con tiempos de entrega más largos durante este período». Esa afirmación registra una relación. Afirmar que la lluvia causó la diferencia también requeriría evidencia que descartara explicaciones alternativas, como una composición distinta de rutas u horarios.
Puntos clave
- Considera la causalidad inversa, la confusión, la selección y el azar al explicar una asociación.
- Las variables de confusión influyen en ambas variables; las mediadoras se sitúan en una cadena causal.
- Las comparaciones conjuntas pueden invertir las comparaciones de subgrupos cuando la composición de los grupos difiere.
- Las tendencias temporales, los intervalos seleccionados y la agregación cambian la asociación que se mide.
- Las relaciones a nivel de grupo necesitan interpretaciones a nivel de grupo.
- Utiliza los patrones exploratorios para formular hipótesis e informa de la amplitud de la búsqueda.
5Compara segmentos de los datos
Un resumen conjunto puede ocultar diferencias entre ciudades, canales o períodos. Compara las distribuciones de los grupos, las proporciones de categorías y las tasas de eventos con sus denominadores y tamaños de muestra visibles. Después comprueba si la composición de los grupos, los resultados faltantes o una cobertura temporal desigual explican la diferencia aparente. Una comparación útil adapta la medida a la pregunta y deja clara la base de cada cifra.
5.1 Compara medidas centrales, dispersiones y colas entre grupos
Un segmento es un subconjunto definido por una categoría, una banda numérica o un período. Una comparación útil muestra cómo difiere la distribución completa y deja visible la cantidad de evidencia que respalda cada resumen.
Muestra los tamaños de los grupos junto a los resúmenes
by_city = df.groupby("city")["minutes"].agg(
["count", "mean", "median", "std"]
)
El recuento aquí es el número de duraciones registradas. Si faltan algunas duraciones, informa también del número de pedidos y de la proporción de valores faltantes para que la base de la tabla sea clara. Las agregaciones con nombres de salida pueden dar etiquetas útiles a las columnas, como orders=("order_id", "count") y median_min=("minutes", "median").
Considera estos tiempos de entrega:
| Ciudad | Tiempos en minutos | Media | Mediana | Desviación estándar muestral |
|---|---|---|---|---|
| Lyon | 24, 30, 27, 33, 29, 31 | 29,0 | 29,5 | 3,2 |
| Porto | 22, 25, 21, 40, 24 | 26,4 | 24,0 | 7,8 |
| Tartu | 19, 55 | 37,0 | 37,0 | 25,5 |
Tartu tiene la media más alta, pero solo dos observaciones. Una entrega larga domina su resultado. Los grupos pequeños suelen aparecer en ambos extremos de una clasificación porque sus resúmenes varían más con cada observación. Establece un recuento mínimo antes de clasificar y mantén visibles los grupos pequeños como evidencia incompleta.
Elige una representación para la distribución
Un diagrama de caja y bigotes en un eje numérico compartido compara medianas, mitades centrales y extremos marcados. Un diagrama de violín añade una estimación de la forma. Con grupos pequeños, los diagramas de puntos por categorías o de enjambre muestran cada observación y facilitan ver el tamaño de la muestra.
Para histogramas, utiliza paneles con los mismos ejes o gráficos superpuestos normalizados como stat="density", common_norm=False. Los gráficos de recuentos superpuestos muestran principalmente qué grupo contiene más registros. Una superposición de densidades permite comparar la forma de cada grupo sobre la misma base.
Dos grupos con la misma media pueden tener colas muy distintas. Una ciudad con entregas mayormente rápidas y unas pocas muy largas puede tener la misma media que una ciudad con tiempos moderados y constantes. Compara la dispersión, los percentiles y la proporción respecto a un umbral relevante junto con la medida central.
Indica el valor de referencia de una diferencia
La diferencia de medias entre Tartu y Lyon en esta muestra es de 8 minutos. Con respecto a Lyon, es aproximadamente el 27,6 %:
El valor de referencia son los 29 minutos de Lyon. Invertir la referencia cambia el porcentaje relativo, aunque la diferencia absoluta siga siendo de 8 minutos. Indica los recuentos limitados de los grupos junto con este cálculo descriptivo; la aritmética por sí sola no puede establecer una diferencia estable entre ciudades.
Comprueba la composición dentro de los grupos
df.groupby(["city", "vehicle"])["minutes"].median().unstack()
Esta tabla de ciudades por vehículos puede revelar si una diferencia entre ciudades procede de la composición de vehículos. Una tabla dinámica con la misma agrupación y mediana da la misma comparación. Inspecciona también los recuentos de estas celdas más pequeñas: dividir un grupo puede reducir la evidencia disponible incluso cuando aclara el patrón.
Puntos clave
- Informa de los recuentos de los grupos junto con las medidas de tendencia central y dispersión, incluida la base de cada recuento.
- Utiliza escalas compartidas y normalización dentro de cada grupo para comparar distribuciones.
- Inspecciona las colas y las proporciones respecto a umbrales, además de las medidas centrales.
- Indica el valor de referencia al comunicar una diferencia relativa.
- Comprueba la composición de los subgrupos y los recuentos de las celdas pequeñas antes de clasificar los grupos.
5.2 Proporciones, tasas y el denominador adecuado
Los recuentos responden cuántos eventos ocurrieron. Las tasas responden con qué frecuencia ocurrieron en relación con las oportunidades de que ocurrieran. Cuando los grupos difieren en tamaño, la elección del denominador puede cambiar la comparación aparente.
Lee una tabla de contingencia en la dirección prevista
Una tabla de contingencia cuenta combinaciones de dos categorías:
pd.crosstab(df["region"], df["channel"], margins=True)
Norte tiene 30 pedidos por aplicación y 20 por web; Sur tiene 60 pedidos por aplicación y 90 por web. Sur tiene más pedidos por aplicación, pero su mayor total de pedidos cambia la comparación de proporciones.
| Pregunta | Denominador | Resultado |
|---|---|---|
| Dentro de Norte, ¿qué proporción utiliza la aplicación? | Los 50 pedidos de Norte | 60 % |
| Dentro de Sur, ¿qué proporción utiliza la aplicación? | Los 150 pedidos de Sur | 40 % |
| De todos los pedidos por aplicación, ¿qué proporción procede de Norte? | Los 90 pedidos por aplicación | 33,3 % |
normalize="index" divide por los totales de las filas; normalize="columns" divide por los totales de las columnas. normalize="all" utiliza el total general. Lee la pregunta en voz alta antes de elegir la normalización. Cada fila normalizada por fila suma 1, al igual que cada columna normalizada por columna.
Conserva los resultados desconocidos
Una media de valores booleanos da la proporción de valores True. Para un indicador de entrega tardía, los tiempos faltantes necesitan un tratamiento especial:
df["late"] = df["minutes"].astype("Float64") > 45
rates = df.groupby("city")["late"].mean()
known = df.groupby("city")["late"].count()
El tipo Float64, que admite valores faltantes, conserva los tiempos faltantes como indicadores faltantes. La media agrupada estima entonces la proporción de entregas tardías entre los tiempos registrados. Con datos ordinarios de coma flotante, NaN > 45 es False, lo que contaría los tiempos desconocidos como entregas puntuales y reduciría la tasa. Indica el denominador de resultados conocidos e informa de los valores faltantes junto a la tasa.
Distingue dos tipos de variación porcentual
Una tasa de retraso que sube del 4 % al 5 % aumenta 1 punto porcentual. El aumento relativo utiliza la tasa original como referencia:
Escribe «aumentó 1 punto porcentual, un aumento relativo del 25 %». La frase aislada «aumentó un 1 %» deja el significado poco claro. Para una tasa basada en una celda pequeña, muestra también su recuento: 1 pedido tardío de 2 produce un 50 %, pero un solo pedido puntual adicional lo cambia a un tercio.
Compara las proporciones de resultados con el tamaño del grupo
Si Norte aporta el 25 % de todos los pedidos pero el 40 % de las quejas, está sobrerrepresentada entre las quejas. Eso compara su proporción de quejas con su proporción de pedidos. Es una pregunta distinta de la tasa de quejas dentro de Norte, que requiere dividir el recuento de quejas de Norte por sus pedidos.
Utiliza barras agrupadas, barras apiladas al 100 % o un mapa de calor etiquetado para mostrar proporciones. Una tabla de regiones por canales normalizada por filas y representada con barras apiladas compara la composición de canales dentro de las regiones. Incluye el denominador en el título o en la etiqueta del eje para que quienes lean puedan distinguir esa composición de la composición regional de cada canal.
Puntos clave
- Las proporciones por fila, por columna y respecto al total general responden a preguntas distintas.
- Compara las tasas de eventos utilizando las oportunidades del mismo segmento.
- Mantén como faltantes los resultados desconocidos al crear indicadores booleanos de tasas.
- Las diferencias en puntos porcentuales se obtienen restando tasas; las variaciones relativas se dividen por la tasa de referencia.
- Muestra los recuentos junto a las tasas, especialmente en celdas pequeñas.
- Compara la proporción de resultados de un grupo con su proporción en el conjunto para evaluar su sobrerrepresentación.
5.3 Comparaciones temporales con períodos comparables
Los totales por período dependen tanto de la actividad como del tiempo cubierto. Antes de describir un aumento o descenso, comprueba los límites de los períodos, las fechas faltantes y el patrón estacional habitual. Compara los segmentos con una medida adecuada a su tamaño.
Agrega por período del calendario
Con las marcas de tiempo de los pedidos ya interpretadas, los recuentos mensuales pueden crearse así:
monthly = (
df.set_index("order_date")
.resample("MS")["order_id"].count()
)
"MS" etiqueta cada mes natural con su primer día. Utiliza "ME" para etiquetas de fin de mes en las versiones actuales de pandas. Para una tabla mensual por ciudad, combina pd.Grouper(key="order_date", freq="MS") con la agrupación por ciudad y utiliza .size().unstack(). El método cuenta filas, así que establece primero que una fila representa un pedido.
Comprueba el tiempo observado antes de comparar totales
Supón que hay 100 pedidos diarios del 1 de agosto al 12 de octubre. Los totales mensuales son 3100 en agosto, 3000 en septiembre y 1200 en la parte registrada de octubre. El total de octubre parece mucho menor, pero cada día observado tiene la misma actividad.
Divide cada total por sus días observados: 31, 30 y 12. Las tres medias diarias son 100. Compara esas tasas u omite los períodos incompletos. El denominador debe representar la cobertura real: un día sin registro no puede tratarse con seguridad como un día de actividad cero.
Incluso los meses completos tienen duraciones distintas. También pueden contener distintos números de días de la semana con mucha actividad. Si la actividad de los sábados es alta, compara los mismos días de la semana o tasas que tengan en cuenta su composición antes de interpretar una diferencia mensual.
Separa un ciclo de un cambio duradero
La estacionalidad es un patrón recurrente, como un ciclo semanal o anual. daily.rolling(7).mean() suaviza una ventana de siete días en una serie diaria con intervalos regulares. Hace menos visible el ciclo semanal mientras conserva los cambios más lentos. Compara diciembre con el diciembre anterior cuando la pregunta trate sobre la variación interanual de una actividad estacional.
Unos pocos días inusualmente altos pueden parecer una tendencia en una ventana corta. Muestra suficiente historial para comprender el intervalo normal de variación y conserva los valores sin suavizar cuando ayuden a explicar un evento importante.
Comprueba las ausencias y compara las trayectorias de los segmentos
Un recuento remuestreado de cero puede significar que no hubo eventos registrados o que se interrumpió la recopilación. Un cambio repentino de nivel puede reflejar una nueva versión de la aplicación o una definición modificada. Confirma la cobertura y el historial de recopilación con la fuente de datos antes de tratar esos puntos como cambios de comportamiento.
Representa cada segmento como una línea en ejes compartidos, con unidades y un color coherente por grupo. Los grupos grandes pueden dominar los gráficos de recuentos. Las proporciones, las tasas o un índice respecto al valor inicial de cada grupo pueden hacer visibles los cambios de los grupos más pequeños; indica qué medida se muestra.
Una cohorte agrupa a los clientes según cuándo comenzaron. Seguir a quienes empezaron en marzo y a quienes empezaron en abril según el tiempo transcurrido desde su primer pedido puede separar los cambios en las trayectorias de los clientes de los cambios en la composición general de la clientela.
Puntos clave
- Comprueba la cobertura completa y utiliza los alias actuales de períodos del calendario.
- Compara los totales teniendo en cuenta la duración del período y la composición de los días de la semana.
- Utiliza el tiempo observado para calcular tasas e investiga las ausencias antes de tratarlas como ceros.
- Compara períodos estacionales y examina suficiente historial para interpretar los cambios.
- Utiliza tasas por segmento o trayectorias expresadas como índices cuando los tamaños de los grupos difieran.
- Las cohortes separan el tiempo transcurrido desde el inicio de los cambios en la composición general de la clientela.
6Comunica los hallazgos exploratorios de forma reproducible
La exploración resulta útil para otras personas cuando sus hallazgos responden a preguntas claras y su evidencia puede comprobarse. Selecciona los gráficos y las cifras que explican los resultados, distingue las observaciones de las causas y acciones propuestas e indica los límites que afectan a la interpretación. Prepara un cuaderno limpio, exportaciones actualizadas y suficiente información de procedencia para que una persona autorizada pueda repetir el trabajo.
6.1 Hallazgos que responden a la pregunta
Un hallazgo útil conecta una pregunta con evidencia. Indica la magnitud de un patrón, la población y el período que describe, y las limitaciones que afectan a su interpretación. Organiza el informe en torno a las preguntas en lugar del orden en que se crearon los gráficos.
Fundamenta un hallazgo con evidencia
Por ejemplo: «De enero a septiembre de 2026, la mediana del tiempo de entrega fue de 29 minutos; el 8 % de los 48 200 pedidos tardó más de 45 minutos. La proporción de entregas tardías fue mayor las tardes y noches de viernes y sábado: 14 %, frente al 6 % en las demás tardes y noches».
Esta afirmación indica el período, la medida central, el umbral, el denominador y la comparación. Utiliza una precisión suficiente para la decisión. «29 minutos» es más fácil de utilizar que «29,4545 minutos» cuando los dígitos adicionales no aportan información práctica. Para una duración asimétrica, una mediana y un percentil superior suelen explicar la experiencia mejor que una media por sí sola.
Separa lo que ocurrió, por qué y qué hacer
| Tipo de afirmación | Ejemplo | Función |
|---|---|---|
| Observación | «Las entregas tardías fueron más frecuentes en tardes y noches lluviosas». | Describe una asociación observada |
| Interpretación | «La lluvia retrasa a los repartidores». | Propone una explicación causal |
| Recomendación | «Programa repartidores adicionales en tardes y noches lluviosas». | Propone una acción basada en esa explicación |
Una recomendación depende de supuestos sobre la causa y el efecto de la acción. Mantén esos supuestos visibles e indica qué evidencia adicional se necesita. Una observación puede ser útil aunque su explicación siga siendo una hipótesis.
Haz que un gráfico explique un hallazgo
Selecciona los pocos gráficos que responden a las preguntas y las sorpresas importantes. Conserva otras vistas exploratorias útiles en un apéndice o cuaderno. Da a cada gráfico del informe un título que exprese su hallazgo, como «Las entregas tardías alcanzan su máximo las tardes y noches de viernes y sábado». Etiqueta los ejes con unidades, ordena las categorías cuando sea apropiado y mantén el color de cada segmento coherente entre gráficos. Incluye la fuente y el período de los datos.
Comunica también la evidencia contradictoria. Si un gráfico conjunto sugiere una mejora pero un segmento grande empeoró, el resultado del segmento importa para la interpretación. Seleccionar solo los gráficos que respaldan una explicación esperada ocultaría información que quien lee necesita.
Organiza un informe compacto
Un orden claro es: pregunta y contexto; fuente de los datos, período, recuento y significado de las filas; problemas de calidad y decisiones de limpieza; de tres a cinco hallazgos principales con evidencia; limitaciones; siguientes pasos. Cada hallazgo debe responder a una pregunta o explicar una sorpresa importante.
Las limitaciones identifican qué cubren los datos, qué se excluyó y por qué, cuánto falta y el carácter asociativo de los patrones. Por ejemplo, indica que se eliminaron 37 pedidos cancelados de una comparación de entregas completadas. Los siguientes pasos pueden incluir comprobar una hipótesis con datos nuevos, recopilar una variable faltante, corregir un problema del sistema de origen o investigar una pregunta para un modelado posterior.
Puntos clave
- Aporta evidencia, magnitud, población y período para cada hallazgo.
- Separa las observaciones, las interpretaciones y las recomendaciones.
- Selecciona y etiqueta gráficos en torno a los hallazgos, manteniendo visible la evidencia contradictoria.
- Informa con una precisión útil e indica los denominadores, las ausencias y las exclusiones.
- Termina con preguntas o acciones concretas para los siguientes pasos, respaldadas por el análisis.
6.2 Comparte resultados que otras personas puedan volver a ejecutar
Un análisis compartido necesita resultados legibles y una vía para volver al código y a las entradas que los produjeron. Prepara un cuaderno final cuyo orden, resultados y archivos complementarios concuerden.
Limpia y ejecuta el cuaderno final
Elimina las celdas sin uso y duplicadas, mantén las dependencias en orden de ejecución y añade texto Markdown que explique las decisiones entre secciones de código. Conserva el trabajo más experimental por separado cuando sea útil. Reinicia el núcleo y ejecuta todas las celdas antes de cada exportación. Inspecciona tanto los errores como los resultados modificados: una ejecución correcta también puede revelar que una cifra escrita anteriormente está desactualizada.
Genera las cifras comunicadas mediante código:
s = df["minutes"]
print(f"Median delivery time: {s.median():.0f} minutes")
Una cifra escrita en un párrafo puede permanecer sin cambios después de actualizar los datos. Mantén la afirmación mostrada vinculada al cálculo para que la siguiente ejecución la actualice.
Exporta informes, figuras y tablas
Una exportación HTML se puede leer en un navegador sin un entorno de Python:
jupyter nbconvert --to html --execute report.ipynb
La opción de ejecución ejecuta el cuaderno antes de la conversión. Comprueba tanto el informe resultante como el cuaderno. Las herramientas de publicación como Quarto ofrecen otra forma de obtener un informe legible.
Guarda figuras y tablas mediante código para que las siguientes ejecuciones actualicen los archivos:
fig.savefig("figures/late_by_hour.png", dpi=200,
bbox_inches="tight")
summary.to_csv("output/city_summary.csv")
Crea las carpetas de destino como parte de la configuración del proyecto. Una captura de pantalla conserva el resultado de un momento, pero no mantiene un vínculo automático con el siguiente cálculo.
Incluye la procedencia y las instrucciones de ejecución
Registra la fuente de los datos, la fecha de extracción, el archivo o la versión de entrada, el recuento de filas, los filtros, las versiones del software y las semillas aleatorias. Estos detalles explican qué entrada y configuración produjeron un hallazgo. Reúne las opciones que cambian cerca del principio del cuaderno para que una actualización mensual tenga un punto de entrada claro.
Un proyecto puede separar los datos en bruto y procesados, los cuadernos, las figuras y las tablas exportadas. Incluye un README que indique el propósito, el directorio de trabajo previsto y los pasos de ejecución, además de un archivo de entorno de paquetes. Mantén juntos el cuaderno, las instrucciones y el entorno al compartir el análisis que se puede volver a ejecutar. Si las entradas requieren acceso controlado, indica cómo obtiene una persona autorizada la versión correspondiente de los datos.
Comprueba qué revelan los resultados
Antes de compartir, inspecciona cada celda de resultados y cada exportación en busca de información personal. Las tablas de vista previa pueden exponer nombres, direcciones de correo electrónico y ubicaciones exactas aunque el gráfico final esté agregado. Elimina, enmascara o agrega las columnas identificadoras según corresponda y sigue los acuerdos y las normas de protección de datos aplicables al conjunto de datos.
Puntos clave
- Limpia el cuaderno final y comprueba una ejecución completa tras reiniciar el núcleo.
- Calcula las cifras comunicadas mediante código y guarda las figuras y tablas mediante código.
- Ejecuta el cuaderno antes de exportarlo para que el informe contenga resultados actuales.
- Incluye la procedencia de los datos, la configuración, el entorno y unas instrucciones claras de ejecución.
- Inspecciona todos los resultados compartidos en busca de información personal.
Ejemplos de Análisis exploratorio de datos en Python
1Convierte una solicitud amplia en un análisis que se pueda volver a ejecutar
12 pasos
- 1IntroducciónDa al análisis un punto de partida claro
Un equipo pregunta: «¿Qué fiabilidad tiene nuestro servicio de reparación?». Tienes una tabla de tareas de reparación y un cuaderno. Antes de crear un gráfico, decide qué necesita saber el equipo y qué puede decirte cada fila. Convertirás la solicitud en preguntas concretas, identificarás el nivel de detalle y organizarás el trabajo para que una nueva sesión del cuaderno pueda repetirlo.
- 2ExplicaciónPlantea preguntas que sugieran una comparación
Empieza con la decisión: quizá el equipo necesite identificar dónde se producen esperas largas. Algunas preguntas útiles son «¿Cuál es el tiempo de reparación habitual?», «¿Qué proporción supera nuestro umbral de servicio?» y «¿Cómo difieren los tiempos según el modelo de dispositivo?». Cada una identifica una cantidad o una comparación. Deja espacio para nuevas preguntas cuando un gráfico revele un grupo inesperado o un problema de calidad.
- 3EjemploEstablece qué representan las filas
El archivo contiene 900 filas de tareas y 300 identificadores de trabajos distintos. Un trabajo puede incluir varias tareas. La razón es de 3 tareas por trabajo en promedio, pero cada trabajo puede tener un número distinto de tareas. Contar filas responde a una pregunta sobre tareas. Una pregunta sobre el número de trabajos necesita identificadores de trabajo distintos o una tabla a nivel de trabajo, con una regla justificada para combinar la información de las tareas.
- 4DesafíoElige el recuento que corresponda a la pregunta
El equipo quiere conocer la proporción de trabajos con retraso. La tabla tiene varias filas de tareas por trabajo. ¿Respondería a esa pregunta calcular la media de un indicador de retraso a nivel de tarea?
---reveal---
Da la proporción de tareas retrasadas y asigna más peso a los trabajos con varias tareas. Primero define cuándo se considera que un trabajo está retrasado, combina la información de las tareas a nivel de trabajo y divide los trabajos retrasados por los trabajos considerados.
- 5ConexiónVuelve a las comprobaciones de calidad cuando un patrón te sorprenda
La exploración sigue un ciclo: preguntas, carga, caracterización, distribuciones, relaciones, comparaciones y hallazgos. Supón que un modelo de dispositivo parece tardar 1000 veces más. Vuelve a las definiciones de las columnas y a las unidades de origen antes de explicar una diferencia de rendimiento. La sorpresa ha generado una pregunta de calidad que puede cambiar el siguiente paso del análisis.
- 6Idea claveSepara el descubrimiento de una comprobación planificada
Un patrón encontrado después de examinar muchos gráficos es una pista para trabajos posteriores. El análisis confirmatorio comprueba una hipótesis formulada de antemano, idealmente con observaciones nuevas. Comprueba también quiénes están representados: las valoraciones de clientes que dieron su opinión voluntariamente describen a esas personas. El proceso de recopilación determina qué evidencia se necesita para extender el hallazgo a todas las personas atendidas.
- 7ExplicaciónComprueba qué recuerda el núcleo
El núcleo de un cuaderno conserva las variables entre ejecuciones de celdas. Si creas una tabla filtrada, eliminas la celda que la define y sigues representándola, la sesión actual puede seguir funcionando. Un núcleo nuevo no tiene forma de volver a crear esa tabla. Los contadores de ejecución revelan el orden de ejecución, pero la comprobación decisiva es reiniciar y después ejecutar todas las celdas de principio a fin.
- 8EjemploHaz visibles las dependencias
Organiza el cuaderno con el propósito y las preguntas, las importaciones, la configuración y después las secciones de análisis. Coloca las rutas, los umbrales y las semillas que cambian en la celda de configuración. Utiliza una ruta relativa del proyecto como
Path("data/raw/repairs.csv")y documenta el directorio de trabajo. Mantén los archivos en bruto sin cambios y expresa las correcciones mediante código para que el siguiente conjunto de datos siga el mismo procedimiento. - 9ConsejoControla las partes que varían entre ejecuciones
Registra las versiones de los paquetes y guarda un archivo de entorno. Fija la semilla de cada paso aleatorio; para una tabla con al menos 200 filas,
df.sample(n=200, random_state=17)repite la muestra con las mismas entradas y el mismo software. Una semilla fija no puede recuperar un archivo de entrada sobrescrito, así que registra también la versión de los datos y los detalles de la extracción. - 10DesafíoEncuentra una dependencia invisible
Una celda de resumen se ejecuta correctamente ahora. Después de reiniciar y ejecutar todas las celdas, falla porque
job_totalsno está definido. ¿Qué te indica esto y qué debes corregir?---reveal---
El núcleo anterior conservaba una variable que la secuencia visible no crea. Restablece o mueve el código que la define antes del resumen y después vuelve a ejecutar todo el cuaderno. Guardar el resultado anterior conservaría el resultado sin corregir su dependencia.
- 11DesafíoComprueba un archivo nuevo antes de responder a la misma pregunta
Llega el archivo del mes siguiente. Tu pregunta cuenta trabajos y se espera que la tabla preparada a nivel de trabajo tenga identificadores de trabajo únicos. ¿Cómo puedes combinar la comprobación del significado de las filas con una nueva ejecución fiable?
---reveal---
Carga la nueva versión mediante la celda de configuración y comprueba con una aserción que la clave de trabajo preparada sea única. Reinicia y ejecuta todas las celdas. Una comprobación fallida revela un problema de entrada o de preparación antes de que los trabajos repetidos distorsionen la proporción comunicada.
- 12RepasoMantén juntas la pregunta y el cálculo
Ahora tienes una pregunta vinculada a una decisión, un significado de fila que determina los recuentos y un cuaderno con dependencias visibles. Utiliza los mismos hábitos para la primera caracterización: registra la versión de entrada, inspecciona su estructura y deja que las comprobaciones detengan la ejecución cuando no se cumplan los supuestos. Cuando aparezca un patrón nuevo, decide si necesita otra comprobación de calidad, una nueva comparación o una hipótesis para investigar después.
2Inspecciona un archivo nuevo antes de confiar en sus patrones
13 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónCaracteriza los datos con evidencia
- 2ExplicaciónInspecciona más allá de las primeras filas
- 3EjemploElige los tipos de análisis según el significado de las columnas
- 4DesafíoComprueba qué se perdió en una conversión
- 5ExplicaciónCuantifica las ausencias antes de elegir un tratamiento
- 6EjemploObserva cómo la eliminación cambia la composición
- 7Idea claveAjusta la afirmación sobre ausencias a la evidencia
- 8DesafíoInterpreta los recuentos de duplicados
- 9EjemploSepara los valores faltantes de los valores registrados inválidos
- 10ExplicaciónComprueba la concordancia entre campos
- 11DesafíoElige una acción justificada
- 12DesafíoRelaciona la caracterización con la siguiente comparación
- 13RepasoConserva la caracterización junto a los hallazgos
3Construye una imagen completa de cada variable
17 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónMira más allá de una sola media
- 2ExplicaciónCompara la tendencia central y la dispersión
- 3EjemploCalcula las medidas centrales
- 4EjemploAñade una medida de la dispersión central
- 5DesafíoPredice el efecto de un valor extremo
- 6ExplicaciónUtiliza intervalos para revelar la estructura
- 7EjemploInterpreta qué responde un gráfico acumulado
- 8DesafíoInvestiga un segundo pico sospechoso
- 9ConsejoInterpreta con cuidado las curvas suaves y las escalas
- 10EjemploResume categorías con una base clara
- 11ExplicaciónMantén «Otros» separado de los valores faltantes
- 12DesafíoComprueba el límite de un intervalo
- 13EjemploCalcula los límites para detectar valores atípicos
- 14Idea claveObserva cómo un valor puede enmascararse
- 15DesafíoDecide un tratamiento a partir de la evidencia
- 16DesafíoCombina la información en un hallazgo
- 17RepasoElige una representación para la pregunta
4Interpreta una asociación antes de explicarla
15 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónMantén las observaciones a la vista
- 2EjemploDescribe más que la dirección
- 3ConsejoRevela la densidad y los grupos
- 4DesafíoElige un ajuste del gráfico con un propósito
- 5ExplicaciónIdentifica qué mide Pearson
- 6EjemploUtiliza un ejemplo curvo para comprobar su significado
- 7ExplicaciónUtiliza rangos para un orden coherente
- 8DesafíoInvestiga un coeficiente dominado por un punto
- 9ConsejoInterpreta la muestra detrás de una celda de un mapa de calor
- 10ExplicaciónEnumera direcciones plausibles y causas comunes
- 11EjemploCompara dentro de grupos de dificultad
- 12EjemploObserva la inversión en el resultado conjunto
- 13DesafíoElige el nivel de interpretación
- 14DesafíoElige evidencia adicional para un resultado sorprendente
- 15RepasoComunica el patrón y la pregunta pendiente
5Compara grupos sobre la misma base
15 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónHaz visible la base de la comparación
- 2EjemploIncluye suficiente información para evaluar una media
- 3EjemploExpresa una diferencia con su referencia
- 4DesafíoBusca una diferencia oculta en las distribuciones
- 5EjemploElige la dirección de un porcentaje
- 6ConsejoMantén los resultados faltantes fuera del grupo False
- 7DesafíoDistingue la diferencia de la variación relativa
- 8DesafíoComprueba si los recuentos responden a la pregunta sobre tasas
- 9ExplicaciónAgrega el período que quieres comparar
- 10EjemploCalcula la actividad ajustada al tiempo observado
- 11ConexiónSepara un ciclo recurrente de un cambio
- 12DesafíoInvestiga un cero antes de interpretarlo
- 13Idea claveAlinea las trayectorias de los clientes
- 14DesafíoCombina las comprobaciones de tasas y cobertura
- 15RepasoVincula cada comparación a su denominador
6Convierte la exploración en un informe comprobable
11 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónAyuda a quien lee a evaluar el resultado
- 2EjemploRedacta un hallazgo con magnitud y alcance
- 3ExplicaciónSepara los niveles de una afirmación
- 4ConsejoSelecciona gráficos en torno a la pregunta
- 5DesafíoCorrige un hallazgo demasiado amplio
- 6ExplicaciónHaz que la ejecución final sea la fuente del informe
- 7EjemploExporta los archivos actualizados
- 8ExplicaciónRegistra lo que deberá coincidir para una persona analista en el futuro
- 9DesafíoComprueba todo lo que se va a compartir
- 10DesafíoResuelve un resultado modificado antes de publicar
- 11RepasoEntrega la evidencia con una vía para rastrearla
Ejercicios de Análisis exploratorio de datos en Python
Set 1: Empieza con datos fiables10 Preguntas de Práctica
Pregunta 1 de 10
len(df)?Mostrar respuestaOcultar respuesta
Pregunta 2 de 10
Mostrar respuestaOcultar respuesta
Pregunta 3 de 10
Mostrar respuestaOcultar respuesta
Pregunta 4 de 10
clean correctamente, pero al reiniciar y ejecutar todas las celdas aparece NameError en esa celda. ¿Qué debes investigar primero?Mostrar respuestaOcultar respuesta
Pregunta 5 de 10
pd.to_numeric(s, errors="coerce"), ¿qué necesita investigación?Mostrar respuestaOcultar respuesta
Pregunta 6 de 10
s.duplicated(keep=False).sum()?Mostrar respuestaOcultar respuesta
keep=False incluye esas primeras copias para que puedas inspeccionar todos los conflictos.Pregunta 7 de 10
Mostrar respuestaOcultar respuesta
between devuelve False para ellas, lo que mezcla dos problemas de calidad distintos.Pregunta 8 de 10
Mostrar respuestaOcultar respuesta
Pregunta 9 de 10
Mostrar respuestaOcultar respuesta
Pregunta 10 de 10
Mostrar respuestaOcultar respuesta
Set 2: Interpreta distribuciones e investiga valores extremos10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
value_counts(normalize=True)?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
bins=[0, 20, 50, np.inf], include_lowest=True y el cierre de intervalos predeterminado. ¿Dónde se sitúan 0, 20 y 50?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 3: Interpreta relaciones y diferencias entre grupos10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
min_periods=400. ¿Puede su celda x–y contener válidamente 0,82?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 4: Elige denominadores y períodos comparables10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 5: Formula y comparte hallazgos fundamentados10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
¿Te atascas con una pregunta tuya? Ayuda con Tareas
Términos Clave
A
Acumulación en valores redondos o preferidos
Análisis confirmatorio
Análisis de sensibilidad
Análisis exploratorio de datos
Archivo de entorno
Aserción
Asimetría
Asociación monótona
Ausencia de datos
C
Cardinalidad
Categoría «Otros»
Causalidad inversa
Clave
Cohorte
Consistencia
Correlación de Pearson
Correlación de Spearman
Cuaderno interactivo
D
Datos faltantes al azar (MAR)
Datos faltantes completamente al azar (MCAR)
Datos faltantes no al azar (MNAR)
Desplazamiento aleatorio de puntos
Desviación absoluta mediana (MAD)
Desviación estándar (desviación típica)
Diagrama de dispersión
Diccionario de datos
Diferencia relativa
E
Enmascaramiento
Escala logarítmica
Estacionalidad
Estado oculto
Estimación de densidad por núcleos (KDE)
Exportación mediante código
F
Falacia ecológica
Función de distribución empírica acumulada (ECDF)
H
Hallazgo
Hipótesis
Histograma
I
Informe estático
Interpretación
Intervalo de clase
L
Limitación
Límites de Tukey
Línea de base
M
Matriz de correlaciones
Matriz de gráficos por pares (pair plot)
Media aritmética (promedio)
Media móvil
Mediana
N
Normalización por columnas
Normalización por filas
Núcleo de ejecución
O
Observación
P
Paradoja de Simpson
Percentil
Período incompleto
Procedencia y trazabilidad
Punto porcentual
Puntuación z
Puntuación z modificada
R
Rango intercuartílico (recorrido intercuartílico)
Recomendación
Registro de calidad de los datos
Registro duplicado
Regla del dominio de aplicación
Remuestreo temporal
Reproducibilidad
S
Segmento
Semilla aleatoria
Superposición de puntos o marcas
T
Tabla de contingencia (tabulación cruzada)
Tabla de frecuencias
Tamaño del grupo
Tasa
Tasa base
Tau de Kendall
Tipo de datos
U
Unidad de observación
V
Validez
Valor atípico
Variable de confusión
Variable mediadora
Variable nominal
Variable ordinal
W
Winsorización
Sobre esta unidad
Crea tus propios Materiales de Estudio
Convierte tus notas, diapositivas y documentos en Guías de Estudio, Preguntas de Práctica, Flashcards y 6 herramientas más.