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