En primer lugar, para comenzar con un nuevo conjunto de datos, debe comprenderlo. Para hacer esto, es necesario, por ejemplo, encontrar los rangos de valores aceptados por las variables, sus tipos y tambi茅n conocer el n煤mero de valores faltantes.
La biblioteca de pandas nos proporciona muchas herramientas 煤tiles para realizar el An谩lisis Exploratorio de Datos (EDA). Pero antes de usarlos, generalmente necesita comenzar con funciones m谩s generales, como df.describe (). Es cierto que debe tenerse en cuenta que las posibilidades proporcionadas por tales funciones son limitadas, y las etapas iniciales de trabajar con cualquier conjunto de datos durante EDA son muy a menudo muy similares entre s铆.

El autor del material que publicamos hoy dice que no es fan谩tico de repetir acciones. Como resultado, en la b煤squeda de herramientas para realizar an谩lisis de datos exploratorios de manera r谩pida y eficiente, encontr贸 la biblioteca de
perfiles de pandas . Los resultados de su trabajo se expresan no en forma de ciertos indicadores individuales, sino en forma de un informe HTML bastante detallado que contiene la mayor parte de la informaci贸n sobre los datos analizados que puede necesitar saber antes de comenzar a trabajar m谩s de cerca con ellos.
Aqu铆 consideraremos las caracter铆sticas de usar la biblioteca de perfiles de pandas usando el ejemplo del conjunto de datos Titanic.
An谩lisis de datos de exploraci贸n de pandas
Decid铆 experimentar con perfiles de pandas en el conjunto de datos Titanic debido al hecho de que tiene datos de diferentes tipos y debido a los valores faltantes en 茅l. Creo que la biblioteca de perfiles de pandas es especialmente interesante en los casos en que los datos a煤n no se han borrado y requieren un procesamiento adicional, dependiendo de sus caracter铆sticas. Para realizar con 茅xito dicho procesamiento, debe saber d贸nde comenzar y qu茅 buscar. Aqu铆 es donde las funciones de perfil de pandas son 煤tiles.
Para comenzar, importamos los datos y usamos pandas para obtener indicadores de estad铆sticas descriptivas:
# import pandas as pd import pandas_profiling import numpy as np # df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv') # df.describe()
Despu茅s de ejecutar este fragmento de c贸digo, obtiene lo que se muestra en la siguiente figura.
M茅tricas de estad铆sticas descriptivas utilizando herramientas est谩ndar de pandasAunque contiene mucha informaci贸n 煤til, no hay todo lo que sea interesante para aprender sobre los datos que se estudian. Por ejemplo, podemos suponer que en el marco de datos, en la estructura
DataFrame
, hay 891
DataFrame
. Si necesita verificar esto, necesitar谩 otra l铆nea de c贸digo que determine el tama帽o del marco. Aunque estos c谩lculos no son particularmente intensivos en recursos, su repetici贸n constante necesariamente conducir谩 a la p茅rdida de tiempo, que probablemente se gasta mejor en la limpieza de datos.
An谩lisis exploratorio de datos utilizando perfiles pandas
Ahora haga lo mismo usando pandas-perfiling:
pandas_profiling.ProfileReport(df)
La implementaci贸n de la l铆nea de c贸digo anterior le permitir谩 generar un informe con indicadores de an谩lisis de datos exploratorios. El c贸digo que se muestra arriba conducir谩 a la conclusi贸n de la informaci贸n de datos encontrados, pero se puede hacer para que el resultado sea un archivo HTML, que, por ejemplo, se puede mostrar a alguien.
La primera parte del informe contendr谩 la secci贸n Descripci贸n general, que proporciona informaci贸n b谩sica sobre los datos (n煤mero de observaciones, n煤mero de variables, etc.). Adem谩s, contendr谩 una lista de advertencias que notificar谩n al analista sobre a qu茅 debe prestar especial atenci贸n. Estas advertencias pueden ser una pista sobre d贸nde puede concentrar sus esfuerzos al limpiar sus datos.
Resumen de la secci贸n de informesAn谩lisis exploratorio de variables
Detr谩s de la secci贸n Descripci贸n general del informe, puede encontrar informaci贸n 煤til sobre cada variable. Entre otras cosas, incluyen peque帽os diagramas que describen la distribuci贸n de cada variable.
Informaci贸n de variables num茅ricas de edadComo puede ver en el ejemplo anterior, el perfil de pandas nos brinda algunos indicadores 煤tiles, como el porcentaje y el n煤mero de valores faltantes, as铆 como indicadores de estad铆sticas descriptivas que ya hemos visto. Como la
Age
es una variable num茅rica, la visualizaci贸n de su distribuci贸n en forma de histograma nos permite concluir que tenemos una distribuci贸n en 谩ngulo recto.
Cuando se considera una variable categ贸rica, los indicadores mostrados son ligeramente diferentes de los encontrados para la variable num茅rica.
Informaci贸n variable de categor铆a de sexoEs decir, en lugar de encontrar el promedio, el m铆nimo y el m谩ximo, la biblioteca de perfiles de pandas encontr贸 el n煤mero de clases. Como
Sex
es una variable binaria, sus valores est谩n representados por dos clases.
Si, como yo, le gusta investigar el c贸digo, entonces puede estar interesado en c贸mo exactamente la biblioteca de perfiles de pandas calcula estos indicadores. Saber esto, dado que el c贸digo de la biblioteca est谩 abierto y disponible en GitHub, no es tan dif铆cil. Como no soy un gran fan谩tico del uso de "cajas negras" en mis proyectos, mir茅 el c贸digo fuente de la biblioteca. Por ejemplo, aqu铆 est谩 el mecanismo para procesar variables num茅ricas representadas por la funci贸n
describe_numeric_1d :
def describe_numeric_1d(series, **kwargs): """Compute summary statistics of a numerical (`TYPE_NUM`) variable (a Series). Also create histograms (mini an full) of its distribution. Parameters ---------- series : Series The variable to describe. Returns ------- Series The description of the variable as a Series with index being stats keys. """ # Format a number as a percentage. For example 0.25 will be turned to 25%. _percentile_format = "{:.0%}" stats = dict() stats['type'] = base.TYPE_NUM stats['mean'] = series.mean() stats['std'] = series.std() stats['variance'] = series.var() stats['min'] = series.min() stats['max'] = series.max() stats['range'] = stats['max'] - stats['min'] # To avoid to compute it several times _series_no_na = series.dropna() for percentile in np.array([0.05, 0.25, 0.5, 0.75, 0.95]): # The dropna() is a workaround for https://github.com/pydata/pandas/issues/13098 stats[_percentile_format.format(percentile)] = _series_no_na.quantile(percentile) stats['iqr'] = stats['75%'] - stats['25%'] stats['kurtosis'] = series.kurt() stats['skewness'] = series.skew() stats['sum'] = series.sum() stats['mad'] = series.mad() stats['cv'] = stats['std'] / stats['mean'] if stats['mean'] else np.NaN stats['n_zeros'] = (len(series) - np.count_nonzero(series)) stats['p_zeros'] = stats['n_zeros'] * 1.0 / len(series) # Histograms stats['histogram'] = histogram(series, **kwargs) stats['mini_histogram'] = mini_histogram(series, **kwargs) return pd.Series(stats, name=series.name)
Aunque este fragmento de c贸digo puede parecer bastante grande y complejo, de hecho, comprenderlo es muy simple. El punto es que en el c贸digo fuente de la biblioteca hay una funci贸n que determina los tipos de variables. Si result贸 que la biblioteca cumpli贸 con una variable num茅rica, la funci贸n anterior encontrar谩 los indicadores que consideramos. Esta funci贸n utiliza operaciones est谩ndar de pandas para trabajar con objetos del tipo
Series
, como
series.mean()
. Los resultados del c谩lculo se almacenan en el diccionario de
stats
. Los histogramas se generan utilizando una versi贸n adaptada de la funci贸n
matplotlib.pyplot.hist
. La adaptaci贸n tiene como objetivo permitir que la funci贸n funcione con varios tipos de conjuntos de datos.
Indicadores de correlaci贸n y muestra de los datos estudiados.
Despu茅s de los resultados del an谩lisis de variables, el perfil de pandas, en la secci贸n Correlaciones, muestra las matrices de correlaci贸n de Pearson y Spearman.
Matriz de correlaci贸n de PearsonSi es necesario, es posible, en la l铆nea de c贸digo que comienza la formaci贸n del informe, establecer los valores umbral utilizados para calcular la correlaci贸n. Al hacer esto, puede indicar qu茅 fuerza de correlaci贸n se considera importante para su an谩lisis.
Finalmente, el informe de perfil de pandas, en la secci贸n Muestra, muestra, como ejemplo, una pieza de datos tomada desde el comienzo del conjunto de datos. Este enfoque puede llevar a sorpresas desagradables, ya que las primeras observaciones pueden ser una muestra que no refleja las caracter铆sticas de todo el conjunto de datos.
Secci贸n que contiene datos de muestraComo resultado, no recomiendo prestar atenci贸n a esta 煤ltima secci贸n. En cambio, es mejor usar el
df.sample(5)
, que seleccionar谩 al azar 5 casos del conjunto de datos.
Resumen
Resumiendo lo anterior, se puede observar que la biblioteca de perfiles de pandas proporciona al analista algunas caracter铆sticas 煤tiles que ser谩n 煤tiles en los casos en que necesite obtener r谩pidamente una idea general de los datos o enviar a alguien un informe sobre el an谩lisis de datos de inteligencia. Al mismo tiempo, se realiza un trabajo real con datos, teniendo en cuenta sus caracter铆sticas, como si no se utilizara el perfil de pandas de forma manual.
Si desea ver c贸mo se ve todo el an谩lisis de inteligencia de datos en un cuaderno Jupyter, eche un vistazo a
esto que mi proyecto cre贸 usando nbviewer. Y en
este repositorio de GitHub puedes encontrar el c贸digo apropiado.
Estimados lectores! 驴C贸mo comienzas a analizar nuevos conjuntos de datos?