top of page
  • Foto do escritorRoger Sampaio

A Galinha dos Ovos de Ouro: A Análise Exploratória


Seja muito bem-vindo meus guerreiros a mais um post do mundo da Ciência de Dados, é sempre um prazer estar compartilhando com vocês essa sopinha de letra de tecnologias, ferramentas, técnicas e métodos capazes de transformar a realidade das empresas. Hoje exploraremos uma das etapas mais importantes no processo da Ciência de Dados chamada Análise Exploratória de Dados, ou simplesmente EDA (Exploratory Data Analysis). A imagem ao lado não poderia ser mais representativa para relevar a importância. Para você não esquecer, vamos chamar a nossa galinha de EDA (leia ÊDA) e você vai lembrar que ela produz ovos de ouro (que seriam os preciosos insights extraídos dos dados). Vamos lá!


  1. O que é Análise Exploratória?

Após da definição do problema de negócio e levantamento inicial dos requisitos, se inicia a EDA. Originalmente desenvolvida pelo matemático John Tukey em 1970, trata-se de um conjunto de técnicas para compreender os dados assim como sua distribuição, as principais características para projetar o produto final que pode, ser exemplo, um modelo preditivo ou dashboard. Segundo a IBM, a EDA facilita o trabalho de cientista de dados para descobrirem padrões, detectar anomalias e testar hipóteses. E podemos dizer que cerca de 80% ou até mais do trabalho dos cientista será desprendido exatamente na EDA (e olha que não é exagerado quando afirmo isso, meu guerreiro). Muitas pessoas querem logo partir para implementar o Machine Learning, mas antes disso a EDA precisa ser muito bem realizada, senão todo o seu projeto estará rumo ao fracasso. Captou?


2. Quais as Atividades Dela?


Embora não haja uma receita de bolo propriamente dita, porque cada problema de negócio envolve a abordagem de diferentes técnicas, podemos ver algumas atividades bastantes frequentes na EDA, veja:

  1. Extração de dados de diferentes fontes (banco de dados relacionais, não relacionais, sistema ERP, páginas web...) e formatos.

  2. Transformação dos dados baseado em critérios que você define. Por exemplo, dados dois arquivos com datas em formatos diferentes, você define que o formato da data será DD/MM/AAAA.

  3. Limpeza nos dados. Ex: remoção de colunas desnecessárias.

  4. Detecção de valores outliers. Pode ser necessário removê-los ou não. Um problema de detecção de fraudes em cartões de créditos, por exemplo, observaremos exatamente eles.

  5. Detecção de valores ausentes (missing) e possíveis tratamentos.

  6. Resumo dos dados usando diferentes medidas estatísticas (ex: média, mediana, desvio padrão, quartis ...) de modo de compreendê-los.

  7. Correlação entre as variáveis.


3. Quais ferramentas usamos para realizar ela?


Podemos utilizar softwares proprietários como, por exemplo, o IBM Watson Studio, projetado para Ciência de Dados, assim como ferramentas gratuitas tal como as linguagens de programação R e Python.


4. Exemplo prático.


