Aceleração da análise exploratória de dados usando a biblioteca pandas-profiling

Ao começar a trabalhar com um novo conjunto de dados, é fundamental compreendê-lo. Para isso, por exemplo, é necessário descobrir os intervalos de valores que as variáveis podem assumir, seus tipos e também saber quantos valores estão ausentes.

A biblioteca pandas nos oferece uma variedade de ferramentas úteis para realizar análise exploratória de dados (Exploratory Data Analysis, EDA). No entanto, antes de utilizá-las, geralmente é necessário começar com funções mais gerais, como df.describe(). Vale ressaltar que as capacidades oferecidas por funções desse tipo são limitadas, e as etapas iniciais de trabalho com qualquer conjunto de dados durante a EDA muitas vezes são bastante semelhantes entre si.

Aceleração da análise exploratória de dados usando a biblioteca pandas-profiling

O autor do material que publicamos hoje menciona que não é fã de realizar tarefas repetitivas. Por isso, em busca de ferramentas que permitam realizar análises exploratórias de dados de forma rápida e eficaz, ele encontrou a biblioteca pandas-profiling. Os resultados do seu trabalho não são apresentados como indicadores isolados, mas na forma de um relatório HTML bastante detalhado, que contém a maioria das informações sobre os dados analisados que podem ser necessárias antes de avançar para uma análise mais aprofundada.

Aqui, serão abordadas as particularidades do uso da biblioteca pandas-profiling com o conjunto de dados Titanic.

Análise exploratória de dados com pandas

Decidi experimentar o pandas-profiling no conjunto de dados Titanic devido à diversidade de tipos de dados que ele contém e à presença de valores ausentes. Acredito que a biblioteca pandas-profiling é especialmente interessante em casos onde os dados ainda não estão limpos e necessitam de um tratamento adicional, que depende das suas características. Para realizar esse tipo de tratamento com sucesso, é necessário saber por onde começar e a que prestar atenção. É aqui que as funcionalidades do pandas-profiling se tornam úteis.

Para começar, vamos importar os dados e usar o pandas para obter as métricas de 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 a execução deste trecho de código, teremos o que é mostrado na próxima imagem.

Aceleração da análise exploratória de dados usando a biblioteca pandas-profiling
As métricas de estatísticas descritivas obtidas com as ferramentas padrão do pandas

Embora haja uma abundância de informações úteis aqui, não está tudo o que seria interessante saber sobre os dados em análise. Por exemplo, pode-se supor que, no DataFrame, na estrutura DataFrame, existem 891 linhas. Se isso precisa ser verificado, será necessária mais uma linha de código que determine o tamanho do DataFrame. Embora esses cálculos não sejam particularmente exigentes em termos de recursos, a repetição constante deles levará inevitavelmente à perda de tempo, que provavelmente seria melhor gasta na limpeza dos dados.

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

Agora faremos o mesmo utilizando pandas-profiling:

pandas_profiling.ProfileReport(df)

A execução da linha de código apresentada acima permitirá gerar um relatório com métricas de análise exploratória de dados. O código mostrado acima resultará na saída de informações encontradas sobre os dados, mas pode-se fazê-lo de forma que o resultado seja um arquivo HTML, que, por exemplo, pode ser mostrado a alguém.

A primeira parte do relatório conterá a seção Overview (Visão Geral), que fornece informações básicas sobre os dados (número de observações, número de variáveis, e assim por diante). Além disso, conterá uma lista de avisos, alertando o analista sobre o que merece atenção especial. Esses avisos podem servir como dicas sobre onde concentrar esforços na limpeza dos dados.

Aceleração da análise exploratória de dados usando a biblioteca pandas-profiling
Seção do relatório Overview

Análise exploratória das variáveis

Após a seção Overview, o relatório pode revelar informações úteis sobre cada variável. Elas incluem, entre outras coisas, pequenos gráficos que descrevem a distribuição de cada variável.

Aceleração da análise exploratória de dados usando a biblioteca pandas-profiling
Informações sobre a variável numérica Idade

