Exploratory Data Analysis (EDA): Aprenda Definitivamente como Extrair Valiosos Insights de Bases de Dados Reais

Exploratory Data Analysis (EDA) que significa Análise Exploratória de Dados é definido como uma abordagem para a exploração minuciosa dos dados que se deseja analisar.

Tambem conhecida como EDA, essa técnica vem sendo algo essencial no dia a dia do Cientista de dados

Você já deu de cara com uma base de dados superinteressante e pensou como poderia explorar seus dados?

Já ficou inquieto com uma ideia que gostaria de validar mas não sabe por onde começar?

Ou mesmo após rascunhar uma análise ainda não consegue visualizar da maneira apropriada aquela informação?

Então este artigo é pra você que como todo Cientista de Dados já passou por isso.

Neste artigo você vai aprender diversas técnicas de EDA e como aplicá-las em um problema real.

Resumo da ópera:

Se você já gostou do assunto desse artigo, não deixe de compartilhar com seus amigos para que cada vez mais pessoas aprendam a dominam as técnicas de EDA.

Aproveite e assine nossa lista para ficar sempre atualizado com novas postagens.

Coloque o seu e-mail abaixo para receber gratuitamente as atualizações do blog!

Exploratory Data Analysis

eda-exploratory-data-analysis

EDA é uma abreviação para Exploratory Data Analysis

Esta é uma tarefa que consiste em analisar bases de dados e extrair informação útil dos dados.

A análise parte desde a exploração descritiva dos dados como quantidade de registros e valores faltantes até uma exploração visual com o objetivo de representar melhor os dados em formatos mais intuitivos.

Para realizar o EDA normalmente se utilizam técnicas estatísticas como medir a dispersão dos dados, verificação de dependência entre atributos, detecção de anomalias, entre outras.

Anomalias normalmente sao definidas como valores muito distantes da média, que podem ser ruído ocasionado devido a um erro na coleta ou transformação dos dados.

Visualizar corretamente os dados é de extrema importância durante a Análise Exploratória, pois permite o Cientista de Dados representar a informação em um modelo visual mais fácil e intuitivo facilitando a interpretação.

Já foi comprovado que conseguimos entender e interpretar melhor uma comparação de valores numéricos através de uma representação de um simples gráfico

Imagine um gráfico de barras, é intuitivo que quanto maior a barra, maior é o valor numérico e a diferença no tamanho entre cada barra do gráfico nos diz sobre a comparação dos valores.

Imaginar sobre localidades ou densidade em uma determinada região através de apenas valores de coordenadas geográficas é praticamente impossível, pois esses números não nos diz quase nada.

Mas quando renderizamos essas coordenadas em um mapa como pontos e intensificamos as cores destes pontos de acordo com seu aglomerado fica simples observar uma densidade forte ou fraca, fica fácil observar localidades onde não ocorreram registros etc.

Você concorda que a informação fica BEM mais simples de interpretar do que apenas através de um amontoado de números em uma planilha?

Além da aplicação de técnicas estatísticas e visualização de dados durante a Análise Exploratória precisamos coletar e cruzar dados de fontes diversas com o objetivo de complementar a informação ou mesmo validar uma hipótese.

Para isso podem ser utilizados dados a partir da Web, repositórios remotos, redes sociais etc.

EDA é uma etapa do processo de Data Science fundamental e muito importante para o sucesso do projeto.

Projeto Consumidor.gov.br

eda-consumidor-gov-br

Neste artigo iremos explorar uma base de dados do sistema Consumidor.gov.br que é um canal para o registro de reclamações do consumidor sobre um produto ou serviço adquirido.

No site do projeto é definido como “serviço público que permite a interlocução direta entre consumidores e empresas para solução de conflitos de consumo pela internet”.

De uma forma simplificada é como o Reclame aqui.

O consumidor acessa o portal e registra sua reclamação sobre um produto ou serviço adquirido

A empresa tem um prazo para responder a reclamação e por fim, o consumidor faz uma avaliação da resposta recebida.

O processo é simples e fornece um benefício extraordinário para o consumidor que ganha visibilidade.

O sistema permite a consulta de alguns indicadores interessantes por empresa como índice de solução de reclamações, índice de satisfação do cliente, percentual de reclamações respondidas entre outros.

Com uma interface simples é possível ter uma visão geral sobre a eficiência da empresa para a resolução dos problemas de seus consumidores. 😉

