Acelere el análisis de datos exploratorios utilizando la biblioteca de perfiles pandas

El primer paso al empezar a trabajar con un nuevo conjunto de datos es comprenderlo. Para hacer esto, necesita, por ejemplo, conocer los rangos de valores aceptados por las variables, sus tipos y también conocer el número de valores faltantes.

La biblioteca pandas nos proporciona muchas herramientas útiles para realizar análisis de datos exploratorios (EDA). Pero antes de usarlas, normalmente necesitas comenzar con funciones más generales como df.describe(). Sin embargo, cabe señalar que las capacidades proporcionadas por dichas funciones son limitadas y que las etapas iniciales de trabajo con cualquier conjunto de datos al realizar EDA suelen ser muy similares entre sí.

Acelere el análisis de datos exploratorios utilizando la biblioteca de perfiles pandas

El autor del material que publicamos hoy dice que no le gusta realizar acciones repetitivas. Como resultado, en busca de herramientas para realizar de manera rápida y eficiente análisis de datos exploratorios, encontró la biblioteca perfiles de pandas. Los resultados de su trabajo no se expresan 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 quizás necesite conocer antes de comenzar a trabajar más de cerca con ellos.

Aquí veremos las características del uso de la biblioteca pandas-profiling usando el conjunto de datos Titanic como ejemplo.

Análisis exploratorio de datos utilizando pandas.

Decidí experimentar con el perfilado de pandas en el conjunto de datos del Titanic debido a los diferentes tipos de datos que contiene y a la presencia de valores faltantes en él. Creo que la biblioteca pandas-profiler es especialmente interesante en los casos en los que los datos aún no se han limpiado y requieren un procesamiento posterior dependiendo de sus características. Para realizar dicho procesamiento con éxito, necesita saber por dónde empezar y a qué prestar atención. Aquí es donde las capacidades de creación de perfiles de pandas resultan útiles.

Primero, importamos los datos y usamos pandas para obtener 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, obtendrá lo que se muestra en la siguiente figura.

Acelere el análisis de datos exploratorios utilizando la biblioteca de perfiles pandas
Estadísticas descriptivas obtenidas utilizando herramientas estándar de pandas.

Aunque aquí hay mucha información útil, no contiene todo lo que sería interesante saber sobre los datos en estudio. Por ejemplo, se podría suponer que en un marco de datos, en una estructura DataFrame, hay 891 líneas. Si es necesario verificar esto, se requiere otra línea de código para determinar el tamaño del marco. Si bien estos cálculos no requieren muchos recursos, repetirlos todo el tiempo seguramente desperdiciará tiempo que probablemente podría emplearse mejor limpiando los datos.

Análisis exploratorio de datos utilizando pandas-profiling.

Ahora hagamos lo mismo usando pandas-profile:

pandas_profiling.ProfileReport(df)

La ejecución de la línea de código anterior generará un informe con indicadores de análisis de datos exploratorios. El código que se muestra arriba generará los datos encontrados, pero puede hacer que genere un archivo HTML que pueda mostrárselo a alguien, por ejemplo.

La primera parte del informe contendrá una sección de descripción general, que brindará información básica sobre los datos (número de observaciones, número de variables, etc.). También contendrá una lista de alertas, notificando al analista sobre cosas a las que debe prestar especial atención. Estas alertas pueden proporcionar pistas sobre dónde puede centrar sus esfuerzos de limpieza de datos.

Acelere el análisis de datos exploratorios utilizando la biblioteca de perfiles pandas
Sección de informe general

Análisis exploratorio de variables

Debajo de la sección Descripción general del informe puede encontrar información útil sobre cada variable. Incluyen, entre otras cosas, pequeños gráficos que describen la distribución de cada variable.

Acelere el análisis de datos exploratorios utilizando la biblioteca de perfiles pandas
Acerca de la variable numérica de edad

Como puede ver en el ejemplo anterior, pandas-profiling nos brinda varios indicadores útiles, como el porcentaje y la cantidad de valores faltantes, así como las medidas estadísticas descriptivas que ya hemos visto. Porque 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 sesgada hacia la derecha.

Al considerar una variable categórica, los resultados de salida son ligeramente diferentes de los encontrados para una variable numérica.

Acelere el análisis de datos exploratorios utilizando la biblioteca de perfiles pandas
Acerca de la variable categórica Sexo

Es decir, en lugar de encontrar el promedio, mínimo y máximo, la biblioteca de perfiles de pandas encontró el número de clases. Porque Sex — una variable binaria, sus valores están representados por dos clases.

Si le gusta examinar el código como lo hago yo, es posible que le interese saber cómo exactamente la biblioteca de perfiles de pandas calcula estas métricas. Descubrir 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 admirador del uso de cajas negras en mis proyectos, eché un vistazo al código fuente de la biblioteca. Por ejemplo, así es como se ve el mecanismo para procesar variables numéricas, representado por la función describir_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, en realidad es muy sencillo de entender. El caso es que en el código fuente de la biblioteca hay una función que determina los tipos de variables. Si resulta que la biblioteca encontró una variable numérica, la función anterior encontrará las métricas que estábamos viendo. Esta función utiliza operaciones estándar de pandas para trabajar con objetos de tipo Series, como series.mean(). Los resultados del cálculo se almacenan en un diccionario. stats. Los histogramas se generan utilizando una versión adaptada de la función. matplotlib.pyplot.hist. La adaptación tiene como objetivo garantizar que la función pueda funcionar con diferentes tipos de conjuntos de datos.

Indicadores de correlación y datos muestrales estudiados.

Después de los resultados del análisis de las variables, pandas-profiling, en la sección Correlaciones, mostrará las matrices de correlación de Pearson y Spearman.

Acelere el análisis de datos exploratorios utilizando la biblioteca de perfiles pandas
Matriz de correlación de Pearson

Si es necesario, puede, en la línea de código que desencadena la generación del informe, establecer los indicadores de los valores de umbral utilizados al calcular la correlación. Al hacer esto, puede especificar qué fuerza de correlación se considera importante para su análisis.

Finalmente, el informe de perfilado de pandas, en la sección Muestra, muestra, a modo de ejemplo, un dato tomado del principio del conjunto de datos. Este enfoque puede dar lugar a sorpresas desagradables, ya que las primeras observaciones pueden representar una muestra que no refleja las características de todo el conjunto de datos.

Acelere el análisis de datos exploratorios utilizando la biblioteca de perfiles pandas
Sección que contiene datos de muestra en estudio.

Por lo que no recomiendo prestar atención a este último apartado. En su lugar, es mejor utilizar el comando df.sample(5), que seleccionará aleatoriamente 5 observaciones del conjunto de datos.

resultados

En resumen, la biblioteca pandas-profiling le brinda al analista algunas capacidades útiles que serán útiles en los casos en que necesite obtener rápidamente una idea aproximada de los datos o transmitir un informe de análisis de inteligencia a alguien. Al mismo tiempo, se realiza un trabajo real con datos, teniendo en cuenta sus características, como sin utilizar pandas-profiling, de forma manual.

Si desea ver cómo se ven todos los análisis de datos de inteligencia en un cuaderno Jupyter, eche un vistazo a este Mi proyecto creado usando nbviewer. Y en Este Puedes encontrar el código correspondiente en los repositorios de GitHub.

Estimados lectores! ¿Por dónde empezar a analizar nuevos conjuntos de datos?

Acelere el análisis de datos exploratorios utilizando la biblioteca de perfiles pandas

Fuente: habr.com

Añadir un comentario