El análisis exploratorio de datos definitivo (EDA) en Python

En este tutorial nos convertimos en exploradores y vemos el proceso para hacer un análisis exploratorio de datos (EDA) completo en Python.

Utilizaremos un ejemplo real con código y te guiaré paso a paso en cada una de las etapas del análisis.

Podrás seguir el tutorial sin problema en tu propio Notebook de Google Colab (o en el entorno que utilices 🙂)

¿Qué es el análisis exploratorio de datos?

El análisis exploratorio de datos (EDA) es una de las partes fundamentales en cualquier proyecto de ciencia de datos ya que nos ayuda a entender los datos con los que estamos trabajando.

Durante el EDA (de sus siglas en inglés Exploratory Data Analysis) analizaremos la calidad de los datos e intentaremos comprender cómo se comportan las características de nuestro dataset y cómo se relacionan entre sí.

Fundamentalmente utilizaremos:

  • Análisis de estadísticas sencillas
  • Técnicas de visualización

Así que si estás pensando ya en qué modelo de ML vas a elegir y cómo lo vas a entrenar sin ni siquiera saber cuáles son las características de tu dataset, para un momento y respira 🛑

Porque de la misma manera que un cirujano no empieza a operar sin haber estudiado antes el historial clínico y las pruebas pre-operatorias de su paciente, un ninja de los datos investigará con atención el dataset que tiene delante para poder elegir el mejor modelo posible para resolver su problema.

Además, un buen análisis exploratorio evitará muchos errores en tu proyecto... y los que no pueda evitar, te ayudará a detectarlos y entenderlos más rápido.

Cuenta la leyenda que todo ninja de los datos pasa el 70-80% de su tiempo en el proceso de análisis exploratorio y limpieza de datos.

Objetivo del EDA 🎯

Recuerda tu objetivo. Hemos venido con una misión.

  • El análisis exploratorio se enfoca en entender los datos. En muchos casos, el EDA se realiza antes y después de la preparación de datos para ayudar a guiar la limpieza.
  • Es una etapa más exploratoria y sin suposiciones, donde utilizamos técnicas más visuales y descriptivas. De hecho, nos ayudará a generar hipótesis sobre nuestros datos que luego utilizaremos para diseñar nuestra solución de Machine Learning.
  • El EDA busca proporcionar información clave para seleccionar las mejores variables antes de la fase de modelado.

¿Cómo se hace el análisis exploratorio de datos?

No hay una única manera de hacer un análisis exploratorio de datos. Es un proceso que se adapta a las características de cada conjunto de datos.

Además, es iterativo. A medida que descubrimos patrones, podemos ajustar el enfoque de nuestro EDA y es una etapa súper interrelacionada con la fase de limpieza de datos.

Sin embargo, en este tutorial vamos a seguir una guía paso a paso general que podrás personalizar para cualquier dataset.

Seguiremos los siguientes pasos:

  1. Inspección de los datos: En esta etapa hacemos una primera revisión básica para ver qué pinta tiene nuetsro dataset. Nos estamos conociendo 🙂.
  2. Calidad de los datos: Haremos un análisis de valores faltantes, filas duplicadas y valores anómalos. Es importante ver la calidad del dataset, especialmente en aplicaciones del mundo real.
  3. Análisis univariante: En esta fase exploramos cada característica de manera individual. De aquí sacaremos ideas para la fase de transformación e ingeniería de características.
  4. Análisis bivariante y multivariante: Analizaremos las relaciones entre las características del dataset y podremos ver patrones que nos permitan hacer hipótesis sobre qué características son importantes para nuestro objetivo.
  5. Conclusiones del análisis: Llegamos a este análisis exploratorio sin realizar ninguna suposición sobre los datos pero nos vamos con un listado de hipótesis y suposiciones que nos permitirán definir los siguientes pasos de nuestro proyecto.

Herramientas para hacer un análisis Exploratorio de datos

Existen muchas herramientas para hacer un análisis exploratorio de datos.

Desde herramientas especialmente diseñadas para la visualización y el análisis de datos como Power BI o Tableau (aunque existen muchas otras), que no necesitan mucho código a librerías especializadas de lenguajes de programación como Python (pandas, matplotlib, seaborn) y R (ggplot2, dplyr).

