Acelere a análise exploratoria de datos usando a biblioteca de perfiles de pandas

O primeiro paso ao comezar a traballar cun novo conxunto de datos é entendelo. Para iso, cómpre, por exemplo, coñecer os intervalos de valores aceptados polas variables, os seus tipos e tamén coñecer o número de valores que faltan.

A biblioteca de pandas ofrécenos moitas ferramentas útiles para realizar análises exploratorias de datos (EDA). Pero antes de usalos, normalmente cómpre comezar con funcións máis xerais como df.describe(). Non obstante, hai que ter en conta que as capacidades proporcionadas por tales funcións son limitadas e que as etapas iniciais de traballar con calquera conxunto de datos ao realizar EDA adoitan ser moi similares entre si.

Acelere a análise exploratoria de datos usando a biblioteca de perfiles de pandas

O autor do material que publicamos hoxe di que non lle gusta realizar accións repetitivas. Como resultado, na procura de ferramentas para realizar de forma rápida e eficiente análise de datos exploratorios, atopou a biblioteca pandas-perfil. Os resultados do seu traballo exprésanse non en forma de determinados indicadores individuais, senón en forma dun informe HTML bastante detallado que contén a maior parte da información sobre os datos analizados que quizais necesite coñecer antes de comezar a traballar máis estreitamente con el.

Aquí veremos as características do uso da biblioteca de perfiles de pandas usando o conxunto de datos Titanic como exemplo.

Análise exploratoria de datos utilizando pandas

Decidín experimentar co perfil de pandas no conxunto de datos Titanic debido aos diferentes tipos de datos que contén e á presenza de valores que faltan nel. Creo que a biblioteca de perfiles de pandas é especialmente interesante nos casos nos que os datos aínda non foron limpados e requiren un procesamento posterior dependendo das súas características. Para realizar con éxito tal procesamento, cómpre saber por onde comezar e a que prestar atención. Aquí é onde son útiles as capacidades de creación de perfiles de pandas.

En primeiro lugar, importamos os datos e usamos pandas para obter estatísticas descritivas:

# импорт необходимых пакетов
import pandas as pd
import pandas_profiling
import numpy as np

# импорт данных
df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv')

# вычисление показателей описательной статистики
df.describe()

Despois de executar este anaco de código, obterá o que se mostra na seguinte figura.

Acelere a análise exploratoria de datos usando a biblioteca de perfiles de pandas
Estatísticas descritivas obtidas mediante ferramentas estándar de pandas

Aínda que aquí hai moita información útil, non contén todo o que sería interesante saber sobre os datos en estudo. Por exemplo, pódese supoñer que nun marco de datos, nunha estrutura DataFrame, hai 891 liñas. Se é necesario verificar isto, é necesaria outra liña de código para determinar o tamaño do cadro. Aínda que estes cálculos non son especialmente intensivos en recursos, repetilos todo o tempo está obrigado a perder tempo que probablemente se podería gastar mellor na limpeza dos datos.

Análise exploratoria de datos mediante a elaboración de perfiles de pandas

Agora imos facer o mesmo usando pandas-profiling:

pandas_profiling.ProfileReport(df)

Ao executar a liña de código anterior xerarase un informe con indicadores exploratorios de análise de datos. O código que se mostra arriba mostrará os datos atopados, pero podes facer que saia un ficheiro HTML que podes mostrar a alguén, por exemplo.

A primeira parte do informe conterá un apartado Visión xeral, que ofrece información básica sobre os datos (número de observacións, número de variables, etc.). Tamén conterá unha lista de alertas, notificando ao analista as cousas ás que debe prestar especial atención. Estas alertas poden proporcionar pistas sobre onde pode centrar os seus esforzos de limpeza de datos.

Acelere a análise exploratoria de datos usando a biblioteca de perfiles de pandas
Sección de informe xeral

Análise de variables exploratorias

Debaixo da sección Visión xeral do informe podes atopar información útil sobre cada variable. Inclúen, entre outras cousas, pequenos gráficos que describen a distribución de cada variable.

