Análise Exploratória de Dados (EDA) — InvestSP Prospect Advisor

A EDA é o primeiro, e mais importante, passo em qualquer projeto baseado em dados é olhar para os dados.

Larissa Akemi
9 min readJan 4, 2021

Um dos maiores desafios da ciência de dados é trabalhar os dados brutos e transforma-los em informação acionável.

Aqui vai alguns termos-chave para Tipos de Dados, retirados do livro “Estatística Prática para Cientistas de Dados” do autor Peter Bruce & Andrew Bruce:

  • Contínuos: dados que podem assumir qualquer valor em um intervalo (Intervalo, flutuação, numérico);
  • Discretos: dados que podem assumir apenas valores inteiros, como contagens (Inteiro, contagem);
  • Categóricos: dados que podem assumir apenas um conjunto específicos de valores representando um conjunto de possíveis categorias (enumeração, enumerado, fatores, nominal, politômico);
  • Binários: um caso especial de dados categóricos com apenas duas categorias de valores, podendo ser 0/1 ou verdadeiro/falso (dicotômico, lógico, indicador, booleano);
  • Ordinais: dado categórico que tem uma ordem explícita (fator ordenado).

Qual a importância da Análise Exploratória de Dados?

Bom, uma boa EDA vai te ajudar a responder algumas perguntas sobre o famoso conhecimento do negócio ou o mercado, além de dar conhecimento para ter uma melhor intuição sobre o dataset.

Neste caso, para o nosso estudo, a EDA vai nos ajudar a entender melhor o que podemos fazer com o dataset que escolhemos, quais escolhas devemos fazer que incluem limpeza de dados e feature engineering, ou seja, imputação de novos dados ou excluir dados incompletos e ruídos.

Logo após está análise, vamos conseguir dar continuidade ao nosso estudo de clusterização ao dataset da PIESP.

Por que nos importamos com uma taxonomia de tipos de dados?

Para a análise de dados e modelagem preditiva, o tipo de dado é importante para ajudar a determinar o tipo de exposição visual, análise de dados ou modelo estatístico. Inclusive, softwares de ciência de dados, como R e Python, utilizam esses tipos de dados para melhorar seu desempenho computacional.

Etapas da Análise Exploratória de Dados

Existem diversas formas de você fazer uma EDA, então não fique preso nas etapas deste artigo. Neste caso, vamos abordar como fizemos a nossa Análise diante a este estudo em especifico.

Primeiramente vamos importar a biblioteca “Pandas” e vamos utilizar o código pd.read para inserir o dataframe no notebook.

import pandas as pddf = pd.read_csv('arquivo.csv')

Ao inserirmos o arquivo csv, com os últimos dados atualizados do PIESP, iremos analisar o output do dataframe, com o atributo df.head() mostrando as primeiras linhas ou o df.tail() mostrando as últimas linhas do dataframe.

Já nesta primeira etapa, notamos que nem todas as linhas da coluna “Real (em milhões)” e “Dólar (em milhões)” tem o valor informado e iremos utilizar somente as linhas que contém este dado. Com isso, o código mostrado abaixo, servira para filtrar somente as linhas com “Sim” na coluna “Valor Informado”.

dfnome = df[df['Valor Informado']== 'Sim']

Agora vamos utilizar o atributo df.shape para inspecionar o número de linhas e colunas, fazendo um comparativo do antes e depois de termos selecionado apenas as linhas com “Sim” na coluna “Valor Informado”.

Houve uma diferença entre a quantidade de linhas em cada dataframe, sendo que no primeiro momento tínhamos 7671 linhas e agora estamos com 4196 linhas.

Antes de iniciarmos o próximo passo, vamos dar uma olhada nas colunas, com o método df.columns que retorna um objeto tipo Index. E utilizar o método df.info() , que apresenta o resumo completo do dataset: com quantidade de linhas e colunas, nome de cada coluna e qual o tipo de dados temos em cada coluna.

Imputação de novos dados

Iremos imputar novos dados categóricos para determinar o setor de cada “Empresa alvo do investimento”. Isso facilitará no processo de clusterização em outras etapas.

Exporte o arquivo em csv: aqui.

E como iremos imputar estes dados? Vamos criar a coluna “Setor” pelo método pd.merge , que irá mesclar coluna com coluna da “Empresa alvo do investimento”, entre as duas planilhas.

dfnovaplanilha = pd.merge(dfplanilha1, dfplanilha2, how='left', on='Nome da coluna que quer mesclar')

E agora surge outro questionamento, será que todas as linhas da coluna “Setor” com o valor de investimento informado estão preenchidas? Para encontrarmos esta resposta, vamos criar um novo dataset, filtrando somente as linhas nulas da coluna “Setor”, utilizando o .isnull() . E logo em seguida, com o atributo .value_counts() conseguimos verificar que faltam 24 linhas para serem preenchidas na coluna “Setor”.

“Ufaa!”, sabendo que faltam 24 linhas a serem preenchidas, tomamos uma das decisões mais difíceis na imputação de dados, que é preencher manualmente. Mas como são 24 linhas, isso foi fácil. Para transformar o dataframe em um arquivo em csv, utilizamos o nomedataframe.to_csv('nome do arquivo.csv', index=False) . E prontinho, o arquivo aparecerá na aba “Arquivos” e aperte em “Fazer download”.

Formatação dos números Float

