Faxina de dados - Exercício 1

Prezadxs, olá!

Estou com dúvidas no exercício 1 do Curso de Faxina de Dados. Fiz uma manipulação em cima da base bruta e removi duplicatas, entretanto, ainda restou algumas duplicações que não são necessariamente duplicações.

  1. Eu gostaria de saber se essa abordagem que realizei para retirar as duplicatas está correta? Ou cometi algum erro e entendi errado o uso da função distinct().

  2. Considerando que ainda existem itens que parecem ser a mesma coisa com apenas uma diferença na RUBRICA, qual a melhor recomendação para prosseguir nessa etapa?

O script completo se encontra no seguinte link: aqui

Não sei ao certo como tornar essa pergunta facilmente reprodutível, porém tentei deixar bem claro os questionamentos que tive durante a resolução.


library(magrittr, include.only = "%>%")
#> Warning: package 'magrittr' was built under R version 4.0.3
# library(ggplot2)
# library(dplyr)

# Exercício 1 -------------------------------------------------------------

# url <- "https://curso-r.github.io/202105-faxina/dados/DadosBO_2021_3(ROUBO%20DE%20CELULAR).xls"
# download.file(url,destfile = "DadosBO_2021_3(ROUBO DE CELULAR).xls")
# ou baixar o arquivo na página do curso: https://curso-r.github.io/202105-faxina/

# abrir arquivo original
base_bruta <- read.delim(
  "dados/DadosBO_2021_3(ROUBO DE CELULAR).xls",
  fileEncoding = "UTF-16LE",
  sep = "\t",
  header = TRUE,
  stringsAsFactors = FALSE
)

# Exercício 1
# a) transforme a base bruta em uma base tidy

# Dica: A base não precisa ser perfeita, o mais
# importante é remover as duplicações proporcionadas pela
# pelas rubricas/desdobramentos etc

# Olhando a base
tibble::view(base_bruta)

# Verificando colunas
dplyr::glimpse(base_bruta)

# A unidade é o fato? (roubo de celular)
# Quando faço isso, percebo que existem algumas repetições
base_bruta %>% 
  dplyr::count(ANO_BO, NUM_BO, DELEGACIA_CIRCUNSCRICAO, DELEGACIA_NOME)

# Olhando apenas para as situações que se repetem da pra ver que são muitos itens
# com 2 casos e outros que chegam a  30. Não vou usar a coluna "DELEGACIA_CIRCUNSCRICAO"
# por não mudar o resultado
base_bruta %>% 
  
  # fazer contagem das linhas que possuem as informações iguais para as seguintes cols.
  dplyr::count(ANO_BO, NUM_BO, DELEGACIA_NOME) %>% 
  
  # filtrar tudo que é diferente de 1 na contagem
  dplyr::filter(n != 1) %>% 
  
  # fazer tabela de frequência
  janitor::tabyl(n) %>% 
  
  # formatar como percentual
  janitor::adorn_pct_formatting() %>%
  
  # re-ordenar
  dplyr::arrange(desc(n_n)) %>% 
  
  # tabela
  knitr::kable()
  • O “n” representa a quantidade de repetições para a condição testada, o “n_n” representa quantas linhas encaixam nessa situação.
n n_n percent
2 699 60.2%
4 218 18.8%
6 67 5.8%
3 65 5.6%
8 47 4.0%
12 24 2.1%
5 10 0.9%
9 10 0.9%
18 4 0.3%
16 3 0.3%
10 2 0.2%
15 2 0.2%
24 2 0.2%
28 2 0.2%
30 2 0.2%
36 2 0.2%
20 1 0.1%
25 1 0.1%
48 1 0.1%
# Olhando uma situação em específico (com 12 repeticões)
base_bruta %>% 
  dplyr::filter(NUM_BO == 34, 
                ANO_BO == 2021, 
                DELEGACIA_NOME == "NUCLEO ROUBO DE CARGAS-SEC GUA") %>% 
  tibble::view()

# Outra situação (com 2 repetições)
base_bruta %>%
  dplyr::filter(NUM_BO == 50, 
                ANO_BO == 2021, 
                DELEGACIA_NOME == "DEL.INV.GER. CRUZEIRO") %>% 
  tibble::view()

# Para esse caso tenho 4 linhas que correspondem à ESPECIE "localização ou devolução"
# 2 dessas possuem informação de veículo e as outras duas não

# As outras 8 linhas são referentes a um artigo que imagino que seja de "roubo", 
# por conta da RÚBRICA. Essa última se dividindo em "Roubo de carga" e "Roubo de 
# veículo", tendo 4 linhas para cada. E essas 4 linhas, apenas duas possuem info
# sobre a placa e veículo.

# Com isso, podemos concluir que existe duplicação dentro das rúbricas, e além
# disso possuímos linhas vazias de infos.

# ==============================================================================

# Diminuir essas duplicidades
base_trt_no_dupes <-
  base_bruta %>%
  
  # retirar duplicatas considerando as 4 colunas
  dplyr::distinct(ANO_BO,
                  NUM_BO,
                  RUBRICA,
                  DELEGACIA_NOME,
                  .keep_all = TRUE)

# Verificando resultado do tratamento
base_trt_no_dupes %>% 
  dplyr::count(ANO_BO, NUM_BO, DELEGACIA_CIRCUNSCRICAO, DELEGACIA_NOME) %>% 
  dplyr::filter(n != 1) %>% 
  janitor::tabyl(n) %>% 
  janitor::adorn_pct_formatting() %>%
  dplyr::arrange(desc(n_n))

n n_n percent
2 372 77.7%
3 77 16.1%
4 21 4.4%
5 6 1.3%
6 3 0.6%

# Grande parte dos casos foi resolvida, porém ainda temos alguns itens que variam
# de 2 linhas a 6, implicando que eles não são necessariamente duplicatas, então
# é necessário explorar se a diferença ocorre apenas na RÚBRICA ou em outro lugar

# Explorando esses itens restantes
base_trt_no_dupes %>% 
  dplyr::count(ANO_BO, NUM_BO, DELEGACIA_CIRCUNSCRICAO, DELEGACIA_NOME) %>% 
  dplyr::filter(n == 2) 

# Nesse caso temos uma rúbrica de recepção qualificada e outra para o roubo em si
base_trt_no_dupes %>% 
  dplyr::filter(ANO_BO == 2021,
         NUM_BO == 37,
         DELEGACIA_NOME == "DEIC-3ª DELEGACIA DA DISCCPAT") %>% 
  tibble::view()

# Retirar receptação, por não ser um roubo?
# Como prosseguir com essas "duplicatas"?

Created on 2021-05-19 by the reprex package (v2.0.0)

Agradeço a quem puder ajudar a esclarecer essas dúvidas.

Muito obrigado!

Abraços.