Exploratory Data Analysis com Python e Pandas Profiling

Ana Claudia Garcia
Indicium Engineering
9 min readSep 22, 2020

Quando trabalhamos com dados, um dos primeiros e principais desafios que enfrentamos é decidir por onde começar a exploração deles. Pensando nisso, neste post vamos te explicar como iniciar uma Exploratory Data Analysis com Python e Pandas Profiling. Confira!

Ao começar uma análise exploratória é comum que algumas perguntas surjam como:

  • Quais visualizações fazer?
  • Quais ferramentas usar para identificar o comportamento das diferentes variáveis em um dataset?
  • Qual é a inter-relação entre as variáveis, ou seja, como cada uma delas se relaciona com as outras?

Existem técnicas estatísticas para te ajudar nisso.

Técnicas como distribuição, média e desvio padrão, por exemplo, podem ser usadas para avaliar, a partir de números, como as variáveis se comportam. Por outro lado, é possível usar visualizações e gráficos para identificar padrões de uma forma mais visual.

Esta fase do trabalho com dados é chamada de Exploratory Data Analysis (EDA). Continue a leitura e aprenda o que precisa saber para usá-la a seu favor.

Exploratory Data Analysis (EDA)

EDA é extremamente importante para um bom planejamento de soluções que podem ser obtidas a partir dos dados e para identificar desafios como fragilidades e inconsistências desses dados.

Os principais objetivos do EDA são:

1) Obter uma rápida descrição da base de dados — Considerar O número de linhas e de colunas, dados faltantes, tipos de dados que estamos trabalhando e uma visualização inicial dessa base.

2) Fazer a limpeza de dados corrompidos -Lidar com dados faltantes, identificar os tipos de dados inválidos e de valores incorretos.

3) Visualizar as distribuições de dados — Com auxílio de gráficos de barras, histogramas, boxplots.

4) Calcular e visualizar correlações entre variáveis — Através de mapas de calor (heatmaps), por exemplo.

No Python, as ferramentas mais populares utilizadas nesse processo são o Pandas Profiling, para manipulação dos dados, e o Matplotlib, para plotagem de gráficos.

Continue a leitura para saber como o Pandas Profiling pode te ajudar em cada uma dessas etapas.

EDA com Python e Pandas Profiling

Pandas Profiling é uma biblioteca open source, disponível no Github, que permite a elaboração de análises exploratórias com códigos simples.

Com ela, podemos gerar um relatório em html sobre nossos dados, de forma rápida e prática, usando basicamente três linhas de código.

Neste relatório, temos um resumo do nosso dataset que contém informações sobre cada atributo, suas correlações e amostra dos dados de forma simples. Dessa forma, mesmo quem não tem tanta familiaridade com linguagens de programação, pode usá-las para começar a fazer suas primeiras análises.

Como usar pandas profiling

Vamos mostrar adiante como executar essa ferramenta e as informações que conseguimos extrair disso.

Como base de dados, usaremos uma base de dados pública, que traz a qualidade dos vinhos tintos junto com algumas informações relacionadas ao produto.

Além disso, usaremos o Google Colab, um ambiente de notebooks que não demanda instalação e pode ser executado na nuvem. Portanto o notebook com todos os códigos utilizados e com os resultados pode ser acessado aqui.

Você pode trazer os seus dados para o notebook simplesmente fazendo upload do arquivo que está em seu computador, usando:

#importando o banco de dados a ser utilizado (comando necessário para o google colab)
from google.colab import files
uploaded = files.upload()

Aparecerá a opção de selecionar o arquivo desejado.

Selecione o botão e o arquivo será carregado para o ambiente do notebook.

Para a leitura do arquivo, basta utilizar a função read_csv, do pandas, normalmente:

#lendo o dataset no formato de um dataframe através da função read do pandas
dataset = pd.read_csv(‘winequality-red.csv’, sep=’;’) #realiza a leitura do banco de dados

Para você entender melhor o contexto do relatório que vamos apresentar, imprimimos abaixo as primeiras 5 linhas da base escolhida. Porém, o próprio pandas profiling traz essa visualização, como veremos.

