Guía Práctica de Introducción Al Análisis Exploratorio de Datos Con Python
Guía Práctica de Introducción Al Análisis Exploratorio de Datos Con Python
introducción al Análisis
Exploratorio de Datos en
Python
Nov 2024
Este documento ha sido elaborado en el marco de la Iniciativa
Aporta (datos.gob.es), desarrollada por el Ministerio para la
Transformación Digital y de la Función Pública a través de la
Entidad Pública Empresarial Red.es, y en colaboración con la
Dirección General del Dato.
Aviso legal: Esta obra está sujeta a una licencia Atribución 4.0
de Creative Commons (CC BY 4.0). Está permitida su
reproducción, distribución, comunicación pública y
transformación para generar una obra derivada, sin ninguna
restricción, siempre que se cite al titular de los derechos
(Ministerio de Asuntos Económicos y Transformación Digital a
través de la Entidad Pública Empresarial Red.es). La licencia
completa se puede consultar en:
https://creativecommons.org/licenses/by/4.0
ÍNDICE DE CONTENIDOS
INTRODUCCIÓN ..........................................................................................................................1
1. METODOLOGÍA ........................................................................................................................2
2. ANÁLISIS EXPLORATORIO DE DATOS ........................................................................................2
2.1. ANÁLISIS DESCRIPTIVO .....................................................................................................3
2.1.1. EXPERIMENTA .............................................................................................................4
2.2. AJUSTE DE LOS TIPOS DE DATOS DE VARIABLES.................................................................8
2.2.1. EXPERIMENTA .............................................................................................................8
2.3. DETECCIÓN Y TRATAMIENTO DE DATOS AUSENTES ......................................................... 10
2.3.1. DETECCIÓN DE DATOS AUSENTES ............................................................................ 10
2.3.2. TRATAMIENTO DE DATOS AUSENTES ......................................................................... 12
2.4. DETECCIÓN Y TRATAMIENTO DE DATOS ATÍPICOS ........................................................... 14
2.4.1. DETECCIÓN DE VALORES ATÍPICOS .......................................................................... 15
2.4.2. ELIMINACIÓN DE VALORES ATÍPICOS ........................................................................ 19
2.5. ANÁLISIS DE CORRELACIÓN ENTRE VARIABLES ............................................................... 20
2.5.1. EXPERIMENTA ........................................................................................................... 21
3. ANÁLISIS EXPLORATORIO DE DATOS AUTOMATIZADO ............................................................ 23
3.1. EXPERIMENTA ................................................................................................................. 24
4. CONCLUSIONES .................................................................................................................... 26
5. PRÓXIMA PARADA .................................................................................................................. 26
ÍNDICE DE ILUSTRACIONES
Figura 1 - Representación del conjunto de etapas del análisis exploratorio de datos ......................3
Figura 2 - Primera etapa del AED - Análisis descriptivo...................................................................3
Figura 3 - Información general del dataset ....................................................................................5
Figura 4 - Histogramas de las variables numéricas ........................................................................7
Figura 5 - Segunda etapa del AED - Ajuste de tipos de variables .....................................................8
Figura 6 - Categorías únicas de las variables categóricas transformadas .......................................9
Figura 7 - Tercera etapa del AED - Detección y Tratamiento de Datos Ausentes ............................ 10
Figura 8 - Resultados del Análisis de Valores Ausentes ................................................................ 11
Figura 9 - Resultados del Tratamiento de Datos Ausentes............................................................ 13
Figura 10 - Cuarta etapa del AED - Identificación de Datos Atípicos ............................................. 14
Figura 11 - Histograma de la variable ' O3 (µg/m³)' ....................................................................... 15
Figura 12 - Estadísticas sobre la distribución de la variable 'O3 (ug/ m³)' ...................................... 17
Figura 13 - Gráfico de cajas y bigotes (boxplot) de la variable ' µg/m³' ........................................... 17
Figura 14 - Gráfico de barras sobre la variable categórica 'Provincia' ............................................ 18
Figura 15 - Gráfico de cajas y bigotes (boxplot) de la variable 'O3 (µg/m³)' antes y después de la
eliminación de atípicos .............................................................................................................. 19
Figura 16 - Categorías únicas de la variable 'Provincia' tras la eliminación de atípicos .................. 20
Figura 17 - Quinta etapa del AED - Correlación de variables ......................................................... 20
Figura 18 - Matriz de correlaciones de las variables numéricas .................................................... 22
Figura 19 - Resumen general del dataset generado por 'ydata-profiling' ....................................... 25
Figura 20 - Información generada automáticamente sobre la variable 'Provincia' ......................... 25
Guía práctica de introducción al Análisis Exploratorio de Datos en Python 1
INTRODUCCIÓN
El presente documento constituye una adaptación al lenguaje de programación Python de la guía de
análisis exploratorio de datos en R publicada por la Iniciativa Aporta en el año 2021. Se mantienen el
conjunto de datos y la estructura básica del análisis del análisis referenciado con la intención de facilitar
la comparación entre ambos lenguajes de programación, permitir a los usuarios identificar las diferencias
sintácticas y de implementación, y proporcionar un recurso valioso para aquellos que trabajan en
entornos donde se utilizan ambos lenguajes. Adicionalmente, esta aproximación permite centrarse en las
particularidades de cada lenguaje sin que las diferencias en los datos o en la estructura del análisis añadan
complejidad innecesaria al proceso de aprendizaje. Como valor añadido, esta nueva versión incorpora
secciones dedicadas a tendencias emergentes en el campo, como el análisis exploratorio automatizado y
las herramientas de perfilado de datos, respondiendo así a las necesidades actuales del sector en materia
de eficiencia y escalabilidad.
El análisis exploratorio de datos (AED o EDA, por sus siglas en inglés) representa un paso crítico previo a
cualquier análisis estadístico. Su relevancia deriva tanto de la necesidad de comprender exhaustivamente
los datos antes de analizarlos como de verificar el cumplimiento de los requisitos estadísticos que
garantizarán la validez de los análisis posteriores.
Las técnicas estadísticas que conforman el AED permiten desentrañar la naturaleza intrínseca de los
datos, caracterizar sus atributos principales y descubrir las interrelaciones entre variables. Este proceso
sistemático sienta las bases para una comprensión profunda del conjunto de datos y fundamenta la
solidez de análisis subsiguientes. La exploración inicial revela aspectos cruciales como: posibles errores en
la introducción de datos, patrones de valores ausentes, y correlaciones significativas entre variables y
redundancias informativas que podrían afectar a la calidad del análisis.
El debate sobre la delimitación precisa de los procesos que conforman el análisis exploratorio permanece
vigente en la comunidad científica. Mientras algunos expertos consideran la limpieza de datos como una
fase preliminar independiente, la intrincada interrelación entre la exploración y la depuración, junto con
su dependencia del contexto específico de los datos, sugiere la conveniencia de un enfoque integrado. En
esta guía introductoria se detalla una serie de tareas que constituyen el conjunto mínimo a abordar para
garantizar un punto de partida aceptable para una reutilización de datos eficaz.
Esta guía está orientada tanto a quienes se inician en el análisis de datos como a quienes buscan
sistematizar los procesos del AED. Utilizando el lenguaje de programación Python1, se ilustran los
1
Para lograr la máxima comprensión del alcance de esta guía es recomendable tener competencias básicas en el lenguaje Python
(recursos y ejercicios en Python de la Iniciativa Aporta), que es el elegido para ilustrar, mediante ejemplos, las diferentes etapas
involucradas en un AED. Si no es así, animamos igualmente a continuar la lectura de esta guía dado que, como veremos a continuación,
dispone de una interesante bibliografía que, además de ayudarte a entender AED, te permitirá conocer y obtener el máximo partido de
este potente lenguaje de programación.
Guía práctica de introducción al Análisis Exploratorio de Datos en Python 2
conceptos clave y se proporcionan ejemplos concretos que facilitan la comprensión y aplicación de las
técnicas aprendidas.
1. METODOLOGÍA
La presente guía adopta un enfoque práctico basado en el aprendizaje experiencial, permitiendo a los
usuarios familiarizarse con técnicas de análisis mediante datos públicos reales y herramientas
tecnológicas de código abierto sin coste asociado. Todo el material desarrollado, incluyendo los datos y
el código fuente, se pone a disposición pública para facilitar tanto la replicación del análisis como su
adaptación a otros contextos de estudio.
Como herramienta para el caso práctico, se ha utilizado el lenguaje de programación Python y el entorno
de desarrollo Jupyter Notebook en Google Colab. Se puede seguir la guía ejecutando las celdas del
notebook publicado en el repositorio oficial, lo que garantiza la reproducibilidad de los resultados.
Manteniendo la coherencia con la guía anterior, se ha escogido el mismo conjunto de datos, en concreto,
el registro de la calidad del aire en la Comunidad Autónoma de Castilla y León, disponible en el portal
datos.gob.es. Como ya se expuso en la versión implementada en R, la idoneidad de este conjunto de datos
radica tanto en su relevancia social como en sus características técnicas, que lo convierten en un caso de
estudio ideal para ilustrar las diferentes técnicas de análisis exploratorio.
1. Realizar un análisis descriptivo de las variables para obtener una idea representativa del conjunto de
datos.
2. Reajustar los tipos de las variables para que sean consistentes al momento de realizar posteriores
operaciones.
3. Detectar y tratar los datos ausentes para poder procesar adecuadamente las variables numéricas. Los
datos ausentes son valores no registrados en algunas observaciones, y es esencial gestionarlos
correctamente para evitar sesgos y problemas en el análisis.
Guía práctica de introducción al Análisis Exploratorio de Datos en Python 3
4. Identificar datos atípicos y su tratamiento para evitar que puedan distorsionar futuros análisis
estadísticos.
5. Realizar un examen numérico y gráfico de las relaciones entre las variables analizadas para determinar
el grado de correlación entre ellas, pudiendo predecir el comportamiento de una variable en función de
las otras.
El gráfico (Figura 1) siguiente representa de forma esquemática el conjunto de etapas del análisis
exploratorio de datos que se describe en los contenidos de esta guía.
Veamos a continuación de forma detallada cada una de las etapas propuestas para llevar a cabo un análisis
exploratorio de datos. Cada capítulo incluye la sección “Experimenta”, que, por medio de la aplicación
práctica de diversas funciones en Python, te ayudará a comprender los conceptos que se explican.
Una vez que se ha obtenido el dataset sobre el registro de la calidad del aire en la Comunidad Autónoma
de Castilla y León del catálogo de datos abiertos (puede descargarse directamente accediendo a este
enlace) procederemos a realizar una caracterización inicial del conjunto de datos que nos permita
comprender su estructura y contenido. Para ello, combinaremos dos aproximaciones complementarias:
por un lado, la aplicación de técnicas de estadística descriptiva que nos proporcionarán una visión
cuantitativa de las variables y sus características; por otro, la generación de visualizaciones que nos
Guía práctica de introducción al Análisis Exploratorio de Datos en Python 4
ayudarán a comprender intuitivamente los patrones de distribución presentes en los datos. Esta fase
inicial de reconocimiento sienta las bases para cualquier análisis más profundo y dirigido.
2.1.1. EXPERIMENTA
Para nuestro análisis utilizaremos el dataset mencionado anteriormente, que asignaremos al objeto
calidad_aire en nuestro código. Este conjunto de datos servirá como base para implementar y demostrar
todas las técnicas de análisis exploratorio que se presentan en la guía.
La exploración inicial se realizará mediante diversas funciones de Python especialmente diseñadas para
proporcionar una perspectiva global de la estructura y contenido de los datos. Estas mismas funciones
se utilizarán de manera recurrente a lo largo del análisis para monitorizar cómo las diferentes
transformaciones y procesamientos afectan a las características del conjunto de datos.
La interpretación detallada de un histograma permite identificar diversos aspectos críticos para el análisis
posterior:
• La tendencia central de los datos, observable a través de la ubicación del pico o picos de la
distribución.
• La dispersión o variabilidad, reflejada en la amplitud y extensión de las barras.
• La presencia de colas largas o cortas, que pueden indicar la frecuencia de valores extremos.
• Posibles discontinuidades o gaps en la distribución, que podrían señalar problemas en la
recolección de datos o fenómenos subyacentes importantes.
• La existencia de valores atípicos, visibles como barras aisladas en los extremos de la distribución.
A continuación, se generan histogramas para todas las variables numéricas presentes en el conjunto de
datos, previa importación de la librería de visualización de datos matplotlib. Mediante técnicas de
programación más avanzada, como la iteración sobre las columnas del dataset y la automatización de la
generación de subplots, podemos optimizar el proceso de visualización y obtener todas las distribuciones
en un único lienzo. Esta aproximación programática no solo resulta más eficiente que la creación manual
de gráficos individuales, sino que también facilita la detección de patrones comunes o divergencias
significativas entre las distintas variables numéricas del conjunto de datos.
import matplotlib.pyplot as plt
import numpy as np
plt.tight_layout()
plt.show()
Tras la carga inicial resulta fundamental verificar la correcta codificación del tipo de datos para cada
variable. Un tipo de dato inadecuado puede comprometer análisis posteriores o generar resultados
erróneos. Es necesario confirmar que las variables numéricas estén efectivamente almacenadas como
números (ya sean enteros o decimales), mientras que las variables cualitativas o categóricas deben estar
codificadas como cadenas de caracteres y contener un conjunto finito y bien definido de categorías. Esta
verificación temprana permite identificar y corregir posibles incongruencias en la tipología de los datos,
como fechas almacenadas como texto o categorías codificadas erróneamente como valores numéricos.
Los tipos de variables habituales que puede albergar nuestra tabla de datos pueden ser:
La correcta tipificación de las variables en un conjunto de datos no es solo una cuestión de formato, sino
que resulta fundamental para garantizar la integridad y efectividad de análisis posteriores. La
clasificación adecuada de los tipos de datos responde a principios fundamentales del análisis de datos:
• Las variables temporales (fechas) requieren un tratamiento especial que permita capturar la
naturaleza secuencial y las propiedades cíclicas del tiempo.
• Las variables categóricas deben preservar la estructura jerárquica o nominal de sus categorías.
• Los datos numéricos deben mantener sus propiedades matemáticas y estadísticas.
2.2.1. EXPERIMENTA
Con la función df.info(), podemos realizar una primera inspección de los tipos de datos asignados a cada
variable. En nuestro conjunto de datos, encontramos distintas variables donde el tipo de dato asignado
automáticamente no se corresponde con la naturaleza intrínseca de la información que contienen,
como ocurre con las variables Fecha, Provincia y Estación. Estas tres variables han sido codificadas
genéricamente como tipo object, lo cual limita significativamente su utilidad analítica:
Guía práctica de introducción al Análisis Exploratorio de Datos en Python 9
• La variable Fecha requiere una conversión a tipo fecha (datetime) para permitir operaciones
temporales como cálculo de intervalos, agregaciones por períodos o análisis de estacionalidad. La
transformación mediante pd.to_datetime(), no solo cambia el formato, sino que habilita todo el
ecosistema de análisis temporal de Python.
El procedimiento a seguir es reajustar los tipos de estas variables para poder realizar posteriormente las
operaciones, análisis y representaciones gráficas que sean necesarias.
# Ajustar el tipo de la variable Fecha
calidad_aire['Fecha'] = pd.to_datetime(calidad_aire['Fecha'], errors='coerce')
La gestión adecuada de los datos ausentes es crucial para garantizar la calidad y la fiabilidad del análisis
estadístico. Los datos faltantes pueden distorsionar los resultados de los análisis, afectar la precisión de
los modelos predictivos y alterar las visualizaciones gráficas, llevando a interpretaciones incorrectas o
engañosas. Por ejemplo, si no se manejan adecuadamente, los datos ausentes pueden sesgar los
resultados de una regresión o disminuir la capacidad predictiva de un modelo.
2.3.1.1. EXPERIMENTA
En Python, podemos usar las bibliotecas pandas y numpy para trabajar con datos ausentes. A
continuación, mostramos algunas funciones útiles para detectar valores ausentes:
#Sección 1
#Sección 2
• En la primera sección, isna() para generar un DataFrame booleano que indica la presencia de
valores ausentes, any() para verificar si existe al menos un NaN en el DataFrame, y sum() para
contar el número total de NaN.
Un análisis exhaustivo de los valores ausentes en nuestro conjunto de datos revela una situación que
requiere especial atención: el DataFrame "calidad_aire" presenta 1.163.037 valores perdidos, lo que
representa un significativo 20% del total de observaciones. Este porcentaje es el mismo que el obtenido
en el análisis de la guía en R, con 116.281 valores perdidos. Este hecho confirma un patrón no aleatorio
en la pérdida de datos que podría estar relacionado con la disponibilidad o capacidad de los sistemas de
medición.
La distribución de estos valores perdidos no es uniforme entre las variables, destacando especialmente la
ausencia de datos en los parámetros de CO (mg/m³) y PM25 (µg/m³), con un 77% y 88% de valores
faltantes respectivamente. La magnitud y naturaleza de estos datos faltantes plantea un desafío
metodológico significativo que debe abordarse cuidadosamente para garantizar la validez y utilidad del
análisis posterior. La gestión de estos valores ausentes requerirá una estrategia que equilibre la
preservación de la integridad de los datos con la necesidad de mantener un conjunto de datos
suficientemente completo para su análisis y reutilización efectiva.
Guía práctica de introducción al Análisis Exploratorio de Datos en Python 12
La selección de la técnica de tratamiento adecuada depende del tipo de datos, la cantidad y patrón de los
datos faltantes, y el contexto del análisis. Aunque la imputación por media es una técnica común, no
siempre es la más adecuada. Es esencial evaluar cómo cada método puede afectar a los resultados y la
calidad del análisis final.
2.3.2.1. EXPERIMENTA
Como ejemplo de aplicación de las opciones enumeradas, el primer tratamiento que se va a realizar sobre
los datos perdidos es la eliminación de las dos variables que presentan un porcentaje superior al 50%,
ya que un número de NaN tan alto puede producir errores o distorsionar los análisis posteriores al no ser
usadas las filas que presentan NaN (en este caso, no se usaría más del 50% de las observaciones). Antes,
se guarda una copia del dataset original, la cual será utilizada en el punto 3.
# Guardar copia del dataset original
calidad_aire_original = calidad_aire.copy()
Continuando con el ejemplo, sustituiremos los valores perdidos que presenta el DataFrame en el resto
de variables por la media de cada una de las columnas, para no perder información significativa y que los
análisis posteriores no se vean alterados.
# Seleccionamos las variables numéricas
columnas_numericas = calidad_aire.select_dtypes(include=[np.number]).columns
# Calculamos la media para cada una de las variables numéricas sin tener en cuenta los NaN
cols_mean = calidad_aire[columnas_numericas].mean()
Es importante señalar que el tratamiento realizado, aunque válido como ejemplo ilustrativo, representa
una aproximación simplificada al problema de los valores ausentes. En un análisis más exhaustivo de
datos de calidad del aire, deberían considerarse aspectos adicionales como:
• La correlación espacial: dado que los datos provienen de diferentes estaciones de medición, sería
relevante considerar la proximidad geográfica entre estaciones para la imputación de valores
ausentes, ya que estaciones cercanas tienden a registrar niveles similares de contaminación.
• El patrón de ausencia: antes de eliminar variables con alto porcentaje de valores ausentes, sería
conveniente analizar si estos siguen algún patrón sistemático (por ejemplo, fallos específicos de
sensores o períodos de mantenimiento) que pudiera aportar información relevante sobre la
calidad de los datos.
Guía práctica de introducción al Análisis Exploratorio de Datos en Python 14
Estas consideraciones subrayan la importancia de adaptar las técnicas de tratamiento de valores ausentes
al contexto específico del problema y a la naturaleza de los datos analizados.
Un valor atípico u outlier representa una observación que exhibe una desviación significativa respecto
al patrón general de comportamiento del resto de los datos. Estas observaciones extremas pueden surgir
por diversos motivos: desde errores en la medición o registro de datos hasta fenómenos reales pero
extraordinarios que merecen especial atención. Su importancia en el análisis exploratorio es crucial, ya
que pueden ejercer una influencia desproporcionada en los estadísticos descriptivos, distorsionar las
relaciones entre variables y comprometer la validez de modelos estadísticos posteriores. Por ejemplo, en
datos de calidad del aire, un valor atípico podría representar tanto un error de medición como un episodio
real de contaminación severa, lo que hace especialmente relevante su identificación y análisis
contextualizado antes de tomar decisiones sobre su tratamiento. La gestión adecuada de estos valores
requiere un equilibrio entre la preservación de información potencialmente valiosa y la necesidad de
mantener la robustez del análisis estadístico.
El enfoque más común para el manejo de outliers es reducir su posible influencia en los análisis. A
continuación, se mencionan algunas estrategias que se pueden considerar:
• Métodos estadísticos robustos: existen técnicas estadísticas robustas diseñadas para minimizar
el impacto de los valores atípicos en los resultados. Estos métodos ajustan el análisis para que sea
menos sensible a los outliers, preservando así la integridad de los resultados.
• Eliminación de outliers: eliminar valores atípicos puede ser apropiado en algunos casos, pero
debe hacerse con cuidado. Antes de descartar un outlier, es fundamental verificar si el valor es el
resultado de un error de medición o de un problema en la construcción del dataset.
• Sustitución de outliers: reemplazar outliers por la media o la mediana, por ejemplo. Aunque esta
práctica puede parecer una solución sencilla, puede alterar la distribución y la varianza de los
datos, introduciendo sesgo en el análisis.
Si se decide eliminar o sustituir los valores atípicos, es prudente repetir los análisis tanto con los valores
originales como con los datos modificados. Esto permite observar el impacto real de los outliers en los
resultados. Si la diferencia es mínima, puede ser razonable proceder con la eliminación o sustitución. Sin
embargo, si el impacto es considerable, se debe justificar adecuadamente cualquier decisión.
Independientemente del enfoque adoptado, como sucede con el tratamiento de los datos ausentes,
también es crucial documentar todas las decisiones tomadas durante el proceso de manejo de outliers.
Guía práctica de introducción al Análisis Exploratorio de Datos en Python 15
Esto asegura que otros analistas puedan comprender las transformaciones realizadas en el conjunto de
datos y permite una trazabilidad adecuada a lo largo del Análisis Exploratorio de Datos.
A continuación, se muestra cómo se pueden detectar y eliminar los valores atípicos, suponiendo que se
puede justificar que los valores son errores de medición o problemas derivados de la ingesta de datos. El
objetivo es evitar que estos valores distorsionen futuros análisis estadísticos.
Para mostrar el proceso de detección de valores atípicos en una variable continua, utilizaremos como
ejemplo la variable numérica ‘O3 (µg/m³)’. El proceso es exactamente igual para el resto de las variables
numéricas que presente la tabla.
En primer lugar, generamos un histograma para conocer la distribución de frecuencias que presenta la
variable de estudio:
plt.hist(calidad_aire['O3 (ug/m3)'], bins=100, range=(0, 150), color='blue', edgecolor='black'
)
plt.title('Distribución de O3 (ug/m3)')
plt.xlabel('O3 (ug/m3)')
plt.ylabel('Frecuencia')
plt.xlim(0,150)
plt.tight_layout()
plt.show()
El análisis del histograma de O3 revela una distribución asimétrica positiva característica de mediciones
de contaminantes atmosféricos, donde la mayoría de las observaciones se concentran en el rango de 0 a
Guía práctica de introducción al Análisis Exploratorio de Datos en Python 16
100 µg/m³. Las observaciones que superan este umbral presentan una frecuencia marcadamente inferior,
sugiriendo la presencia de valores potencialmente atípicos. Sin embargo, en el contexto de la calidad del
aire, estos valores elevados podrían representar episodios reales de alta concentración de ozono,
típicamente asociados a condiciones meteorológicas específicas como alta radiación solar y temperatura
elevada, especialmente durante los meses estivales. Para detectar de forma más adecuada la presencia
de valores atípicos, utilizaremos la representación más adecuada para esta tarea: un gráfico de cajas y
bigotes.
Los gráficos de cajas y bigotes o boxplots aportan una representación visual que describe la dispersión y
simetría que presentan los datos observando los cuartiles (división de la distribución en cuatro partes
delimitadas por los valores 0,25; 0,50 y 0,75). Estos gráficos están compuestos por tres componentes:
1. Caja de rango intercuartílico (interquartile range o IQR): representa el 50% de los datos,
comprende desde el percentil 25 de la distribución (Q1), hasta el percentil 75 (Q3). Dentro de la
caja encontramos una línea que señala el percentil 50 de la distribución (Q2), la mediana. La caja
aporta una idea sobre la dispersión de la distribución en función de la separación existente entre
Q1 y Q3, así como también si la distribución es simétrica en torno a la mediana o si está sesgada
hacia alguno de los lados.
2. Bigotes: se extienden desde ambos lados de los extremos de la caja y representan los rangos del
25% de valores de la parte inferior (Q1 – 1,5 IQR) y el 25% de valores de la parte superior (Q3 +
1,5 IQR), excluyendo los valores atípicos.
3. Valores atípicos: esta representación identifica como valores atípicos aquellas observaciones que
presentan valores inferiores o superiores a los límites del gráfico (límite inferior: Q1 – 1,5 IQR y
límite superior: Q3 + 1,5 IQR).
Para la obtención de los estadísticos necesarios para la representación del gráfico utilizaremos la función
boxplot() de seaborn, otra popular librería de visualización de datos:
import seaborn as sns
# Estadísticas necesarias para reproducir el gráfico de cajas y bigotes
Q1 = calidad_aire['O3 (ug/m3)'].quantile(0.25)
Q3 = calidad_aire['O3 (ug/m3)'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
Es importante señalar que este análisis representa un ejemplo ilustrativo de identificación básica de
valores atípicos utilizando métodos estadísticos simples. En un estudio exhaustivo de calidad del aire, el
tratamiento de estos valores requeriría consideraciones adicionales específicas del dominio y un análisis
más profundo de las causas de estas desviaciones. Sin embargo, para los objetivos didácticos de esta guía,
esta aproximación sirve para demostrar los conceptos básicos del análisis de valores atípicos.
Guía práctica de introducción al Análisis Exploratorio de Datos en Python 18
En nuestro caso, utilizaremos la variable 'Provincia' como ejemplo ilustrativo de este proceso. Esta
elección resulta particularmente adecuada ya que las categorías válidas están claramente definidas (las
provincias de Castilla y León), lo que facilita la identificación de posibles anomalías como errores
ortográficos, variaciones en el formato de escritura, o la presencia de provincias que no pertenezcan a la
comunidad autónoma. Este mismo procedimiento de análisis puede y debe aplicarse a cualquier variable
categórica del conjunto de datos, adaptando los criterios de validación según la naturaleza específica de
cada variable.
En Python, podemos utilizar la librería matplotlib o seaborn para crear gráficos de barras y visualizar la
distribución de las categorías.
# Número de categorías que presenta la variable Provincia
categoria_counts = calidad_aire['Provincia'].value_counts()
Basándonos en el análisis exploratorio, podemos deducir que la categoría Madrid es un valor atípico
dentro de la variable 'Provincia', ya que no pertenece a la Comunidad Autónoma de Castilla y León.
Procederemos en la siguiente sección a eliminar esta categoría de nuestros datos.
Una vez identificados los valores atípicos, procedemos a eliminarlos. Una forma de eliminar los valores
atípicos de una variable numérica es generar una nueva tabla.
# Se genera una nueva tabla que no contiene los valores identificados como atípicos
calidad_aire_NoOut = calidad_aire[(calidad_aire['O3 (ug/m3)'] >= lower_bound) &
(calidad_aire['O3 (ug/m3)'] <= upper_bound)]
plt.tight_layout()
plt.show()
Figura 15 - Gráfico de cajas y bigotes (boxplot) de la variable 'O3 (µg/m³)' antes y después de la eliminación de atípicos
La comparación de los diagramas de cajas y bigotes antes y después de la eliminación de valores atípicos
revela cambios significativos en la distribución de la variable O3 (µg/m³). El gráfico posterior a la
eliminación muestra una distribución más compacta y simétrica, con un rango considerablemente más
reducido que oscila aproximadamente entre 30 y 70 µg/m³. Este cambio en la escala permite apreciar
mejor la estructura central de los datos, donde tanto la mediana como los cuartiles se visualizan con
mayor claridad.
Guía práctica de introducción al Análisis Exploratorio de Datos en Python 20
En Python, podemos utilizar el método drop() para eliminar filas que contienen la categoría atípica y
astype('category').cat.remove_unused_categories() para asegurarnos de que la categoría se elimina del
tipo de dato categórico.
# Eliminamos las filas que pertenecen al factor “Madrid”
calidad_aire_SM = calidad_aire[calidad_aire['Provincia'] != 'Madrid'].copy()
La correlación (r) mide la relación lineal entre dos o más variables, reflejando tanto la fuerza como la
dirección de su relación. En términos simples, la correlación nos indica si dos variables cambian juntas y
de qué manera lo hacen:
• Correlación positiva: si una variable aumenta y la otra también lo hace, se dice que están
correlacionadas positivamente. Un valor de (r) cercano a +1 indica una relación positiva fuerte.
• Correlación negativa: si una variable aumenta mientras que la otra disminuye, están
correlacionadas negativamente. Un valor de (r) cercano a -1 indica una relación negativa fuerte.
• Sin correlación: un valor de (r) cercano a 0 sugiere que no hay una relación lineal clara entre las
variables.
Es importante señalar que la correlación de Pearson, siendo la más común, no es la única medida de
correlación disponible. Existen alternativas como:
• La correlación de Spearman, más robusta frente a valores atípicos y útil para relaciones
monótonas no lineales.
• La correlación de Kendall, especialmente útil para muestras pequeñas y cuando los datos no
siguen una distribución normal.
Guía práctica de introducción al Análisis Exploratorio de Datos en Python 21
• Medidas de correlación basadas en rangos, que pueden capturar relaciones no lineales entre
variables.
• Simplicidad en el análisis: en el contexto del AED, entender las correlaciones entre variables
puede guiar la selección de variables para modelos predictivos y otros análisis estadísticos.
• Relación con PCA: el análisis de correlación está relacionado con técnicas como el Análisis de
Componentes Principales (PCA). PCA utiliza la matriz de correlación para transformar las variables
originales en un nuevo conjunto de variables, llamadas componentes principales, que capturan la
mayor variabilidad en los datos.
En el contexto específico de datos ambientales y calidad del aire, el análisis de correlación cobra especial
relevancia al permitir una comprensión holística de las interacciones entre contaminantes y su entorno.
Esta técnica resulta fundamental para identificar relaciones entre diferentes contaminantes que
comparten fuentes de emisión comunes, al tiempo que facilita el entendimiento de cómo las condiciones
meteorológicas influyen en sus concentraciones. Adicionalmente, este análisis permite detectar patrones
temporales y espaciales en la distribución de contaminantes, proporcionando una base sólida para la
interpretación de la dinámica atmosférica y la gestión efectiva de la calidad del aire.
Es crucial recordar que correlación no implica causalidad. Aunque dos variables puedan estar
correlacionadas, no necesariamente significa que una cause cambios en la otra. La correlación
simplemente indica una asociación y no establece una relación causal directa.
2.5.1. EXPERIMENTA
En esta sección, vamos a calcular la matriz de correlaciones para las variables numéricas y representarla
gráficamente.
num_variables = calidad_aire.select_dtypes(include=[np.number])
plt.figure(figsize=(10, 8))
El análisis de la matriz de correlaciones revela varios patrones interesantes en nuestro conjunto de datos
sobre calidad del aire:
Las correlaciones más significativas se observan entre NO (µg/m³) y NO₂ (µg/m³), con un coeficiente de
r=0.73, sugiriendo una fuerte asociación positiva. Esta relación era esperable dado que ambos
Guía práctica de introducción al Análisis Exploratorio de Datos en Python 23
contaminantes pertenecen a la familia de los óxidos de nitrógeno (NOx) y comparten fuentes de emisión
comunes, principalmente relacionadas con procesos de combustión.
Por otro lado, se identifican correlaciones moderadas positivas entre PM10 (µg/m³) y varios
contaminantes: con NO (r=0.4) y NO2 (r=0.44). Estas asociaciones podrían indicar una contribución común
de fuentes de emisión, posiblemente relacionadas con el tráfico urbano o procesos industriales.
El resto de las variables presentan coeficientes de correlación más bajos. Esto se refleja en el gráfico,
donde los cuadrados que representan estas correlaciones tienen un color más cercano al blanco. Por
ejemplo, podríamos inferir que las variables O₃ (µg/m³) y PM10 (µg/m³) son relativamente
independientes, ya que su coeficiente de correlación es bajo.
Estas correlaciones observadas proporcionan una base para comprender las interrelaciones entre
contaminantes, aunque como se ha mencionado anteriormente, deben interpretarse con cautela y en el
contexto específico de la calidad del aire urbana.
• Eficiencia y rapidez: el AED automatizado permite procesar grandes volúmenes de datos en poco
tiempo, generando informes detallados con métricas estadísticas, visualizaciones y análisis de
correlación de manera automática.
• Visión general completa: las herramientas de AED automatizado brindan una visión panorámica
de los datos, incluyendo resúmenes estadísticos, distribuciones, relaciones entre variables y
posibles anomalías, facilitando la identificación de patrones y tendencias clave.
Es fundamental, sin embargo, que esta herramienta sea utilizada teniendo en cuenta las siguientes
consideraciones:
• Limitaciones: el AED automatizado puede no ser adecuado para todos los tipos de datos o análisis.
En algunos casos, puede ser necesario un análisis exploratorio más profundo y personalizado.
3.1. EXPERIMENTA
A continuación, usaremos YData Profiling, una librería que permite generar informes interactivos de AED
con visualizaciones, estadísticas descriptivas, análisis de correlación y detección de valores atípicos. El
informe generado con YData Profiling incluye:
• Resumen ejecutivo con información general sobre el conjunto de datos, como número de filas y
columnas, tipos de datos, valores únicos, valores faltantes, etc.
• Análisis univariado de cada columna, con visualizaciones y estadísticas descriptivas como media,
mediana, desviación estándar, valores mínimos y máximos, distribución, etc.
• Análisis bivariado, con matrices de correlación, diagramas de dispersión y análisis de la relación
entre variables.
• Detección de valores atípicos y anomalías en los datos.
• Recomendaciones y sugerencias de mejora para el dataset.
En el siguiente bloque de código se muestra cómo generar un informe de AED automatizado con YData
Profiling sobre el conjunto de datos calidad_aire. Este informe se genera en el directorio de trabajo del
entorno de ejecución elegido y puede descargarse del repositorio de github.
!pip install setuptools #instalación de paquetes y dependencias
!pip install --upgrade ydata-profiling
!pip install ipywidgets
Podremos observar en el informe interactivo generado algunas conclusiones que se han extraído
previamente, como el número de valores nulos, la alta correlación entre ciertas variables o la distribución
de cada variable.
Guía práctica de introducción al Análisis Exploratorio de Datos en Python 26
4. CONCLUSIONES
El Análisis Exploratorio de Datos (AED) constituye un pilar fundamental en la ciencia de datos moderna,
proporcionando un marco metodológico robusto para la comprensión inicial de conjuntos de datos
complejos. Como se ha demostrado a lo largo de esta guía, este proceso va más allá de la simple inspección
preliminar de datos, constituyendo una fase crítica que determina la calidad y fiabilidad de cualquier
análisis posterior, ya sea una investigación científica rigurosa o el desarrollo de visualizaciones interactivas
avanzadas.
La aplicación sistemática de técnicas de AED, desde la verificación de la integridad de los datos hasta el
análisis de correlaciones multivariantes, permite construir una base sólida para la toma de decisiones
basada en datos.
Esta guía ha adoptado un enfoque práctico, utilizando datos reales de calidad del aire que, si bien están
disponibles en el catálogo nacional datos.gob.es, se descargan directamente desde su fuente original: el
portal de datos abiertos de Castilla y León. Este conjunto de datos ha permitido ilustrar tanto la aplicación
de técnicas como los desafíos y consideraciones específicas que surgen al trabajar con datos ambientales.
La elección de Python como herramienta de análisis responde a su creciente relevancia en el ecosistema
de la ciencia de datos, proporcionando una base accesible pero potente para la implementación de estos
métodos.
Es importante enfatizar que las técnicas presentadas constituyen un punto de partida básico en el análisis
de datos. En aplicaciones más avanzadas, estos métodos pueden y deben complementarse con técnicas
más sofisticadas, como el análisis multivariante avanzado, la detección automatizada de anomalías o el
uso de técnicas de aprendizaje automático para la exploración de patrones complejos.
Esperamos que esta guía sirva como recurso práctico para aquellos que se inician en el análisis de datos,
proporcionando una base metodológica sólida que pueda aplicarse y adaptarse a diversos conjuntos de
datos y contextos específicos. ¡Hasta pronto!
5. PRÓXIMA PARADA
Si quieres seguir profundizando en el apasionante mundo del análisis exploratorio de los datos, te
sugerimos los siguientes recursos:
• Algunos libros disponibles gratuitamente que detallan el proceso del análisis exploratorio de
datos e incluyen conjuntos de datos de prueba y ejemplos con código (R o Python) para ilustrar el
proceso:
o Python for Data Analysis: un libro fundamental que cubre ampliamente el análisis de
datos en Python, incluyendo AED.
o Exploratory Data Analysis with R: un libro clásico enfocado en AED utilizando R.
o R for Data Science: un recurso extenso sobre ciencia de datos y análisis exploratorio en R.
• Además de libros, la mejor forma de aprender ciencia de datos es practicando. A continuación, te
dejamos enlaces a tutoriales y cursos online con una importante carga de programación práctica:
o Comprehensive Data Exploration with Python: un tutorial en Kaggle que te guía a través
de un completo análisis exploratorio de datos previo al entrenamiento de un modelo de
aprendizaje automático.
Guía práctica de introducción al Análisis Exploratorio de Datos en Python 27
o Exploratory Data Analysis with Python and Pandas: un tutorial paso a paso sobre cómo
realizar AED utilizando pandas.
o Exploratory Data Analysis with Seaborn: guía completa para la visualización y AED con
seaborn.
• Por último, aquí tienes algunos recursos adicionales muy útiles que, de manera gráfica, compilan
la información más relevante:
o Data Science Cheat Sheet: hojas de trucos de DataCamp que resumen conceptos clave de
ciencia de datos.
o Seaborn Cheat Sheet: ejemplos y hojas de trucos para la biblioteca Seaborn, útil en AED.
o Pandas Cheat Sheet: un resumen práctico de las operaciones más comunes con Pandas
en Python.