O serviço é de responsabilidade da Secretaria Nacional do Consumidor e os dados são disponibilizados conforme o programa dados abertos.

Dessa forma temos acesso às bases de dados com as informações das reclamações registradas no portal.

Esse site é um prato cheio para quem quer fazer EDA com diversos tipos de dados.

Bases de Dados e Código

Conforme falado anteriormente a base de dados que iremos utilizar podemos baixar no portal do Consumidor.gov.br neste link ou na página do programa dados abertos.

A base de dados é composta por diversos atributos sobre cada reclamação.

Atributos como Região, UF e Cidade (onde a reclamação foi registrada), Sexo e Faixa Etária do consumidor, Data de Finalização da reclamação, o Tempo de Resposta em dias que corresponde ao tempo que a empresa demorou para responder o consumidor, o Nome Fantasia e o Segmento de Mercado que a empresa atua

Além disso tem de outras informações relacionadas ao problema, como: forma de aquisição do produto ou serviço e a nota atribuída pelo consumidor ao atendimento da empresa.

Veja na imagem abaixo.

eda-base-dados-consumidor-gov

O portal não disponibiliza o texto das reclamações dos consumidores juntamente dos dados das reclamações mas pode ser verificado no menu Relato do Consumidor no link Indicadores.

Neste artigo iremos utilizar a base Dados – 2º Semestre/2016 baixada a partir do portal.

Essa amostra contém os dados de todas as reclamações finalizadas no 2º semestre de 2016.

No portal contém todas as bases de dados do projeto.

Selecionei uma amostra menor para ficar mais rápido o processamento já que as amostras são divididas por um período de seis meses e contém dados suficientes para a análise.

Ok, tudo pronto!

Agora vamos fazer EDA na pratica!

As primeiras análises

eda-analises

Para fazer EDA usaremos a biblioteca Pandas do Python que você pode aprender como instalar essa e outras bibliotecas no artigo 10 Melhores Ferramentas e Bibliotecas para Trabalhar com Mineração de Dados e Big Data.

Com as ferramentas instaladas vamos iniciar a nossa análise importando algumas bibliotecas para a manipulação dos dados como o pandas e o matplotlib para a visualização de gráficos.

Após importar as bibliotecas vamos ler a base de dados e imprimir uma contagem dos registros para cada atributo.

Veja como é fácil fazer isso com o pandas

eda-contagem-registros-consumidor-gov

No comando acima estamos lendo o arquivo da base de dados utilizando o método read_csv do pandas utilizando como separador de colunas o caracter ‘;’ (ponto e vírgula) e definindo o encoding ‘latin1’.

Logo após, fazemos a contagem dos registros por atributos utilizando o método count.

Podemos observar que toda a base de dados contém um total de 162.584 registros com exceção do atributo Nota do Consumidor que possui 95.118 registros.

Muita coisa né? Vamos explorar mais um pouco..

Validando algumas hipóteses

eda-validando-hipoteses

Uma hipótese conforme o dicionário se define como uma suposição ou uma possibilidade considerada válida.

Usaremos este termo para nos referir a algumas idéias que queremos validar ou verificar através dos dados.

Essas serão as tarefas de EDA que iremos trabalhar, vamos chama-las de hipóteses.

Vamos avaliar algumas como:

  • H1 – Existe alguma predominância de sexo nas reclamações? Ou melhor, qual quantidade de reclamações por sexo?
  • H2 – Qual a faixa etária média dos consumidores?
  • H3 – Qual o grupo de problema mais comum e o segmento de mercado mais afetado?
  • H4 – Existe alguma correlação entre o tempo de resposta e a nota do consumidor?
  • H5 – Qual a proporção de reclamações registradas e que não são resolvidas ?

Qual a quantidade de reclamações por sexo ?

Para responder a hipótese H1 iremos usar a função de agregação do pandas value_counts() nos dados do atributo Sexo, dá uma olhada.

eda-reclamacoes-por-sexo

Claramente existe um número bem maior de reclamações de consumidores do sexo masculino (95.462) que feminino (67.122).

Pra quem achava que mulher reclama mais que homem hein…

Qual a faixa etária média dos consumidores ?

Para responder a hipótese H2 vamos agrupar os dados por sexo e fazer uma contagem de registros por faixa etária, assim vai ficar mais interessante.

Veja como é simples usar o método groupby