#dando uma olhada inicial nos dados
dataset.head()

Como é possível observar, há diversas variáveis que podem ou não influenciar na qualidade de um vinho. Por isso, este dataset traz algumas informações importantes para esta exploração como acidez, fixa e volátil, níveis de ácido cítrico, açúcar residual, entre outros.

A partir daqui, inicia-se a jornada de compreender a natureza dos dados disponíveis, como eles se comportam e se relacionam.

E faremos isso de forma rápida e eficiente usando a ferramenta pandas-profiling.

Etapa 1: Instalando a biblioteca.

Para instalar a biblioteca no seu notebook basta utilizar a seguinte função:

!pip install pandas-profiling
!pip install — upgrade pandas-profiling

Etapa 2: Executando a função e gerando o relatório.

Com isso, basta chamar a função e aplicá-la ao dataset que indicamos anteriormente:

# importa a função da biblioteca
from pandas_profiling import ProfileReport

# executa a função que gera o relatório
profile = ProfileReport(dataset, title=”Wine Quality”)
# visualização do relatório
profile

Ao executar essa linha, você terá acesso a um relatório completo sobre seus dados com as seguintes seções:

Iremos analisar cada uma delas a seguir.

As 6 seções do Pandas Profiling

Agora vamos entender o poder do pandas-profiling, em 6 etapas:

  1. Overview
  2. Variables
  3. Interactions
  4. Correlations
  5. Missing Values
  6. Samples

Vamos por partes?

  • Overview

Nesta primeira parte é possível ter uma visão completa do nosso dataset, como número de linhas, número de colunas (variáveis), quantidade de valores faltantes (células nulas, NAs), linhas duplicadas e tamanho. Essas informações que também podem ser geradas utilizando um df.info(), por exemplo.

Além disso, a ferramenta também traz os tipos de variáveis que possuímos na nossa base de dados. Neste exemplo, ela identificou todos como numéricos.

Dica:

Caso quiséssemos definir a coluna qualidade como uma variável categórica, poderíamos alterar manualmente o tipo da coluna utilizando o pandas e rodar novamente o relatório.

Atenção!

No campo Warnings, o relatório já traz algumas coisas que teremos que tomar cuidado ao analisar o dataset. Com isso, é possível avaliar a necessidade ou não de fazer algum tratamento inicial nos dados, antes de iniciar a exploração.

Neste caso, por exemplo, o relatório identificou algumas coisas passíveis de ajustes:

  1. Excesso de linhas duplicadas: Dataset com 15% das linhas duplicadas
  2. Excesso de zeros: A coluna ‘citric acid’ possui muitos zeros.
  • Os zeros devem ser um ponto de atenção, porém não podem ser confundidos com valores faltantes.
  • A questão das linhas duplicadas pode ser resolvidas com o comando drop_duplicates(), da seguinte forma:

dataset = dataset.drop_duplicates()

Este é o resultado:

Percebe-se que o aviso sobre a coluna que possui muitos zeros persiste.

No entanto, uma nova informação foi adicionada ao relatório: agora, a coluna df_index possui valores únicos.

O que isso indica?

Agora é possível utilizá-la como uma chave de identificação de cada linha para manipulação desses dados.

No campo Reproduction temos a informação de performance com o tempo que a ferramenta levou para gerar o resultado e informações sobre a aplicação.

  • Variables

Esta seção mostra um resumo para cada variável do dataset.

Considere esta imagem como exemplo:

Aqui, nota-se que a variável densidade apresenta um comportamento normal.

Também podemos observar a média, valor máximo e mínimo.

Se clicarmos em “Toggle details”, por exemplo, o relatório da variável se estende e algumas informações adicionais são apresentadas.

Vejamos:

No campo Statistics, há uma relação dos principais fatores avaliados em análises de dados como valores dos quartis, medianas, variância, desvio padrão e outros.

Este é o tipo de informação que surgiria caso usássemos um df.describe() ao nosso dataset.

Além disso, para valores numéricos, a ferramenta traz automaticamente o plot de um histograma, como vemos abaixo. Para dados categóricos, um gráfico de barras é apresentado.