Acelere a análise exploratoria de datos usando a biblioteca de perfiles de pandas
Sobre a variable numérica da idade

Como podedes ver no exemplo anterior, a elaboración de perfiles de pandas ofrécenos varios indicadores útiles, como a porcentaxe e o número de valores que faltan, así como as medidas estatísticas descritivas que xa vimos. Porque Age é unha variable numérica, a visualización da súa distribución en forma de histograma permítenos concluír que temos unha distribución sesgada cara á dereita.

Cando se considera unha variable categórica, os resultados de saída son lixeiramente diferentes dos atopados para unha variable numérica.

Acelere a análise exploratoria de datos usando a biblioteca de perfiles de pandas
Sobre a variable categórica Sexo

É dicir, en lugar de atopar a media, o mínimo e o máximo, a biblioteca de perfiles de pandas atopou o número de clases. Porque Sex — unha variable binaria, os seus valores están representados por dúas clases.

Se che gusta examinar o código coma min, quizais che interese saber como calcula exactamente estas métricas a biblioteca de perfiles de pandas. Descubrir isto, dado que o código da biblioteca está aberto e dispoñible en GitHub, non é tan difícil. Como non son un gran fan de usar caixas negras nos meus proxectos, boteille un ollo ao código fonte da biblioteca. Por exemplo, así é o mecanismo para procesar variables numéricas, representado pola función describe_numérico_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)

Aínda que este anaco de código pode parecer bastante grande e complexo, en realidade é moi sinxelo de entender. A cuestión é que no código fonte da biblioteca hai unha función que determina os tipos de variables. Se resulta que a biblioteca atopou unha variable numérica, a función anterior atopará as métricas que estabamos mirando. Esta función usa operacións pandas estándar para traballar con obxectos de tipo Series, como series.mean(). Os resultados do cálculo gárdanse nun dicionario stats. Os histogramas xéranse usando unha versión adaptada da función matplotlib.pyplot.hist. A adaptación ten como obxectivo garantir que a función poida funcionar con distintos tipos de conxuntos de datos.

Indicadores de correlación e datos mostrais estudados

Despois dos resultados da análise das variables, pandas-profiling, na sección Correlacións, mostrará as matrices de correlación de Pearson e Spearman.

Acelere a análise exploratoria de datos usando a biblioteca de perfiles de pandas
Matriz de correlación de Pearson

Se é necesario, pode, na liña de código que desencadea a xeración do informe, establecer os indicadores dos valores límite utilizados ao calcular a correlación. Ao facelo, pode especificar que forza de correlación se considera importante para a súa análise.

Finalmente, o informe de perfil de pandas, na sección Mostra, mostra, a modo de exemplo, un dato tomado desde o inicio do conxunto de datos. Este enfoque pode dar lugar a sorpresas desagradables, xa que as primeiras observacións poden representar unha mostra que non reflicte as características de todo o conxunto de datos.

Acelere a análise exploratoria de datos usando a biblioteca de perfiles de pandas
Sección que contén datos de mostra en estudo

Como resultado, non recomendo prestar atención a esta última sección. Pola contra, é mellor usar o comando df.sample(5), que seleccionará aleatoriamente 5 observacións do conxunto de datos.

Resultados de

En resumo, a biblioteca de perfiles de pandas ofrécelle ao analista unhas capacidades útiles que lle resultarán útiles nos casos en que necesites facerte rapidamente unha idea aproximada dos datos ou transmitir un informe de análise de intelixencia a alguén. Ao mesmo tempo, realízase un traballo real con datos, tendo en conta as súas características, como sen usar o perfilado de pandas, manualmente.

Se queres botar unha ollada ao aspecto de todas as análises de datos de intelixencia nun caderno de Jupyter, bótalle unha ollada a isto o meu proxecto creado usando nbviewer. E en isto Podes atopar o código correspondente nos repositorios de GitHub.

Queridos lectores! Por onde comezas a analizar novos conxuntos de datos?

Acelere a análise exploratoria de datos usando a biblioteca de perfiles de pandas

Fonte: www.habr.com

Engadir un comentario