EDA en Python

Nosotros vamos a desarrollar el análisis exploratorio de datos en Python utilizando:

  • pandas: Es una librería de Python que permite limpiar, transformar, filtrar y agregar datos. Además, tiene funciones para calcular estadísticas básicas.
  • matplotlib: Una de las librerías de visualización más utilizadas en Python.
  • seaborn: Es una librería de Python construida sobre Matplotlib que facilita la creación de gráficos estadísticos atractivos y fáciles de interpretar.

Ejemplo de análisis exploratorio con python

Para nuestro ejemplo de análisis exploratorio de datos vamos a utilizar el dataset Census Income, disponible en el repositorio UCI Machine Learning.

El dataset fue extraído del censo de EEUU de 1994 bajo ciertas condiciones. Los datos se limitaron a:

  • Personas mayores de 16 años,
  • con ingresos brutos ajustados mayores de $100,
  • personas que trabajan al menos una hora por semana.

El objetivo del conjunto de datos es predecir si una persona gana más de 50.000 dólares al año o no, siendo un problema de clasificación binaria estupendo peeero en este tutorial sólo haremos la parte de EDA.

Es un dataset ideal para explorar relaciones entre variables sociodemográficas, como la edad, el nivel educativo, y el tipo de empleo, y su relación con los niveles de ingresos.

Aparte de eso sólo vamos a necesitar un Notebook de Google Colab.

Primero instalamos la librería ucimlrepo para poder importar el dataset directamente desde el repositorio de Machine Learning de UC Irvine.

!pip install ucimlrepo

Carga de datos

Importamos todas las librerías que vamos a usar hoy...

¡Y cargamos los datos!

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import math

from ucimlrepo import fetch_ucirepo 
  
# Recuperamos el dataset 
adult = fetch_ucirepo(id=2) 
  
# Obtenemos los datos como dataframes de Pandas
X = adult.data.features 
y = adult.data.targets 
  
# metadatos
print(adult.metadata) 

# Creamos un único dataset con las características y la variable objetivo
data = pd.concat([X, y], axis=1)

Inspección de los datos 🧐

En esta primera fase, nos enfocamos en obtener una comprensión inicial del dataset mediante la exploración de su estructura y contenido.

Utilizamos una serie de comandos para revisar los datos de forma rápida de un vistazo y para obtener un resumen detallado de las columnas con sus tipos de datos y estadísticas descriptivas.

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Valores más frecuentes

Este paso nos ayuda a identificar los valores más comunes lo que permite comprender las distribuciones predominantes en cada característica.

Como hemos dicho antes que el análisis exploratorio de datos es un proceso iterativo vamos a crear una función para poder reutilizarla siempre que queramos (incluso en otros EDAs 😉)

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Valores únicos

¡Ahora vamos a analizar los valores únicos!

Al contar los valores únicos en cada columna, obtenemos una idea del nivel de diversidad de las variables, lo que es especialmente útil para las variables categóricas.

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Calidad de los datos

Ahora que ya entendemos un poco mejor las características de nuestro dataset, qué significan y sus posibles rangos de valores vamos a analizar la calidad de los datos.

Como imaginarás, si tenemos datos de muy mala calidad con muchos valores faltantes y registros duplicados y no hacemos nada al respecto, el rendimiento del modelo de ML que entrenemos será penoso 😩

De hecho, ya hemos detectado posibles errores en nuestro dataset con la variable income.

🚨 En los datasets reales los datos suelen ser de bastante mala calidad y con errores. No te saltes este paso.

Datos duplicados

Primero, vamos a identificar si existen registros duplicados dentro del dataset, es decir, filas que contienen exactamente los mismos valores en todas las columnas.

Sólo vamos a ver si existen y luego tomaremos una decisión sobre qué hacer con estos registros.

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Valores faltantes

El siguiente paso es ver si tenemos valores faltantes. Los valores faltantes pueden ocurrir por varias razones, y es importante identificarlos y decidir una estrategia de tratamiento.

Tienes un tutorial completísimo sobre cómo gestionar valores faltantes en este enlace.

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Outliers

