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