eda-faixa-etaria-media-consumidores

Observe que a faixa etária média entre os consumidores do sexo masculino e feminino se concentra entre os 21 a 30 anos.

Como podemos interpretar esses resultados ?

Será que o baixo volume de reclamações de consumidores com faixa etária até os 20 anos seja devido a descrença no sistema?

E os consumidores com faixa etária mais de 70 anos será que não tem problemas com as empresas? Ou estamos diante de um problema de acessibilidade ?

Nossa base de dados é bem limitada a respeito dos consumidores, só temos essas informações.

Agora vamos explorar sobre os problemas das reclamações.

Qual o grupo de problema mais comum ?

Para responder a hipótese H3 vamos concentrar nos atributos e Grupo Problema e Segmento de Mercado.

O grupo de problema conforme o dicionário de dados disponibilizado pelo portal se refere ao “agrupamento do qual faz parte o problema classificado na reclamação”.

Para descobrir o grupo de problema mais comum usamos mais uma vez o método value_counts()

eda-grupo-problema-mais-comun

Liderando o rank disparado com 67.074 reclamações temos o grupo Cobrança e Contestação.

Este grupo contém reclamações com problemas como Cobrança por serviço/produto não contratado / não reconhecido / não solicitado”, “Dificuldade na devolução de valores pagos / reembolso / retenção de valores” e “Dificuldade na Renegociação / parcelamento de dívida” etc.

É aquela velha história dos seus créditos acabarem mais cedo do que o normal devido a um serviço de mensagens SMS que você não contratou … tenho certeza que você já passou por isso. (spoiler – Detected ;))

Vamos aprofundar um pouco mais nesse grupo de problema.

Qual o segmento de mercado mais afetado ?

Queremos saber qual o segmento de mercado com o maior número de reclamações do grupo de problema Cobrança e Contestação.

Veja como é simples fazer a filtragem e a contagem de registros no pandas.

Para visualizar de uma forma mais clara vamos plotar um gráfico com o código abaixo.

Na primeira linha inicializamos as variáveis fig e ax como a figura do gráfico e o objeto que representa os eixos.

Nas variáveis y_pos, values e segmentos armazenamos uma listagem com a quantidade de cada segmento de mercado, o total de reclamações e a listagem dos nomes.

Na linha 6 usamos o objeto ax para inicializar o gráfico do tipo barras horizontal através do método barh e passamos como parâmetro os valores de y_pos, values, align para definir o alinhamento e a cor das barras através do parâmetro color.

Nas linhas 7 e 8 definimos os valores do eixo y e seus labels utilizando o método set_ylabels.

Nas linhas seguintes invertemos os valores do eixo y através do método invert_yaxis(), defininos o label do eixo x e título do gráfico.

eda-grafico-cobranca-contestacao-por-segmento-mercado

Observe que a grande maioria de empresas com reclamações registradas com problemas do tipo Cobrança e Contestação são Operadoras de Telecomunicações

Precisa falar mais alguma coisa ?  (EDA é massa)

Vamos dar nome aos bois.

Veja e tire suas próprias conclusões..

eda-grafico-rank-empresas-reclamacoes

Existe alguma correlação entre o tempo de resposta e a nota do consumidor ?

A hipótese H4 surge da idéia de que o tempo que a empresa leva para responder o consumidor pode impactar na sua nota final.

Será que tem fundamento ?

Para tentar validar essa suposição utilizaremos uma técnica chamada Coeficiente de Correlação de Pearson.

A técnica basicamente mede o grau de correlação e sua direção entre duas variáveis de escala métrica.

O coeficiente assume valores entre -1  e 1 onde o valor 1 indica uma correlação perfeitamente positiva entre as duas variáveis, -1 indica uma correlação perfeitamente negativa e o valor 0 representa que não existe correlação linear entre as variáveis.

Voltando para o nosso contexto, uma correlação negativa alta com valores entre -0.7 a -0.9 pode indicar que quanto menor o tempo de resposta maior a nota atribuída à empresa pelo consumidor.

Levando em consideração a existência de uma correlação negativa o valor do tempo de resposta deve diminuir e a nota do consumidor aumentar.

Calculando a correlação e visualizando os dados

Vamos visualizar a correlação entre as variáveis com o gráfico abaixo.

eda-correlacao-variaveis