Para formatar a coluna “Dólar (em milhões)” do tipo object para float64 com o método .astype(float), precisamos utilizar .str.replace e trocar “,” para “.”, somente assim conseguiremos transformar os dados em tipo numérico. E logo após, multiplicamos a coluna “Real (em milhões)” e “Dólar (em milhões)” por 1000000. Padronizando os dados desta forma, conseguiremos melhorar ainda mais o desempenho de alguns modelos.

Ao transformar a coluna “Dólar (em milhões)” em numérica do tipo float64, forçando a ignorar os erros, o pandas transforma automaticamente o que não é número em Nan.

Conhecendo os valores por campo com unique

Vamos nos aprofundar ainda mais no dataframe, inspecionando os dados de uma coluna e investigando os seus valores, assim podemos identificar possíveis erros de digitação, valores faltantes ou até mesmo valores com “-”.

Para isto, o atributo df['nome'].unique() retorna um arranjo numpy com todo os valores de uma coluna.

Felizmente, não encontramos nada de errado nas colunas.

Agrupamentos e seleções

Bom, entramos na etapa em que vamos nos aprofundar ainda mais em nossas análises, conhecer combinações de variáveis, gerar insights e levantar algumas hipóteses.

Um das formas que escolhemos usar o agrupamento, é por meio do df.groupby() . Note que esse método exige uma função agregadora usando uma ou mais operações com o .agg(['lista de agregações']) , podendo utilizar o .mean() , .median() , .min() , entre outras.

Neste caso, calculamos a soma da coluna “Real (em milhões)” para a combinação do group by do total de investimentos por ano e trimestre.

Notamos que em quase todos os anos, no primeiro trimestre, há um valor de investimento maior, mas para melhorar ainda mais nossas análises, iremos fazer um .describe() para obter as estatísticas resumidas, bem como para ver o contador de dados não nulos desse group by.

E aqui, group by do total de investimento por ano.

Agora, vamos visualizar a soma de “Reais (em milhões)” por município, destacando os TOP30 municípios com os valores mais altos.

E como iremos fazer isto?

Primeiramente, criamos um group by com uma ordem decrescente dos municípios.

Logo em seguida, com o list(df.index) criaremos uma lista com os 30 munícipios com maior valor de investimento.

O que iremos fazer com os munícipios que ficaram fora desta lista? Eles não vão ficar de fora, vamos inseri-los em um grupo de “Outros” em nossa lista, especificando com o .apply(lambda).

Por fim, criamos o group by dos TOP30.

Investigando grupo de dados do total de investimentos por ano por região, utilizando o método .groupby . Notamos que a região com maior investimento é a RM São Paulo, que se constituí pelos munícipios de Barueri, Cajamar, Diadema, Francisco Morato, Guarulhos, Mogi das Cruzes, Santana de Paraíba, Santo André, São Bernardo do Campo, Mauá, Osasco, Ribeirão Pires e Taboão da Serra.

E por último, além de utilizarmos o group by analisando a soma do valor de investimento em empresas alvos de investimento, o crosstab aceita argumentos que pode transformar todos os dados em percentual. Aplicamos, para os tipos de investimentos de cada empresa alvo de investimento.

Resample — Consolidando números por ano

Especificando Resample, nada mais é que uma nova amostra dos dados em algum intervalo de tempo e você deseja alterar o intervalo de tempo para outra coisa. Neste caso, para que o código funcione, transformamos a coluna “Data do Anúncio” que era do tipo “Object” em Dtype “datatime64”, utilizando .astype("datatime64[ns]") .

E por fim, alteramos o nível de consolidação da base onual, pelo .resample.

Análises gráficas

Chegou a hora, que particularmente considero a mais legal, em que iniciamos as nossas análises gráficas com algumas ferramentas que irão servir como atalhos e gatilhos visuais.

Um histograma é uma ótima ferramenta para visualizar dados numéricos. Neste caso iremos utilizar a biblioteca Seaborn e o Matplotlib.

Para que estas bibliotecas funcionem, será necessário instala-las em seu notebook.

import seaborn as sns
from matplotlib import pyplot as plt

Depois das bibliotecas serem instaladas, vamos começar nossas análises.

Iniciamos com o gráfico de barra da soma do valor de investimento dos 30TOP munícipios.

sns.barplot(x=MunicipiosTop.index,y=MunicipiosTop.values)
#rótulos do eixo x, serão rotacionados em 90°
plt.xticks(rotation=90)

E o gráfico da soma do valor investido em cada região.

sns.barplot(x=regiao.index,y=regiao.values)
plt.xticks(rotation=90)

Analisamos como foi a flutuação de investimentos acumulados anualmente em “Reais (em milhões)” com um histograma.

plt.hist(df['nome da coluna'])

E por último, utilizando a biblioteca do Seaborn, analisando a curva de distribuição com um distplot.

sns.distplot(df['nome da coluna'])

Conclusão

Está é a primeira etapa de nosso projeto do curso de Data Science & Machine Learning da Tera e esperamos que você consiga entender um pouco como nós fizemos a nossa análise de EDA para este estudo em especifico.

Vamos ficando por aqui, mas logo em seguida, teremos outros artigos publicados com os próximos passos do projeto de clusterização.

Qualquer dúvida sobre os códigos ou conceitos trabalhados neste artigos, podem entrar em contato comigo, Augusto Camargos e Daniel Sá Earp.

Primeiro artigo — Introdução do projeto: clique aqui.

Para acessar ao notebook deste estudo: clique aqui.

--

--

Larissa Akemi

Analista de dados jr. — TAG IMF (Grupo Stone). Especialização em Data Science & Machine Leraning e Graduada em Engenharia Ambiental e Sanitária.