Otro marcador muy potente de la calidad de los datos es la presencia de outliers o valores atípicos, que son aquellos datos que se desvían mucho del resto de los puntos.

Los outliers pueden ser indicativos de errores de captura de datos o de fenómenos interesantes que tendremos que investigar más en profundidad 🕵️.

Para ellos, utilizamos visualizaciones como diagramas de caja (boxplots) o métricas estadísticas como el rango intercuartílico (IQR).

En la siguiente fase, al explorar el análisis univariante, podremos ver las distribuciones de cada variable en busca de outliers aunque ya sospechamos de la etapa anterior que las características capital-gain y capital-loss vienen con valores anómalos.

Si quieres ver más sobre la detección y manejo de outliers, este es tu tutorial.

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Análisis univariante

El análisis univariante nos permite entender la distribución y el comportamiento de cada variable del dataset en particular de manera individual, sin tener en cuenta cómo se relaciona con el resto de variables del conjunto de datos.

Para realizar el análisis univariante vamos a utilizar visualizaciones. Si quieres saber más sobre qué gráfico utilizar en cada caso te recomiendo este capítulo del libro Storytelling con datos.

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Análisis bivariante

¡Vamos con el análisis bivariante!

El análisis bivariante nos permite examinar la relación entre dos variables dentro de un dataset.

El objetivo es encontrar las asociaciones y correlaciones entre distintos pares de variables y ver cómo se relacionan entre sí.

De esta manera podremos descubrir patrones o dependencias que pueden influir en el comportamiento de las características.

Durante el análisis exploratorio de los datos es especialmente valioso entender cómo se relacionan las características con la variable objetivo (en nuestro caso, income). Esto nos dará pistas sobre las columnas con mayor poder predictivo y también nos ayudará a detectar casos de data leakage (si quieres saber más sobre data leakage, mira esto).

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Conclusiones del EDA

Una vez damos por terminada nuestra primera iteración podemos repasar las conclusiones que hemos obtenido y a partir de ahí decidir los siguientes pasos.

Durante el propio análisis exploratorio hemos corregido un error en las categorías de la etiqueta que nos habría llevado a fallos en nuestro modelo.

Pero además, tendríamos que:

  • Decidir qué hacer con los registros duplicados.
  • Repasar los valores faltantes y decidir una estrategia de manejo adecuada a cada característica.
  • Ver qué hacer con los valores anómalos de las características capital-gain y capital-loss.
  • Cuantizar la característica age en rangos de edad significativos para nuestro caso.
  • Agrupar los países de procedencia en menos categorías (tal vez por continente).

Además, en el análisis bivariante obsdervamos que:

  • Estado civil y ingresos: Las personas casadas tienden a tener ingresos más altos que otras categorías, lo que podría ser un fuerte predictor.
  • Nivel educativo: A mayor nivel educativo, más probabilidades de alcanzar ingresos superiores a $50K, especialmente en categorías como "Masters" y "Doctorate".
  • Ocupación: Algunas ocupaciones están fuertemente asociadas con ingresos mayores a $50K, mientras que otras están relacionadas con ingresos menores.

Estas relaciones nos sugieren que las variables socioeconómicas tienen un impacto importante en los niveles de ingresos, lo que podría sernos útil para el modelado predictivo.

Como ves, el análisis exploratorio de los datos nos ha permitido generar hipótesis, detectar problemas de calidad en los datos, y entender qué características tienen un mayor impacto en los ingresos.

Esto sienta las bases para una fase de preparación de datos más efectiva, lo que a su vez permitirá un modelado predictivo más robusto en etapas posteriores y menos quebraderos de cabeza en el futuro 🙂.

Accede a todo el contenido premium

Ya no necesitas pagar cientos de euros por un Bootcamp para convertirte en ninja de los datos. Por solo 17€/mes (o menos 🤯), obtén acceso al podcast premium, a todos los tutoriales y a los resúmenes de los libros más top sobre Machine Learning y Ciencia de datos y aprende a tu ritmo.
¡Empieza ahora!
Copyright © 2024  · Datos 🥷 · Todos los derechos reservados