Acelere a análise exploratória de dados usando a biblioteca pandas-profiling

O primeiro passo ao começar a trabalhar com um novo conjunto de dados é entendê-lo. Para fazer isso, você precisa, por exemplo, descobrir os intervalos de valores aceitos pelas variáveis, seus tipos, e também saber a quantidade de valores faltantes.

A biblioteca pandas nos fornece muitas ferramentas úteis para realizar análise exploratória de dados (EDA). Mas antes de usá-los, geralmente você precisa começar com funções mais gerais, como df.describe(). No entanto, deve-se notar que os recursos fornecidos por tais funções são limitados e os estágios iniciais de trabalho com quaisquer conjuntos de dados ao realizar EDA são muitas vezes muito semelhantes entre si.

Acelere a análise exploratória de dados usando a biblioteca pandas-profiling

O autor do material que publicamos hoje diz que não gosta de realizar ações repetitivas. Como resultado, em busca de ferramentas para realizar análises exploratórias de dados de forma rápida e eficiente, ele encontrou a biblioteca perfil de pandas. Os resultados do seu trabalho não são expressos na forma de determinados indicadores individuais, mas na forma de um relatório HTML bastante detalhado contendo a maior parte das informações sobre os dados analisados ​​​​que você pode precisar saber antes de começar a trabalhar mais de perto com eles.

Aqui veremos os recursos de uso da biblioteca pandas-profiling usando o conjunto de dados Titanic como exemplo.

Análise exploratória de dados usando pandas

Decidi experimentar o perfil do pandas no conjunto de dados do Titanic devido aos diferentes tipos de dados que ele contém e à presença de valores ausentes nele. Acredito que a biblioteca pandas-profiling seja especialmente interessante nos casos em que os dados ainda não foram limpos e requerem processamento adicional dependendo de suas características. Para realizar esse processamento com êxito, você precisa saber por onde começar e no que prestar atenção. É aqui que os recursos de criação de perfil do pandas são úteis.

Primeiro, importamos os dados 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()

Após executar este trecho de código, você obterá o que é mostrado na figura a seguir.

Acelere a análise exploratória de dados usando a biblioteca pandas-profiling
Estatísticas descritivas obtidas usando ferramentas padrão do pandas

Embora haja aqui muita informação útil, não contém tudo o que seria interessante saber sobre os dados em estudo. Por exemplo, pode-se supor que num quadro de dados, numa estrutura DataFrame, existem 891 linhas. Se isso precisar ser verificado, será necessária outra linha de código para determinar o tamanho do quadro. Embora esses cálculos não consumam muitos recursos, repeti-los o tempo todo certamente desperdiçará um tempo que provavelmente poderia ser melhor gasto na limpeza dos dados.

Análise exploratória de dados usando pandas-profiling

Agora vamos fazer o mesmo usando o pandas-profiling:

pandas_profiling.ProfileReport(df)

A execução da linha de código acima gerará um relatório com indicadores exploratórios de análise de dados. O código mostrado acima irá gerar os dados encontrados, mas você pode fazer com que ele gere um arquivo HTML que pode ser mostrado a alguém, por exemplo.

A primeira parte do relatório conterá uma seção Visão Geral, fornecendo informações básicas sobre os dados (número de observações, número de variáveis, etc.). Também conterá uma lista de alertas, notificando o analista sobre coisas às quais deve prestar atenção especial. Esses alertas podem fornecer pistas sobre onde você pode concentrar seus esforços de limpeza de dados.

Acelere a análise exploratória de dados usando a biblioteca pandas-profiling
Seção do relatório de visão geral

Análise Exploratória de Variáveis

Abaixo da seção Visão geral do relatório você pode encontrar informações úteis sobre cada variável. Incluem, entre outras coisas, pequenos gráficos que descrevem a distribuição de cada variável.

Acelere a análise exploratória de dados usando a biblioteca pandas-profiling
Sobre a variável numérica idade

