Primeiro de tudo, para começar com um novo conjunto de dados, você precisa entendê-lo. Para fazer isso, é necessário, por exemplo, descobrir os intervalos de valores aceitos pelas variáveis, seus tipos e também descobrir o número de valores ausentes.
A biblioteca do pandas nos fornece muitas ferramentas úteis para executar a 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 (). É verdade que deve-se notar que as possibilidades fornecidas por essas funções são limitadas e os estágios iniciais do trabalho com qualquer conjunto de dados durante a EDA são muitas vezes muito semelhantes entre si.

O autor do material que estamos publicando hoje diz que não é fã de ações repetidas. Como resultado, em busca de ferramentas para realizar análise exploratória de dados de maneira rápida e eficiente, ele encontrou a biblioteca de
criação de perfis de pandas . Os resultados de seu trabalho são expressos não na forma de determinados indicadores individuais, mas na forma de um relatório HTML bastante detalhado contendo a maioria das informações sobre os dados que estão sendo analisadas que você pode precisar saber antes de começar a trabalhar mais de perto com eles.
Aqui, consideraremos os recursos do uso da biblioteca de criação de perfil do pandas usando o exemplo do conjunto de dados do Titanic.
Análise de dados de exploração do Pandas
Decidi experimentar o perfil de pandas no conjunto de dados do Titanic devido ao fato de ele ter dados de tipos diferentes e por causa dos valores ausentes. Acredito que a biblioteca de criação de perfis de pandas é especialmente interessante nos casos em que os dados ainda não foram limpos e requerem processamento adicional, dependendo de seus recursos. Para executar com êxito esse processamento, você precisa saber por onde começar e o que procurar. É aqui que os recursos de criação de perfil de pandas são úteis.
Para começar, importamos os dados e usamos pandas para obter indicadores de estatística descritiva:
# import pandas as pd import pandas_profiling import numpy as np # df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv') # df.describe()
Depois de executar esse trecho de código, você obtém o que é mostrado na figura a seguir.
Métricas de estatística descritiva usando ferramentas padrão do pandasEmbora contenha muitas informações úteis, não há tudo o que seria interessante aprender sobre os dados que estão sendo estudados. Por exemplo, podemos assumir que no quadro de dados, na estrutura
DataFrame
, existem 891
DataFrame
. Se você precisar verificar isso, precisará de outra linha de código que determine o tamanho do quadro. Embora esses cálculos não sejam particularmente intensivos em recursos, sua repetição constante levará necessariamente à perda de tempo, o que provavelmente é melhor gasto na limpeza de dados.
Análise exploratória de dados usando perfil de pandas
Agora faça o mesmo usando o perfil de pandas:
pandas_profiling.ProfileReport(df)
A implementação da linha de código acima permitirá gerar um relatório com indicadores de análise exploratória de dados. O código mostrado acima levará à conclusão das informações encontradas sobre os dados, mas isso pode ser feito para que o resultado seja um arquivo HTML, que, por exemplo, possa ser mostrado a alguém.
A primeira parte do relatório conterá a seção 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, ele conterá uma lista de avisos que notificam o analista sobre o que você deve prestar atenção especial. Esses avisos podem servir como uma dica sobre onde você pode concentrar seus esforços ao limpar dados.
Visão geral da seção de relatórioAnálise Variável Exploratória
Por trás da seção Visão geral do relatório, você pode encontrar informações úteis sobre cada variável. Entre outras coisas, eles incluem pequenos diagramas que descrevem a distribuição de cada variável.
Informações variáveis numéricas da idadeComo você pode ver no exemplo anterior, a criação de perfis de pandas nos fornece alguns indicadores úteis, como a porcentagem e o número de valores ausentes, bem como indicadores de estatística descritiva que já vimos. Como a
Age
é uma variável numérica, a visualização de sua distribuição na forma de um histograma nos permite concluir que temos uma distribuição em ângulo reto.
Ao considerar uma variável categórica, os indicadores exibidos são ligeiramente diferentes daqueles encontrados para a variável numérica.
Informações sobre variáveis categóricas de sexoOu seja, em vez de encontrar a média, o mínimo e o máximo, a biblioteca de criação de perfis de pandas encontrou o número de classes. Como
Sex
é uma variável binária, seus valores são representados por duas classes.
Se você, como eu, gosta de pesquisar o código, pode estar interessado em saber exatamente como a biblioteca de criação de perfis de pandas calcula esses indicadores. Descobrir isso, já que o código da biblioteca está aberto e disponível no GitHub, não é tão difícil. Como não sou muito fã de usar "caixas pretas" em meus projetos, observei o código-fonte da biblioteca. Por exemplo, aqui está o mecanismo para processar variáveis numéricas representadas pela função
discover_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 amplo e complexo, de fato, entendê-lo é muito simples. O ponto é que no código fonte da biblioteca existe uma função que determina os tipos de variáveis. Se a biblioteca encontrou uma variável numérica, a função acima encontrará os indicadores que consideramos. 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 no dicionário de
stats
. Os histogramas são gerados usando uma versão adaptada da função
matplotlib.pyplot.hist
. A adaptação visa permitir que a função trabalhe com vários tipos de conjuntos de dados.
Indicadores de correlação e amostra dos dados estudados
Após os resultados da análise de variáveis, o perfil de pandas, na seção Correlações, exibe as matrizes de correlação de Pearson e Spearman.
Matriz de correlação de PearsonSe necessário, é possível, na linha de código que inicia a formação do relatório, definir os valores limite usados no cálculo da correlação. Ao fazer isso, você pode indicar qual força de correlação é considerada importante para sua análise.
Por fim, o relatório de criação de perfil de pandas, na seção Amostra, exibe, como exemplo, uma parte dos dados obtidos desde o início do conjunto de dados. Essa abordagem pode levar a surpresas desagradáveis, pois as primeiras observações podem ser uma amostra que não reflete os recursos de todo o conjunto de dados.
Seção contendo dados de amostraComo resultado, não recomendo prestar atenção a esta última seção. Em vez disso, é melhor usar o
df.sample(5)
, que selecionará aleatoriamente 5 casos do conjunto de dados.
Sumário
Resumindo o exposto, note-se que a biblioteca de criação de perfis de pandas fornece ao analista alguns recursos úteis que serão úteis nos casos em que você precise obter rapidamente uma ideia geral geral dos dados ou enviar a alguém um relatório sobre análise de dados de inteligência. Ao mesmo tempo, é realizado um trabalho real com os dados, levando em consideração seus recursos, como sem o uso manual de perfis de pandas.
Se você quiser dar uma olhada em como toda a análise de inteligência dos dados se parece em um notebook Jupyter - dê uma olhada
nesse meu projeto criado com o nbviewer. E
neste repositório GitHub você pode encontrar o código apropriado.
Caros leitores! Como você começa a analisar novos conjuntos de dados?