Como pode ser visto no exemplo anterior, o pandas-profiling nos dá vários indicadores úteis, como a porcentagem e a quantidade de valores ausentes, bem como as métricas de estatísticas descritivas que já vimos. Como Idade é uma variável numérica, a visualização de sua distribuição em forma de histograma nos permite concluir que ela apresenta uma distribuição assimétrica à direita.

Ao considerar uma variável categórica, os indicadores apresentados diferem um pouco daqueles encontrados para a variável numérica.

Aceleração da análise exploratória de dados usando a biblioteca pandas-profiling
Informações 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 pandas-profiling encontrou o número de classes. Como Sexo — uma variável binária, seus valores são representados por duas classes.

Se você, assim como eu, gosta de explorar o código, pode se interessar por como exatamente a biblioteca pandas-profiling calcula essas métricas. Descobrir isso, considerando que o código da biblioteca é aberto e acessível no GitHub, não é tão difícil. Como não sou muito fã de utilizar 'caixas pretas' em meus projetos, olhei o código-fonte da biblioteca. Por exemplo, veja como é o mecanismo de processamento de variáveis numéricas, apresentado pela função describe_numeric_1d:

def describe_numeric_1d(series, **kwargs):
    """Computa estatísticas de resumo de uma variável numérica (`TYPE_NUM`) (uma Série).
    Também cria histogramas (mini e completo) de sua distribuição.
    Parâmetros
    ----------
    series : Série
        A variável a ser descrita.
    Retorna
    -------
    Série
        A descrição da variável como uma Série com índice sendo as chaves das estatísticas.
    """
    # Formata um número como uma porcentagem. Por exemplo, 0.25 será convertido em 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']
    # Para evitar calcular várias vezes
    _series_no_na = series.dropna()
    for percentile in np.array([0.05, 0.25, 0.5, 0.75, 0.95]):
        # O dropna() é uma solução alternativa para 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)
    # Histogramas
    stats['histogram'] = histogram(series, **kwargs)
    stats['mini_histogram'] = mini_histogram(series, **kwargs)
    return pd.Series(stats, name=series.name)

Embora este fragmento de código possa parecer bastante grande e complexo, na verdade, é muito simples de entender. O que acontece é que no código-fonte da biblioteca há uma função que determina os tipos de variáveis. Se a biblioteca encontrar uma variável numérica, a função acima encontrará as métricas que discutimos. Esta função utiliza operações padrão do pandas para trabalhar com objetos do tipo Série, como series.mean(). Os resultados dos cálculos 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 trabalhar com diferentes tipos de conjuntos de dados.

Indicadores de correlação e amostra dos dados analisados

Após a análise das variáveis pelo pandas-profiling, na seção Correlações, serão exibidas as matrizes de correlação de Pearson e Spearman.

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

Se necessário, é possível, na linha de código que inicia a geração do relatório, definir os valores de 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.

E, finalmente, no relatório do pandas-profiling, na seção Amostra, um fragmento de dados, retirado do início do conjunto de dados, é exibido como exemplo. Essa abordagem pode levar a surpresas indesejadas, pois as primeiras observações podem representar uma amostra que não reflete as características de todo o conjunto de dados.

Aceleração da análise exploratória de dados usando a biblioteca pandas-profiling
Seção que contém a amostra dos dados analisados

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

Resultados

Em resumo, pode-se notar que a biblioteca pandas-profiling oferece algumas funcionalidades úteis que são valiosas em casos onde é necessário obter rapidamente uma visão geral das informações ou passar um relatório de análise exploratória de dados para outra pessoa. No entanto, o trabalho real com os dados, levando em consideração suas particularidades, é feito, assim como sem o pandas-profiling, manualmente.

Se você deseja ver como fica toda a análise exploratória de dados em um único notebook Jupyter — confira este meu projeto, criado com o nbviewer. E no isso repositório do GitHub você pode encontrar o código correspondente.

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

Aceleração da análise exploratória de dados usando a biblioteca pandas-profiling

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster