| Formação Cientista de Dados |
| Limpeza e Tratamento de Dados |
#importa dados, string vazio com NA, string como fatores
dados=read.csv("/home/marcelojmata/MEGA/FormacaoCientistaDados/Materiais/9.Prática em R/dados/Churn.csv", sep=";", na.strings= "", stringsAsFactors=T)
head(dados)
## X0 X1 X2 X3 X4 X4.1 X6 X7 X8 X9 X10 X11
## 1 1 619 RS Feminino 42 2 0 1 1 1 10134888 1
## 2 2 608 SC Feminino 41 1 8380786 1 0 1 11254258 0
## 3 3 502 RS Feminino 42 8 1596608 3 1 0 11393157 1
## 4 4 699 RS Feminino 39 1 0 2 0 0 9382663 0
## 5 5 850 SC Feminino 43 2 12551082 1 1 1 790841 0
## 6 6 645 SC Masculino 44 8 11375578 2 1 0 14975671 1
summary(dados)
## X0 X1 X2 X3 X4
## Min. : 1.0 Min. :376.0 PR:257 F : 2 Min. :-20.0
## 1st Qu.: 251.5 1st Qu.:580.0 RP: 1 Fem : 1 1st Qu.: 32.0
## Median : 501.0 Median :653.0 RS:478 Feminino :461 Median : 37.0
## Mean : 500.9 Mean :648.6 SC:258 M : 6 Mean : 38.9
## 3rd Qu.: 750.5 3rd Qu.:721.0 SP: 4 Masculino:521 3rd Qu.: 44.0
## Max. :1000.0 Max. :850.0 TD: 1 NA's : 8 Max. :140.0
##
## X4.1 X6 X7 X8
## Min. : 0.000 Min. : 0 Min. :1.000 Min. :0.0000
## 1st Qu.: 2.000 1st Qu.: 0 1st Qu.:1.000 1st Qu.:0.0000
## Median : 5.000 Median : 8958835 Median :1.000 Median :1.0000
## Mean : 5.069 Mean : 7164928 Mean :1.527 Mean :0.7027
## 3rd Qu.: 8.000 3rd Qu.:12586844 3rd Qu.:2.000 3rd Qu.:1.0000
## Max. :10.000 Max. :21177431 Max. :4.000 Max. :1.0000
##
## X9 X10 X11
## Min. :0.0000 Min. :9.677e+03 Min. :0.0000
## 1st Qu.:0.0000 1st Qu.:3.029e+06 1st Qu.:0.0000
## Median :1.0000 Median :8.703e+06 Median :0.0000
## Mean :0.5095 Mean :3.529e+07 Mean :0.2032
## 3rd Qu.:1.0000 3rd Qu.:1.405e+07 3rd Qu.:0.0000
## Max. :1.0000 Max. :1.193e+10 Max. :1.0000
## NA's :7
Colunas
#Dar nomes corretos as colunas
colnames(dados)=c("Id","Score","Estado","Genero","Idade","Patrimonio","Saldo", "Produtos", "TemCartCredito", "Ativo", "Salario", "Saiu")
head(dados)
## Id Score Estado Genero Idade Patrimonio Saldo Produtos TemCartCredito
## 1 1 619 RS Feminino 42 2 0 1 1
## 2 2 608 SC Feminino 41 1 8380786 1 0
## 3 3 502 RS Feminino 42 8 1596608 3 1
## 4 4 699 RS Feminino 39 1 0 2 0
## 5 5 850 SC Feminino 43 2 12551082 1 1
## 6 6 645 SC Masculino 44 8 11375578 2 1
## Ativo Salario Saiu
## 1 1 10134888 1
## 2 1 11254258 0
## 3 0 11393157 1
## 4 0 9382663 0
## 5 1 790841 0
## 6 0 14975671 1
Explorar dados, colunas categóricas
#Estados
counts=table(dados$Estado)
barplot(counts,main="Estados",xlab="Estados")
#Genero
counts=table(dados$Genero)
barplot(counts, main="Generos",xlab="Generos")
Explorar, colunas numéricas
summary(dados$Score)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 376.0 580.0 653.0 648.6 721.0 850.0
boxplot(dados$Score)
hist(dados$Score)
Idade
summary(dados$Idade)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -20.0 32.0 37.0 38.9 44.0 140.0
boxplot(dados$Idade)
hist(dados$Idade)
Saldo
summary(dados$Saldo)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0 0 8958835 7164928 12586844 21177431
boxplot(dados$Saldo)
hist(dados$Saldo)
Salário
summary(dados$Salario)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 9.677e+03 3.029e+06 8.703e+06 3.529e+07 1.405e+07 1.193e+10 7
boxplot(dados$Salario)
boxplot(dados$Salario,outline=F)
Valores faltantes -NAs
#valores faltantes NAs
dados[!complete.cases(dados),]
## Id Score Estado Genero Idade Patrimonio Saldo Produtos
## 18 18 549 SC Feminino 24 9 0 2
## 53 53 788 RS Feminino 33 5 0 2
## 65 65 603 PR <NA> 26 4 10916637 1
## 85 86 493 RS <NA> 46 4 0 2
## 180 181 754 PR Feminino 55 3 16160881 1
## 214 215 676 RS <NA> 34 1 6309501 1
## 297 298 714 RS <NA> 31 4 12516926 1
## 331 332 656 RS Masculino 50 7 0 2
## 371 372 801 SC <NA> 42 4 14194767 1
## 427 428 492 PR Masculino 39 10 12457665 2
## 502 503 692 RS <NA> 54 5 0 2
## 551 552 721 PR Feminino 36 3 6525307 2
## 964 965 529 SC <NA> 63 4 9613411 3
## 970 971 649 PR <NA> 70 9 11685471 2
## 984 985 614 PR Feminino 35 6 12810028 1
## TemCartCredito Ativo Salario Saiu
## 18 1 1 NA 0
## 53 0 0 NA 0
## 65 1 1 9284067 0
## 85 1 0 190766 0
## 180 1 0 NA 1
## 214 1 1 4064581 0
## 297 1 1 10663689 0
## 331 0 1 NA 0
## 371 1 1 1059829 0
## 427 1 0 NA 0
## 502 1 1 8872184 0
## 551 1 0 NA 0
## 964 1 0 10873296 1
## 970 0 1 10712579 0
## 984 0 0 NA 1
Salários
#tratar salários
summary(dados$Salario)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 9.677e+03 3.029e+06 8.703e+06 3.529e+07 1.405e+07 1.193e+10 7
#ver mediana
median(dados$Salario,na.rm=T)
## [1] 8703250
#atribuir mea a NAs
dados[is.na(dados$Salario),]$salario=median(dados$Salario,na.rm=T)
## Warning in `[<-.data.frame`(`*tmp*`, is.na(dados$Salario), , value =
## structure(list(: provided 13 variables to replace 12 variables
#buscar NAs em salario para checar
dados[!complete.cases(dados$Salario),]
## Id Score Estado Genero Idade Patrimonio Saldo Produtos
## 18 18 549 SC Feminino 24 9 0 2
## 53 53 788 RS Feminino 33 5 0 2
## 180 181 754 PR Feminino 55 3 16160881 1
## 331 332 656 RS Masculino 50 7 0 2
## 427 428 492 PR Masculino 39 10 12457665 2
## 551 552 721 PR Feminino 36 3 6525307 2
## 984 985 614 PR Feminino 35 6 12810028 1
## TemCartCredito Ativo Salario Saiu
## 18 1 1 NA 0
## 53 0 0 NA 0
## 180 1 0 NA 1
## 331 0 1 NA 0
## 427 1 0 NA 0
## 551 1 0 NA 0
## 984 0 0 NA 1
Falta de padronização em gênero
#ver valores
unique(dados$Genero)
## [1] Feminino Masculino M <NA> F Fem
## Levels: F Fem Feminino M Masculino
summary(dados$Genero)
## F Fem Feminino M Masculino NA's
## 2 1 461 6 521 8
#transformar F e Fem em feminino
# " " M em Masculino (moda)
dados[is.na(dados$Genero) | dados$Genero == "M", ]$Genero = "Masculino"
dados[dados$Genero=="F" | dados$Genero == "Fem", ]$Genero = "Feminino"
#ver resultado
summary(dados$Genero)
## F Fem Feminino M Masculino
## 0 0 464 0 535
#remover levels não utilizados
dados$Genero = factor(dados$Genero)
#visualizar novamente
summary(dados$Genero)
## Feminino Masculino
## 464 535
Idades fora do domínio
summary(dados$Idade)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -20.0 32.0 37.0 38.9 44.0 140.0
#fora do dominio, numérico -ver idades anormais
dados[dados$Idade<0|dados$Idade>110,]$Idade
## [1] -10 -20 140
#não temos idade NAs
dados[is.na(dados$Idade),]
## [1] Id Score Estado Genero Idade
## [6] Patrimonio Saldo Produtos TemCartCredito Ativo
## [11] Salario Saiu
## <0 linhas> (ou row.names de comprimento 0)
#opção, preencher com mediana
median(dados$Idade)
## [1] 37
#substituição
dados[dados$Idade<0|dados$Idade>110,]$Idade=median(dados$Idade)
#buscamos novamente idades anormais
summary(dados$Idade)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0 32.0 37.0 38.9 44.0 82.0