| #title: “limpeza_de_dados” |
| #author: “antonio_sergio_da_silva” |
| #date: “31/10/2021” |
| #output: html_document |
Antonio Sergio da Silva
Antonio Sergio da Silva
Antonio Sergio da Silva
Criado no RStudio Version 1.3.1073, R Version 4.0.2
As ferramentas para a limpeza de dados imputam valores ausentes, suavizam ruídos, identificam valores discrepantes e corrigem inconsistências.
Um valor ausente na base de dados caracteriza um valor ignorado ou que não foi observado.
A imputação ou a substituição de valores ausentes busca estimar estes valores usando informações disponíves na base de dados.
A imputação de valores ausentes implica em perda de informação relevante de algum atributo.
Não obstante, diversos algoritmos para mineração de dados desconseguirem operar com valores ausentes, deve-se atentar para que a imputação de valores não enviese a base de dados.
Missing Completely At Random - MCAR - Ausência de dados completamente aleatória, independentemente de eventos externos. Exemplo: erro de entrada de dados por digitadores.
Missing At Random - MAR - Ausência de dados aleatórios que dependem de dados observados.
Exemplo: homens estarem mais dispostos a informar a idade real do que as mulheres.
Not Missing At Random - NMAR - Ausência de dados não aleatória. A ausência depende de valores não observados.
Exemplo: o valor do salário informado corretamente por uma pessoa.
É muito importante analisar o impacto na análise de dados em relação aos dados ausentes. Recomenda-se:
Investigar as razões dos dados ausentes e tomar ações para previnir a recorrência;
Investigar o impacto dos dados ausentes no resultado das análises, considerando a confiabilidade, a validade e a generalização das conclusões;
Considerar mais de um método para a imputação de dados ausentes;
Selecionar o método de imputação de dados que cause o menor impacto no resultado das análises.
Amostra da base de dados mamo (de Castro & Ferrari, 2016).
if (!require("pacman")) install.packages("pacman")
## Carregando pacotes exigidos: pacman
pacman::p_load(pacman, magrittr, rio, tidyverse,
readxl, openxlsx, writexl,
sampling,
knitr, xtable, stargazer)
mamo <- import("C:/Users/tao28/OneDrive/Documentos/r_data_analysis_2021/r_markdown/mamo.xlsx")
Nota explicativa sobre os pacotes carregados.
pacman: for loading/unloading packages (package management tool).
magrittr: for a forwarding pipe operator.
rio: for importing data.
tidyverse: import, tidy, transform, visualize, and model data.
readxl: for reading excel files.
openxlsx: does not require rJava package.
writexl: for exporting excel files.
sampling: for generating samples.
knitr/xtable/stargazer: for generating tabels on RMarkdown.
A função no R para testar a presença de missing data em um dataframe pode ser complete.cases().
complete.cases(mamo)
## [1] TRUE FALSE TRUE TRUE FALSE FALSE FALSE FALSE TRUE FALSE
Importa verificar cada atributo individualmente.
Às vezes um ou mais atributos podem contribuir por uma maior quantidade de dados ausentes. Nestes casos, pode ser útil eliminar o(s) atributo(s) predomimante(s), ao invés de descartar os objetos.
A função apply usada com a função is.na soma os dados ausentes em cada atributo.
apply(apply(mamo, 2, is.na), 2, sum)
## id BIRADS idade forma contorno densidade severidade
## 0 0 0 2 3 2 0
Neste exemplo, o atributo contorno tem três valores ausentes.
Estrutura da base de dados
str(mamo)
## 'data.frame': 10 obs. of 7 variables:
## $ id : num 1 2 3 4 5 6 7 8 9 10
## $ BIRADS : num 5 4 5 4 5 4 4 5 5 5
## $ idade : num 67 43 58 28 74 65 70 42 57 60
## $ forma : chr "lobular" "redonda" "irregular" "redonda" ...
## $ contorno : chr "especulada" "circunscrita" "especulada" "circunscrita" ...
## $ densidade : chr "baixa" NA "baixa" "baixa" ...
## $ severidade: chr "maligno" "maligno" "maligno" "benigno" ...
No R, o tipo int designa tanto o tipo numérico discreto, quanto o tipo numérico contínuo.
O tipo Factor designa o tipo categórico nominal. Duas informações são apresentadas: levels (nível) que representa a quatidade de valores existentes na variável sob estudo; e uma conversão para números, por conveniência da linguagem.
A seguir, as conversões dos atributos de interesse em fatores.
mamo[,2] <- as.factor(mamo[,2])
mamo[,4] <- as.factor(mamo[,4])
mamo[,5] <- as.factor(mamo[,5])
mamo[,6] <- as.factor(mamo[,6])
mamo[,7] <- as.factor(mamo[,7])
str(mamo)
## 'data.frame': 10 obs. of 7 variables:
## $ id : num 1 2 3 4 5 6 7 8 9 10
## $ BIRADS : Factor w/ 2 levels "4","5": 2 1 2 1 2 1 1 2 2 2
## $ idade : num 67 43 58 28 74 65 70 42 57 60
## $ forma : Factor w/ 3 levels "irregular","lobular",..: 2 3 1 3 3 3 NA 3 3 NA
## $ contorno : Factor w/ 2 levels "circunscrita",..: 2 1 2 1 2 NA NA NA 2 2
## $ densidade : Factor w/ 2 levels "alta","baixa": 2 NA 2 2 NA 2 2 2 2 1
## $ severidade: Factor w/ 2 levels "benigno","maligno": 2 2 2 1 2 1 1 1 2 2
O tipo categórico ordinal é tratado no R com a função ordered(). Esta função recebe um Factor que retorna um tipo categórico ordinal.
ordered(mamo[,2], c("4", "5"))
## [1] 5 4 5 4 5 4 4 5 5 5
## Levels: 4 < 5
str(mamo)
## 'data.frame': 10 obs. of 7 variables:
## $ id : num 1 2 3 4 5 6 7 8 9 10
## $ BIRADS : Factor w/ 2 levels "4","5": 2 1 2 1 2 1 1 2 2 2
## $ idade : num 67 43 58 28 74 65 70 42 57 60
## $ forma : Factor w/ 3 levels "irregular","lobular",..: 2 3 1 3 3 3 NA 3 3 NA
## $ contorno : Factor w/ 2 levels "circunscrita",..: 2 1 2 1 2 NA NA NA 2 2
## $ densidade : Factor w/ 2 levels "alta","baixa": 2 NA 2 2 NA 2 2 2 2 1
## $ severidade: Factor w/ 2 levels "benigno","maligno": 2 2 2 1 2 1 1 1 2 2
Tabela resumo dos atributos
| Valores ausentes | Valores inconsistentes | Valores ruidosos | Redundância de dados |
|---|---|---|---|
| Sim | Não | Não | Não |
| Cat Binário | Cat Nominal | Cat Ordinal | Num Discreto | Num Contínuo |
|---|---|---|---|---|
| Severidade | Forma | BI-RADS | Idade | - |
| - | Margem | - | - | - |
| - | Densidade | - | - | - |
Consiste na remoção de todos os objetos da base que possuem um ou mais valores ausentes.
Nesta base mamo, o método ignoraria os objetos 2, 5, 6, 7, 8 e 10. Isto descartaria 60% dos objetos da base de dados.
mamo_ignorar_objeto <- mamo[-c(2, 5, 6, 7, 8, 10),]
mamo_ignorar_objeto
## id BIRADS idade forma contorno densidade severidade
## 1 1 5 67 lobular especulada baixa maligno
## 3 3 5 58 irregular especulada baixa maligno
## 4 4 4 28 redonda circunscrita baixa benigno
## 9 9 5 57 redonda especulada baixa maligno
O descarte dos objetos com atributos ausentes também pode ser feito com a função na.omit().
mamo <- import("C:/Users/tao28/OneDrive/Documentos/r_data_analysis_2021/r_markdown/mamo.xlsx")
mamo_omitir <-na.omit(mamo)
mamo_omitir
## id BIRADS idade forma contorno densidade severidade
## 1 1 5 67 lobular especulada baixa maligno
## 3 3 5 58 irregular especulada baixa maligno
## 4 4 4 28 redonda circunscrita baixa benigno
## 9 9 5 57 redonda especulada baixa maligno
Consiste em imputar, manualmente, um valor empírico para cada valor ausente.
Este método demanda grande esforço manual. Os valores imputados devem respeitar o domínio de cada atributo.
Consiste em substituir todos os valores ausentes de um determinado atributo por uma única constante.
O algoritmo de mineração pode considerar que essa constante seja um conceito relevante, o que requer atenção do analista.
mamo[is.na(mamo)]<- "redonda"
mamo
## id BIRADS idade forma contorno densidade severidade
## 1 1 5 67 lobular especulada baixa maligno
## 2 2 4 43 redonda circunscrita redonda maligno
## 3 3 5 58 irregular especulada baixa maligno
## 4 4 4 28 redonda circunscrita baixa benigno
## 5 5 5 74 redonda especulada redonda maligno
## 6 6 4 65 redonda redonda baixa benigno
## 7 7 4 70 redonda redonda baixa benigno
## 8 8 5 42 redonda redonda baixa benigno
## 9 9 5 57 redonda especulada baixa maligno
## 10 10 5 60 redonda especulada alta maligno
Seleciona-se um valor similar aleatoriamente dentre os atributos de um objeto e o substitui pelo valor ausente.
Ordena-se a base de dados por um ou mais de seus atributos.
Identifica-se o valor ausente.
Usa-se o valor da célula imediatamente anterior para imputar o valor ausente.
Este método difere-se do hot-deck porque o critério de similaridade não é aleatório, mas baseado em uma ordenação da base.
Consiste em substituir os valores ausentes de cada atributo pela média (atributos numéricos: discreto, contínuo, razão) ou pela moda (atributos categóricos : binário, nominal, ordinal).
Método sensível aos outliers.
Neste método, a média ou a moda é tomada considerando-se apenas os objetos da mesma classe daquele que contém o valor ausente.
Método sensível aos outliers.
Neste método, o valor ausente é considerado como um atributo dependente e os demais valores como atibutos independentes.
Pode-se escolher algum modelo preditivo para estimar os valores ausentes.
Exemplo: processo de preparação da base de dados (tarefa limpeza de dados)
mamo_imput <- import("C:/Users/tao28/OneDrive/Documentos/r_data_analysis_2021/r_markdown/mamo.xlsx", sheet = 2, col_names = TRUE) %>%
as_tibble()
mamo_imput
## # A tibble: 10 x 7
## id `BI-RADS` idade forma contorno densidade severidade
## <dbl> <dbl> <dbl> <chr> <chr> <chr> <chr>
## 1 1 5 67 lobular especulada baixa maligno
## 2 2 4 43 redonda circunscrita baixa maligno
## 3 3 5 58 irregular especulada baixa maligno
## 4 4 4 28 redonda circunscrita baixa benigno
## 5 5 5 74 redonda especulada baixa maligno
## 6 6 4 65 redonda circunscrita baixa benigno
## 7 7 4 70 redonda circunscrita baixa benigno
## 8 8 5 42 redonda circunscrita baixa benigno
## 9 9 5 57 redonda especulada baixa maligno
## 10 10 5 60 irregular especulada alta maligno
Para o atributo forma , na classe benigno, o valor mais frequente (moda) é redonda; e na classe maligno, a moda é irregular.
Para o atributo contorno, na classe benigno, a moda é circunscrita; e na classe maligno, a moda é mal definida.
Para o atributo densidade, tanto na classe benigno, quanto na classe maligno, a moda é baixa.
Portanto, neste exemplo, foi usado o critério LDD7.
knitr::kable(mamo_imput,
align = "c",
caption = "Mammographic Mass Data Sample")
| id | BI-RADS | idade | forma | contorno | densidade | severidade |
|---|---|---|---|---|---|---|
| 1 | 5 | 67 | lobular | especulada | baixa | maligno |
| 2 | 4 | 43 | redonda | circunscrita | baixa | maligno |
| 3 | 5 | 58 | irregular | especulada | baixa | maligno |
| 4 | 4 | 28 | redonda | circunscrita | baixa | benigno |
| 5 | 5 | 74 | redonda | especulada | baixa | maligno |
| 6 | 4 | 65 | redonda | circunscrita | baixa | benigno |
| 7 | 4 | 70 | redonda | circunscrita | baixa | benigno |
| 8 | 5 | 42 | redonda | circunscrita | baixa | benigno |
| 9 | 5 | 57 | redonda | especulada | baixa | maligno |
| 10 | 5 | 60 | irregular | especulada | alta | maligno |
Crawley, M.J. (2013). The R Book. Chichester, UK: Wiley.
Da Silva, L. A., Peres, S.M. & Boscarioli, C. (2016,2021). Introdução à mineração de dados: com aplicações em R. 1. ed. [Reimpr.]. Rio de Janeiro: LTC.
De Castro, L.N. & Ferrari, D.G. (2016). Introdução à mineração de dados: conceitos básicos, algoritmos, e aplicações. São Paulo: Editora Saraiva.
Goldschmidt, R. & Passos, E. (2006). Data mining: um guia prático. Conceitos, técnicas, ferramentas, orientações e aplicações. Rio de Janeiro: Campus/Elsevier.
Acesse a base de dados original Mammographic Mass Data Set.
Acesse a página Tabela de Cores HTML para acessar códigos de cores em HTML.
Acesse a página do RMarkdown.
De acordo com a RN N 405 da ANS, O PM-QUALISS avaliará de forma sistemática os indicadores individualizados por prestador e coletivamente para obtenção de medidas de tendência e de outros parâmetros estatísticos.