Observe o canto inferior esquerdo do gráfico que contém a correlação entre as variáveis Nota do Consumidor e Tempo Resposta com a cor vermelha bem fraca algo em torno de 0.1 se baseando na escala.

Nas extremidades onde a cor vermelha está bem escura mostra a correlação entre as próprias variáveis, por exemplo, Nota do Consumidor com Nota do Consumidor neste caso temos sempre uma correlação perfeitamente positiva igual a 1.

O gráfico acima foi gerado através do código abaixo.

O código é bem simples, primeiramente importamos a biblioteca para visualização de dados seaborn.

Logo em seguida definimos a dimensão da figura e excluímos a coluna Total da base de dados com o método drop.

Executamos a correlação entre as variáveis através do método corr do pandas que faz o cálculo de correlação entre as variáveis numéricas em todo o dataframe.

Para finalizar inicializamos o gráfico do tipo heatmap passando como parâmetro a matriz de correlação gerada e armazenada na variável corr.

Neste momento você deve estar pensando: Tá, entendi, mas eu queria ver o valor da correlação tem como?

Claro que tem, para isso simplesmente imprima o valor da variável corr com o comando print, veja.

Observe que o valor da correlação entre as variáveis Nota do Consumidor e Tempo de Resposta é -0.118709.

Podemos ver que existe uma correlação extremamente fraca, quase inexistente.

Entendendo melhor os resultados

Para entender melhor os resultados vamos analisar mais a fundo estes dois atributos.

Veja os dados de cada atributo com os gráficos de densidade abaixo:

eda-gráficos-densidade-nota-consumidor-tempo-resposta

Observe o gráfico com os dados do atributo Nota do Consumidor e veja que a maior concentração dos dados estão nas notas 1 e 5.

Já  o gráfico a direita com os dados do atributo Tempo Resposta mostra que a maior concentração dos dados estão por volta dos 8 a 10 dias.

Estas representações explicam a baixa correlação entre os atributos pois temos muitos dados com valores nos extremos e não distribuídos.

Qual a proporção de reclamações registradas e que não são resolvidas ?

Já vimos que o número de reclamações registradas no sistema é grande mas fica a pergunta; Quantas dessas reclamações registradas não são efetivamente resolvidas?

Essa é a provocação da hipótese H5 – Qual a proporção de reclamações registradas e que não são resolvidas ?

Para tentar validar essa hipótese vamos visualizar os dados baseado no atributo da Avaliação da Reclamação que especifica se a reclamação foi resolvida ou não.

Vamos selecionar o total de reclamações e a quantidade de reclamações não resolvidas por segmento de mercado das empresas através do código abaixo.

Com os dados selecionados podemos renderizar o gráfico com o código abaixo.

eda-grafico-total-reclamacoes-reclamacoes-nao-resolvidas

Analisando resultados

Antes de analisarmos o gráfico, vamos entender o código que o gerou.

No primeiro bloco de código fazemos o agrupamento dos dados por segmentos de mercado e retornamos a contagem de reclamações de cada grupo com o método value_counts(), um velho conhecido nosso já 😛

Em seguida excluímos os segmentos com menos de 20 reclamações e para pegar a quantidade de reclamações não resolvidas filtramos os dados novamente mas dessa vez especificamos apenas os segmentos selecionados anteriormente e armazenados na variável x.

Essa essa filtragem é feita pelo método isin() que permite filtrarmos um atributo a apenas aos valores igual aos valores passados por parâmetro.

Com os os registros filtrados pegamos a contagem de reclamações por segmento novamente e armazenamos na variável x1.

Agora com os dados em mãos, apenas renderizamos o gráfico passando o x com o total de reclamações e x1 com o total de reclamações não resolvidas para cada segmento de mercado.

Simples demais né?

Analisando de forma rápida o gráfico, vemos que a quantidade de reclamações não resolvidas é pequena em relação ao total de reclamações para a maioria dos segmentos.

Porém, se fizermos uma análise mais crítica a barra de reclamações não resolvidas deveria ser mínima ou inexistente.

Se focarmos no segmento de mercado Comércio Eletrônico, por exemplo, não precisamos de uma medida precisa para notar que cerca de 40% das reclamações registradas não são resolvidas. 🙁

Outro ponto curioso é que apesar da barra de reclamações não resolvidas do segmento Operadoras de Telecomunicações… ser pequena, ela fica bem próxima dos 10.000 registros.

