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.
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.
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.
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)
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
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!