Por outro lado, o item Common values apresenta os principais valores iguais disponíveis no dataset analisado. Com isso, é possível ter uma ideia de grandeza, principalmente quando avaliamos variáveis categóricas.

Por último, ele lista os maiores e menores valores identificados na variável. Com isso, podemos identificar rapidamente alguns possíveis outliers que precisarão de nossa atenção mais tarde.

  • Interactions

Esta seção é importante pois permite observar, de uma forma bem ilustrativa, como uma variável varia em relação à outra sem necessidade de plotar gráfico a gráfico.

  • Correlations

Além da correlação padrão (Pearson) que geramos com o df.corr(), há também a correlação de Spearman e a correlação de Kendall.

  • Missing Values

Na aba Count da seção missing values, temos a quantidade de valores faltantes para cada uma das colunas, a visualização também pode ser renderizada em forma de matriz.

No Pandas, essas informações seriam extraídas com df.isnull().sum().

Como não temos valores faltantes neste conjunto de dados, todas as colunas da aba Count e da aba Matrix estão preenchidas.

  • Sample

E, por último, temos uma visualização das primeiras 10 linhas e das últimas 10 linhas do conjunto de dados, semelhante ao df.head(10) e df.tail(10) do Pandas.

O dataset escolhido como exemplo é muito simples.

Por isso vale destacar: outros desafios podem surgir com datasets maiores, no campo do big data.

Além disso, para economizar no processamento, é possível manipular alguns parâmetros da função. Por exemplo, uma das formas é impedir a função de executar algumas visualizações mais custosas, como da etapa de correlações.

Para isso, basta definir da seguinte forma:

profile = ProfileReport(df, minimal=True)

# Outra forma é definir o número de linhas que você quer trazer para a análise:

profile = ProfileReport(df.sample(n=10000))

Conclusão

No mundo de data science e analytics, quando trabalhamos com uma quantidade enorme de dados, com infinitas variáveis, precisamos de ferramentas para nos auxiliar. E o, pandas profiling é uma ótima alternativa que pode nos poupar algumas horas de trabalho para identificar os primeiros padrões e inconsistências nos data sets.

Lógico que o relatório, sozinho, não é capaz de atender a todas as situações, como identificar interações com variáveis categóricas, trazer validação de hipóteses específicas levantadas pelo analista ou cientista de dados, identificar outliers, entre outros.

Por exemplo: Se tivéssemos na base de dados a marca do vinho e quiséssemos avaliar como o fato de pertencer à marca X influencia na qualidade percebida do vinho, comparado a outro produtor Y.

Nossa ferramenta não poderia responder. Mas já saberíamos que temos uma variável qualitativa nominal, em formato de texto (string), contendo as marcas de vinho, uma coluna com uma variável qualitativa ordinal, em formato numérico, com números inteiros (integer).

Por isso, dependendo do objetivo da análise desses dados outras ferramentas podem ser necessárias.

Ainda assim, o pandas-profiling permite dar esse passo inicial, antes de levantarmos hipóteses sobre os nossos dados, nos permitindo entender o contexto que estamos sendo inseridos e possíveis pontos de cuidado.

Ao longo desse artigo apresentamos o que podemos tirar da biblioteca pandas-profiling, permitindo assim fazer a primeira exploração dos nossos dados de forma simples e prática.

Acha que faltou algo ou quer dar sua opinião? Comenta aí embaixo para discutirmos mais sobre isso.

Ah, não deixe nos seguir para saber mais sobre as outras etapas da exploração de dados e sobre outros assuntos do mundo da ciência de dados. Para ser avisado de nossas publicações por e-mail, basta se inscrever na nossa newsletter clicando aqui.

Referências:

BRATKOVICS, Christopher. Exploratory Data Analysis Tutorial in Python. 2019.

AFUENTE, Albert Sanchez. Exploratory Data Analysis with Pandas Profiling. 2020.

--

--

Ana Claudia Garcia
Indicium Engineering

Economista pela UFSC e Analista de Dados na Indicium Tech