Hoje gostaria de mostrar um exemplo de análise exploratória no R. Nesse exemplo será usado o pacote “DataExplorer” que foi criado para facilitar esse tipo de análise. Se você não me conhece,sou o prof. Davi Rocha, mestre em matemática e estatístico no HCFMUSP. Agora que já me conhece um pouco, vamos ao que interessa.

A primeira coisa a ser feita é baixar os pacotes necessários.

Como disse, vamos usar o pacote ‘DataExplorer’ nesse breve exemplo. Portanto se ainda não tiver instalado tire o comentário e rode o código abaixo:

#install.packages('DataExplorer') 
library(DataExplorer)

O conjunto de dados que usaremos para essa análise é a Classificação de Barra de Chocolate(“Chocolate Bar Ratings”) publicada no Kaggle. Kaggle é um site onde você pode fazer projetos,estudar e treinar Data Science.

Eu baixei os dados no meu desktop. Chamei meu conjunto de “choco” e usei o comando “read.csv” para acessar os dados:

choco = read.csv('C:/Users/davi.rocha991/Documents/datascience pubs/exemplos/flavors_of_cacao.csv')

Para não ficar muito confuso, abaixo há um resumo das variáveis, segundo o próprio kaggle:

Agora que conhecemos as colunas dos dados, vamos verificar as primeiras 5 linhas desses dados usando o comando nativo do R “head()”:

head(choco)
##   CompanyÂ...Maker.if.known. Specific.Bean.Origin.or.Bar.Name  REF
## 1                   A. Morin                      Agua Grande 1876
## 2                   A. Morin                            Kpime 1676
## 3                   A. Morin                           Atsane 1676
## 4                   A. Morin                            Akata 1680
## 5                   A. Morin                           Quilla 1704
## 6                   A. Morin                         Carenero 1315
##   Review.Date Cocoa.Percent Company.Location Rating Bean.Type
## 1        2016           63%           France   3.75         
## 2        2015           70%           France   2.75         
## 3        2015           70%           France   3.00         
## 4        2015           70%           France   3.50         
## 5        2015           70%           France   3.50         
## 6        2014           70%           France   2.75   Criollo
##   Broad.Bean.Origin
## 1          Sao Tome
## 2              Togo
## 3              Togo
## 4              Togo
## 5              Peru
## 6         Venezuela

Vamos verificar as últimas 5 linhas desses dados usando o comando nativo do r “tail()”:

tail(choco)
##      CompanyÂ...Maker.if.known. Specific.Bean.Origin.or.Bar.Name REF
## 1790                     Zotter                    Indianer, Raw 883
## 1791                     Zotter                             Peru 647
## 1792                     Zotter                            Congo 749
## 1793                     Zotter                     Kerala State 749
## 1794                     Zotter                     Kerala State 781
## 1795                     Zotter               Brazil, Mitzi Blue 486
##      Review.Date Cocoa.Percent Company.Location Rating Bean.Type
## 1790        2012           58%          Austria   3.50         
## 1791        2011           70%          Austria   3.75         
## 1792        2011           65%          Austria   3.00 Forastero
## 1793        2011           65%          Austria   3.50 Forastero
## 1794        2011           62%          Austria   3.25         
## 1795        2010           65%          Austria   3.00         
##      Broad.Bean.Origin
## 1790                 
## 1791              Peru
## 1792             Congo
## 1793             India
## 1794             India
## 1795            Brazil

Agora vou usar o comando “str” que é nativo do R para verificar a estrutura dos meus dados:

str(choco)
## 'data.frame':    1795 obs. of  9 variables:
##  $ CompanyÂ...Maker.if.known.      : Factor w/ 416 levels "A. Morin","Acalli",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ Specific.Bean.Origin.or.Bar.Name: Factor w/ 1039 levels "\"heirloom\", Arriba Nacional",..: 15 494 68 16 813 175 288 923 805 731 ...
##  $ REF                             : int  1876 1676 1676 1680 1704 1315 1315 1315 1319 1319 ...
##  $ Review.Date                     : int  2016 2015 2015 2015 2015 2014 2014 2014 2014 2014 ...
##  $ Cocoa.Percent                   : Factor w/ 45 levels "100%","42%","46%",..: 14 21 21 21 21 21 21 21 21 21 ...
##  $ Company.Location                : Factor w/ 60 levels "Amsterdam","Argentina",..: 19 19 19 19 19 19 19 19 19 19 ...
##  $ Rating                          : num  3.75 2.75 3 3.5 3.5 2.75 3.5 3.5 3.75 4 ...
##  $ Bean.Type                       : Factor w/ 42 levels ""," ","Amazon",..: 2 2 2 2 2 10 2 10 10 2 ...
##  $ Broad.Bean.Origin               : Factor w/ 101 levels ""," ","Africa, Carribean, C. Am.",..: 70 80 80 80 57 93 18 93 93 57 ...