Observem também os segmentos Bancos de Dados e Cadastros de Consumidores e Bancos Financeiras e Administradoras de Cartões que apresentam uma taxa de 20% e 25% aproximadamente.

No mínimo, é curioso, não acha ?

Fazer EDA é também aprender com os dados..

Visualizando os dados de um jeito diferente

eda-visualizando-dados-de-um-jeito-diferente

Como já diz o famoso ditado “O Pior Cego É Aquele Que Não Quer Ver

Fazer EDA é explorar o dado tanto que acabamos descobrindo insights valiosos que estão “escondidos” nos dados.

Assim podemos fazer quem não quer ver, visualizar!

Pensando nisso vamos expandir nossa base de dados com o objetivo de potencializar nossa visão dos dados. Essa é a parte de Analysis do EDA

Aproveitando as informações sobre a cidade e estado de cada reclamação, podemos analisar os dados sobre a perspectiva geográfica o que pode nos revelar algumas informações interessantes como:

As reclamações são distribuídas em todo Brasil ? ou existe uma maior concentração em determinadas regiões ?

Para visualizar essas informações vamos utilizar uma base de dados do IBGE para recuperar as coordenadas geográficas de cada cidade e seu respectivo estado.

Vamos nessa ?

Utilizei a base de dados fornecida pelo IBGE com a relação de municípios e suas coordenadas geográficas disponível aqui.

Basicamente o que faremos é pesquisar na base de dados de municípios a latitude e longitude para o par cidade e estado em nossa base de dados e plotar no mapa.

Primeiramente importamos a base de dados com o pandas, veja:

Logo em seguida precisamos fazer um tratamento nos dados para retirar as pontuações nos nomes das cidades.

Para retirar as pontuações criamos a função remover_acentos() que recebe um texto como parâmetro, utiliza uma expressão regular para remover os acentos e pontuações de cada caractere e retorna a palavra completa.

Aplicamos a função nos valores do atributo Cidade e armazenamos os nomes sem pontuação no atributo Cidade2.

Com os dados devidamente tratados chegou a hora de plotar o mapa e visualizar as informações.

Utilizaremos a biblioteca folium para a renderização de gráficos em formato de mapa, essa biblioteca é muito simples e contém muitas funcionalidades interessantes, vale a pena dar uma olhada.

Vamos entender o script abaixo.

Começamos importando a biblioteca folium e seu método plugins e logo em seguida inicializamos o mapa passando as coordenadas para focar no território brasileiro.

Criamos uma lista chamada coordenadas e iteramos em cada cidade e estado em nossa base de dados, limitados a um total de 20 mil registros para não sobrecarregar demais o servidor.

Para cada cidade e seu respectivo estado unimos os nomes separados por um sinal de hífen, consultamos sua latitude e longitude na base de municípios e adicionamos na lista.

Por fim renderizamos o mapa com a lista de coordenadas gerada conforme imagens abaixo.

eda-grafico-reclamacoes-territorio-brasileiro

Observe na imagem que temos reclamações distribuídas por quase todo o território brasileiro com uma maior concentração nas capitais.

O mapa gerado é interativo e permite que analisamos os dados conforme vamos focando ou expandindo o zoom.

Também é possível exportar o mapa para um arquivo html com o comando abaixo.

Explore o mapa e analise a distribuição das reclamações por cada região do Brasil.

Conclusão

Exploratory Data Analysis ou simplesmente EDA é sem dúvidas uma tarefa essencial para qualquer projeto envolvendo Data Science.

Saber explorar a base de dados e visualizar a faixa de valores dos seus atributos, identificar valores faltantes e anomalias além de medir a disperção dos dados são tarefas fundamentais no dia a dia do Cientista de Dados.

Neste artigo fizemos EDA em um base de dados real e aprendemos seu conceito e definição, seus benefícios, ferramentas e onde aplicar as técnicas.

Extraímos na prática, insights interessantes através de técnicas de visualização de dados e estatística.

E você, já trabalhou com EDA ? Ou tem alguma ideia que gostaria de explorar? nos conte aqui nos comentários.

Se você gostou desse artigo compartilhe com seus amigos e assine nossa lista de e-mail para ficar sempre atualizado sobre novas publicações. 

Deixe seu comentário e nos conte o que achou.

Um abraço!

Coloque o seu e-mail abaixo para receber gratuitamente as atualizações do blog!

  • Felipe Santana

    ..