Chega de 'blábláblá' e vamos ver na prática como isso funciona. Vamos executar algumas atividades da EDA. Optei por utilizar a linguagem R no ambiente em Cloud (https://rstudio.com/). Vamos começar definindo nosso problema de negócio. A China enfrenta um sério problema com fraudes no meio online principalmente quanto aos robôs que simulam cliques falsos em lojas de aplicativos, ou seja, simulam como se fossem pessoas comprando os aplicativos, mas ao final não são. Então contratou você (cientista de dados) para prever quando o clique é fraudulento ou não. A base de dados fornecida usa uma série de informações como, por exemplo: 1. endereço ip do click, 2. ID do tipo do modelo que o usuário que está utilizado (ex: iphone 6, iphone 5), 3. a data e hora do clique pelo usuário entre outras. Veja em: https://www.kaggle.com/c/talkingdata-adtracking-fraud-detection/overview


4.1 Extraindo os dados.

A nossa base de dados está em um arquivo no formato csv. Vamos carregar ele utilizando o seguinte script:

registros <- read.csv("/cloud/project/train_sample.csv",nrows = 10000)

4.2 Compreendendo os dados

Agora que os dados estão carregados, vamos descobrir a quantidade de linhas e colunas:

# Quantidade de linhas
nrow(registros)
# Quantidade de colunas
ncol(registros)

Resultado:

10000
8

Descobrindo o nome das colunas:

names(registros)

Resultado:

[1] "ip"              "app"             "device"         
[4] "os"              "channel"         "click_time"     
[7] "attributed_time" "is_attributed"  

Caso queríamos visualizar as cinco primeiras linhas, podemos utilizar:

# Mostrando as primeiras linhas em formato tabular
View(head(registros))

Resultado:









4.3 Aplicando transformação nos dados

Iremos transformar algumas variáveis numéricas em categóricas, porque de fato elas representam classes, porque não iremos efetuar nenhuma operação aritméticas com elas. Em outras palavras, estamos alterando o tipo delas.

registros$app = as.factor(registros$app)
registros$device = as.factor(registros$device)
registros$os = as.factor(registros$os)
registros$channel = as.factor(registros$channel)
registros$is_attributed = as.factor(registros$is_attributed)
# Conferindo os ajustes
str(registros)

Resultado:

'data.frame':	10000 obs. of  8 variables:
 $ ip             : int  87540 105560 101424 94584 68413 93663 17059 121505 192967 143636 ...
 $ app            : Factor w/ 85 levels "1","2","3","4",..: 12 24 12 13 12 3 1 9 2 3 ...
 $ device         : Factor w/ 26 levels "0","1","2","4",..: 2 2 2 2 2 2 2 2 3 2 ...
 $ os             : Factor w/ 85 levels "0","1","2","3",..: 14 18 20 14 2 18 18 26 23 20 ...
 $ channel        : Factor w/ 141 levels "3","13","17",..: 141 61 46 128 39 15 29 113 89 29 ...
 $ click_time     : chr  "2017-11-07 09:30:38" "2017-11-07 13:40:27" "2017-11-07 18:05:24" "2017-11-07 04:58:08" ...
 $ attributed_time: chr  "" "" "" "" ...
 $ is_attributed  : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...

Convertendo mais algumas variáveis, dessa vez no formato data.

registros$click_time = ymd_hms(registros$click_time) 
registros$attributed_time = ymd_hms(registros$attributed_time) 

4.4 Descobrindo Estatísticas

Para entender melhor a base de dados podemos utilizar as medidas de tendência padrão como, por exemplo, média, moda, mediana assim as medidas de dispersão tal como desvio padrão e amplitude. Todas essas medidas são oriundas da Estatística. Veja como podemos descobrir os valores mínimo, máximo e média aritmética.

range(registros$ip)
mean(registros$ip)

Resultado:

 9 364410 # mínimo - máximo 
 91776.82 # média

Podemos descobrindo as categorias mais frequentes e mostrá-los em um gráfico de barras, o que é melhor que representar em uma tabela com muitos registros, veja abaixo. O gráfico de barras é um instrumento excelente de visualização quando precisamos mostrar dados agrupados em categorias ou classes, além dele ser bastante intuitivo para o usuário.

top5IPsMaisFrequentes = head(sort((table(registros$ip)),decreasing = TRUE), 5L)
barplot(top5IPsMaisFrequentes,main = "TOP 5 (Quantidade) IDS dos usuários",
        xlab = "ID do usuário",ylab = "Quantidade",col = "yellow")

Resultado:


Guerreiro, não se preocupe se você não entendeu bem os códigos acima, o propósito desse artigo não é enfatizar essas funções da linguagem R. Quero que você apenas saiba que é possível realizar toda EDA utilizando o R assim como Python ou ferramentas proprietárias.


5. E no Final das Contas


A EDA é das etapas mais importante do processo da Ciência de Dados. Através dela, você compreenderá os dados, fará limpeza, transformação e ajustes necessários que servirão de insumo para o produto final (o modelo preditivo ou um dashboard). E acredite, volto a enfatizar: ela ocupará cerca de 80% ou mais do seu tempo, semelhante ao que acontece quando falamos em ETL em engenharia de banco de dados. Não subestime a EDA: 'sua galinha dos ovos de ouro'; senão todo seu trabalho estará beirando ao fracasso. Abraços e até a próxima.