Como você pode ver no exemplo anterior, o perfil do pandas nos fornece vários indicadores úteis, como a porcentagem e o número de valores ausentes, bem como as medidas estatísticas descritivas que já vimos. Porque Age é uma variável numérica, a visualização da sua distribuição em forma de histograma permite-nos concluir que temos uma distribuição assimétrica para a direita.

Ao considerar uma variável categórica, os resultados de saída são ligeiramente diferentes daqueles encontrados para uma variável numérica.

Acelere a análise exploratória de dados usando a biblioteca pandas-profiling
Sobre a variável categórica Sexo

Ou seja, em vez de encontrar a média, o mínimo e o máximo, a biblioteca de criação de perfil do pandas encontrou o número de classes. Porque Sex — uma variável binária, seus valores são representados por duas classes.

Se você gosta de examinar o código como eu, pode estar interessado em saber como exatamente a biblioteca pandas-profiling calcula essas métricas. Descobrir isso, visto que o código da biblioteca é aberto e está disponível no GitHub, não é tão difícil. Como não sou muito fã de usar caixas pretas em meus projetos, dei uma olhada no código-fonte da biblioteca. Por exemplo, é assim que se parece o mecanismo de processamento de variáveis ​​​​numéricas, representado pela função descreva_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)

Embora esse trecho de código possa parecer bastante grande e complexo, na verdade é muito simples de entender. A questão é que no código-fonte da biblioteca existe uma função que determina os tipos de variáveis. Se descobrir que a biblioteca encontrou uma variável numérica, a função acima encontrará as métricas que estávamos observando. Esta função usa operações padrão do pandas para trabalhar com objetos do tipo Series, como series.mean(). Os resultados do cálculo são armazenados em um dicionário stats. Os histogramas são gerados usando uma versão adaptada da função matplotlib.pyplot.hist. A adaptação visa garantir que a função possa funcionar com diferentes tipos de conjuntos de dados.

Indicadores de correlação e dados amostrais estudados

Após os resultados da análise das variáveis, o pandas-profiling, na seção Correlações, exibirá as matrizes de correlação de Pearson e Spearman.

Acelere a análise exploratória de dados usando a biblioteca pandas-profiling
Matriz de correlação de Pearson

Se necessário, você pode, na linha de código que aciona a geração do relatório, definir os indicadores dos valores limite utilizados no cálculo da correlação. Ao fazer isso, você pode especificar qual força de correlação é considerada importante para sua análise.

Por fim, o relatório pandas-profiling, na seção Amostra, exibe, como exemplo, um dado retirado do início do conjunto de dados. Esta abordagem pode levar a surpresas desagradáveis, uma vez que as primeiras observações podem representar uma amostra que não reflete as características de todo o conjunto de dados.

Acelere a análise exploratória de dados usando a biblioteca pandas-profiling
Seção contendo dados amostrais em estudo

Como resultado, não recomendo prestar atenção a esta última seção. Em vez disso, é melhor usar o comando df.sample(5), que selecionará aleatoriamente 5 observações do conjunto de dados.

Resultados de

Resumindo, a biblioteca pandas-profiling oferece ao analista alguns recursos úteis que serão úteis nos casos em que você precisa obter rapidamente uma ideia aproximada dos dados ou passar um relatório de análise de inteligência para alguém. Ao mesmo tempo, o trabalho real com os dados, tendo em conta as suas características, é realizado, como sem a utilização do pandas-profiling, manualmente.

Se você quiser dar uma olhada em como são todas as análises de dados de inteligência em um notebook Jupyter, dê uma olhada em este meu projeto criado usando nbviewer. E em esta Você pode encontrar o código correspondente nos repositórios GitHub.

Caros leitores! Por onde você começa a analisar novos conjuntos de dados?

Acelere a análise exploratória de dados usando a biblioteca pandas-profiling

Fonte: habr.com

Adicionar um comentário