Pandas Profiling: Una excelente herramienta para la exploración de datos

El mundo de los datos es fantástico. La información que se puede extraer desde un set de datos es primordial para la empresa si se analiza de la forma correcta.
Sin embargo, antes de ponerse a bucear en los datos en busca de la llave maestra que llevará a mi empresa a conseguir todos sus objetivos, debemos tener en cuenta ciertas cosas fundamentales como la calidad de la información. Todos quisiéramos tener nuestra data impecable, ordenada, estructurada, confiable, disponible, pero la mayoría de las veces eso es una utopía, un sueño, una ilusión.
A raíz de lo anterior, siempre es necesario hacer un análisis previo a nuestra información: Buscar datos nulos, campos vacíos, formatos erróneos, datos erróneos, faltas de ortografía, duplicación de información, etc. Si bien esto conlleva tiempo, existe una pequeña herramienta en Python que nos soluciona la vida (a medias, y sólo en el ámbito del análisis), llamada “Pandas Profiling”.
“Pandas Profiling” crea reportes de perfil a partir de un Pandas Dataframe. Un Dataframe no es más que una estructura de datos en formato de fila-columna, parecido a una matriz, con la diferencia de que en un Dataframe se puede almacenar cualquier tipo de dato.
Explorando los datos
En Pandas existe una función llamada df.describe(), la cual hace un pequeño análisis de las variables contenidas en un Dataframe. Si bien la función df.describe() hace bien su trabajo, es un poco básica para el análisis exploratorio de la información.
A diferencia de df.describe(), Pandas profiling provee detalles del dataset tales como la cantidad de variables, los datos nulos, total en memoria, tipos de variables, etc. Más aún, provee detalles de cada variable del dataset tal como la correlación, la media, valores nulos, cardinalidad, entre otros que veremos a continuación.
Para comenzar debemos lanzar un Jupyter notebook en la consola de Anaconda o Python:
$ jupyter notebookLuego de esto, creamos un notebook y partimos importando las librerías que necesitamos.
#pandas y sus amigos
import pandas as pd
import pandas_profiling
import numpy as npSí o sí vamos a necesitar un dataset. En esta ocasión usaremos uno que acabo de tomar de un repositorio de la UCI (Universidad de California, Irvine), el cual contiene información acerca de la calidad de algunos vinos blancos (casualmente).
Subimos el dataset y creamos un Dataframe a partir de su contenido.
#leemos el csv
df = pd.read_csv('winequality-white.csv', engine='python', sep=";")Una vez creado el Dataframe, podemos ver su estructura con una muestra de los datos.
#muestra de los datos
df.head()Se observan los datos, pero ¿ahora qué? ¿Qué hago con esto?
Primero aplicamos la función df.describe, la cual me entrega información relevante acerca del dataset.
Se observa que la función df.describe crea una matriz de las variables junto con algunos datos estadísticos, como la media, la desviación estándar, mínimos y máximos, etc; pero como vemos, no podemos ir más allá de un pequeño review de nuestras variables.¿Se puede hacer mejor? Sí, se puede.
Ahora demos paso a Pandas Profiling.
report = pandas_profiling.ProfileReport(df) report.to_file("report.html")Primero llamamos al método, pasando como argumento nuestro Dataframe y luego (opcional) podemos exportar el reporte a HTML para una mejor visualización.
Resultados
Primero tenemos un maravilloso Overview con información acerca de los tipos de variable presentes en el dataset, la cantidad de observaciones, etc.
Podemos también visualizar detalles por variable:
Si presionamos en “Toggle details” obtenemos aún más detalles de la variable, tales como datos estadísticos, histogramas, valores extremos, valores comúnes:
Como se observa, este es un buen punto de partida para realizar la exploración y análisis de nuestra información, ya que permite obtener granularidad y datos estadísticos a partir de un set de datos, lo cual es esencial si queremos, por ejemplo, elegir las variables correctas para crear modelos predictivos.
Les dejo algunos links interesantes:
– Dataset usado: https://archive.ics.uci.edu/ml/datasets/Wine+Quality
– Pandas Profiling: https://github.com/JosPolfliet/pandas-profiling
– Demo: http://nbviewer.jupyter.org/github/JosPolfliet/pandas-profiling/blob/master/examples/meteorites.ipynb
Eso es todo por ahora. Un saludo!

