Análisis exploratorio de datos con Pandas Profiling
Logo de Pandas Profiling

Pandas profiling es un módulo open source de Python con el que podemos hacer rápidamente un análisis exploratorio de datos con solo unas pocas líneas de código. Además por si esto no fuera suficiente para convencernos de la utilidad de la herramienta, esta también genera informes interactivos en formato web que pueden ser presentados a cualquier persona, aunque no sepa programar.

En resumen, lo que hace pandas profiling es ahorrarnos todo el trabajo de visualizar y entender la distribución de cada variable. Nos genera un informe con toda la información fácilmente visible.

Una imagen vale más que mil palabras

Para que veas claro cómo funciona, este es un ejemplo de informe generado por pandas profiling:

Ejemplo de informe generado por Pandas profiling

También puedes ver un ejemplo interactivo de informe aquí.

Uno de los puntos fuertes del informe generado son los warnings que aparecen al inicio, donde nos indica las variables que contienen valores NaN, variables con muchos ceros, variables categóricas con alta cardinalidad, etc…

Sección de Pandas Profiling que nos indica los warnings
Sección que nos indica los warnings

Cómo utilizar pandas profiling

El primer paso es instalarlo con este comando:

pip install pandas_profiling

Generaremos el informe utilizando estos comandos:

from pandas_profiling import ProfileReport
prof = ProfileReport(df)
prof.to_file('informe.html')

Ya estamos, así de simple ha sido. Podemos ver el informe generado en el archivo informe.html

Desventaja de pandas profiling

El principal inconveniente de pandas profiling es su uso con grandes datasets. Con el aumento del tamaño de los datos también aumenta mucho el tiempo para generar el informe.

Una manera de solventar este problema es generar el informe a partir de solo una parte de todos los datos que tengamos. Es importante asegurarnos de que los datos seleccionados para generar el informe sean representativos de todos los datos que tengamos, por ejemplo podria darse el caso que las primeras X filas de datos contengan únicamente datos de una sola categoría. En este ejemplo nos convendría aleatorizar el orden de los datos y seleccionar una muestra representativa.

Un ejemplo con código:

from pandas_profiling import ProfileReport
#Solo utilizamos los primeros 10000 datos
prof = ProfileReport(df.sample(n=10000)) 
prof.to_file('informe.html')

Otra alternativa es usar el modo mínimo que fue introducido en la versión 2.4 de Pandas Profiling. Puedes comprobar qué versión tienes instalada con este comando:

pandas_profiling.version.__version__

Con el modo mínimo se generará un informe simplificado con menos información que el completo pero que se podrá generar relativamente rápido para un dataset grande. Este es el código a utilizar:

profile = ProfileReport(df, minimal=True)
profile.to_file("informe_min.html")

Albert Sanchez Lafuente

Estudié Ingenieria Industrial en la UPC. Continué mi formación en inteligencia artificial junto a la asociación Saturdays.AI de la que he formado parte del equipo de Barcelona desde sus inicios.