Depois de baixar os dados e verificar sua estrutura entramos na fase do “Data Cleaning”. Data Cleaning que traduzido significa “Limpeza de dados” é o processo de identificar e remover (ou corrigir) registros imprecisos de um conjunto de dados, tabela ou banco de dados e se refere ao reconhecimento de partes inacabadas, não confiáveis, imprecisas ou não relevantes dos dados , para em seguida, restaurar, remodelar ou remover esses dados. A limpeza de dados pode ser executada como processamento em lote por meio de script ou interativamente com ferramentas de manipulação de dados.

Data Cleaning

No nosso caso alguma reformatação nos dados é necessária antes de prosseguir. Por exemplo, a variável Cocoa.Percent era para ser um valor numérico, mas está sendo lido como um fator devido à presença do símbolo “%”, portanto, precisa ser corrigido. vamos mudar também a variavel Review.Date que está como inteiro mas será interessante colocar como caracter para facilitar quando for feito gráficos de barra.

choco$Cocoa.Percent = as.numeric(gsub('%','',choco$Cocoa.Percent))
choco$Review.Date = as.character(choco$Review.Date)

No código acima foi alterado a variável “Cocoa.Percent” e transformada em numérica e o simbolo de porcentagem foi substituido por nada. Processo semelhante é feito no Excel quando necessitamos tirar uma vírgula ou uma letra dos dados. A diferença é que lá usamos o comando “substitutir”.

Usando str novamente, podemos verificar a mudança na estrutura dos dados:

str(choco)
## 'data.frame':    1795 obs. of  9 variables:
##  $ CompanyÂ...Maker.if.known.      : Factor w/ 416 levels "A. Morin","Acalli",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ Specific.Bean.Origin.or.Bar.Name: Factor w/ 1039 levels "\"heirloom\", Arriba Nacional",..: 15 494 68 16 813 175 288 923 805 731 ...
##  $ REF                             : int  1876 1676 1676 1680 1704 1315 1315 1315 1319 1319 ...
##  $ Review.Date                     : chr  "2016" "2015" "2015" "2015" ...
##  $ Cocoa.Percent                   : num  63 70 70 70 70 70 70 70 70 70 ...
##  $ Company.Location                : Factor w/ 60 levels "Amsterdam","Argentina",..: 19 19 19 19 19 19 19 19 19 19 ...
##  $ Rating                          : num  3.75 2.75 3 3.5 3.5 2.75 3.5 3.5 3.75 4 ...
##  $ Bean.Type                       : Factor w/ 42 levels ""," ","Amazon",..: 2 2 2 2 2 10 2 10 10 2 ...
##  $ Broad.Bean.Origin               : Factor w/ 101 levels ""," ","Africa, Carribean, C. Am.",..: 70 80 80 80 57 93 18 93 93 57 ...

Agora que já alteramos a estrutura dos dados, outro passo importante é verificar se os dados de entrada fornecidos têm valores ausentes. Dados ausentes podem atrapalhar quando for feita alguma análise dos dados, por isso é importante verificar se eles existem e quantos dados ausentes temos.

Usando o comando abaixo do pacote “DataExplorer”, podemos verificar o percentual de valores ausentes em cada variavel:

plot_missing(choco)

Observe que não foi encontrado dados faltantes. Logo podemos prosseguir.

Análise de Variáveis Contínuas:

O histograma é o melhor forma do analista para analisar / representar variáveis que são contínuas. Usamos a função “plot_missing”, também do pacote DataExplorer

plot_histogram(choco)

Pode ser interessante olhar o gráfico de densidade:

plot_density(choco)

Análise de Variaveis Categóricas:

Usando o pacote “DataExplorer” fica muito fácil plotar rapidamente variáveis categóricas. Basta usar “plot_bar()”:

plot_bar(choco)
## 4 columns ignored with more than 50 categories.
## CompanyÂ...Maker.if.known.: 416 categories
## Specific.Bean.Origin.or.Bar.Name: 1039 categories
## Company.Location: 60 categories
## Broad.Bean.Origin: 101 categories

Análise multivariada:

Vamos apenas dar uma olhada na correlação:

plot_correlation(choco, type = 'continuous','Review.Date')

Percebe-se que a correlaçao é fraca entre as variaveis analisadas.

Bom, era isso que eu queria mostrar.Há muita coisa para testar ainda, minha ideia era te mostrar uma rápida análise exploratória usando esse pacote. Espero que tenha sido útil.

Keep calm and analysing data!