Microdados - Objetos

Author

Rodrigo Zambon

Análise Inicial Básica

Análise dos dados extraídos do Observatório da Segurança Pública relacionados aos furtos e roubos de aparelhos celulares, veículos e bicicletas.

# 1 Install pacman if not already installed ----
if (!require(pacman)) install.packages("pacman")
Carregando pacotes exigidos: pacman
# Load the pacman package
library(pacman)

# Vector with packages you want to load
pacotes <- c("pacman", "dplyr", "ggplot2", "tidyverse", "stringr", "readxl", "ggside", "haven",
             "readr", "reshape2", "skimr", "corrplot", "kableExtra", "GGally", "PerformanceAnalytics",
             "purrr", "rvest", "httr", "readr", "janitor", "lubridate", "forecast", "seasonal", 
             "seasonalview", "tseries", "readxl", "sjPlot", "ggpubr", "arrow")

# Function to load packages and print status for each package
carregar_e_imprimir_status <- function(pacotes) {
  invisible(sapply(pacotes, function(pkg) {
    result <- p_load(char = pkg, install = TRUE, quiet = TRUE)
    cat(pkg, ifelse(!is.null(result), "TRUE", "FALSE"), "\n")
    return(!is.null(result))
  }))
}

# Call the function to load and print status
carregar_e_imprimir_status(pacotes)

Carregando o arquivo de dados: data.parquet

# 2 Loading data ----

data <- read_parquet("data.parquet")
data
# A tibble: 283,410 × 10
   data       hora    tipolocal municipio bairro tipoacao tipoobjeto tipo  marca
 * <date>     <chr>   <chr>     <chr>     <chr>  <chr>    <chr>      <chr> <chr>
 1 2024-04-30 Indete… VIA PÚBL… SERRA     CARAP… ROUBADO  APARELHOS… Sem … XIAO…
 2 2024-04-30 18:00:… COMÉRCIO  SERRA     PARQU… FURTADO  BICICLETA  Sem … BIKE…
 3 2024-04-30 07:10:… VIA PÚBL… MONTANHA  ZONA … ROUBADO  VEICULO    MOTO… HONDA
 4 2024-04-30 07:10:… VIA PÚBL… MONTANHA  ZONA … ROUBADO  APARELHOS… Sem … SAMS…
 5 2024-04-30 07:10:… VIA PÚBL… MONTANHA  ZONA … ROUBADO  VEICULO    CAMI… VOLK…
 6 2024-04-30 12:32:… RESIDÊNC… SERRA     RESID… RECUPER… VEICULO    AUTO… FORD 
 7 2024-04-30 Indete… VIA PÚBL… LINHARES  CENTRO ROUBADO  APARELHOS… Sem … XIAO…
 8 2024-04-30 10:46:… VIA PÚBL… SERRA     BALNE… RECUPER… VEICULO    AUTO… MITS…
 9 2024-04-30 10:30:… REPARTIC… VILA VEL… JARDI… ROUBADO  APARELHOS… Sem … SAMS…
10 2024-04-30 16:13:… VIA PÚBL… LINHARES  AVISO  FURTADO  VEICULO    MOTO… HONDA
# ℹ 283,400 more rows
# ℹ 1 more variable: modelo <chr>
glimpse(data)
Rows: 283,410
Columns: 10
$ data       <date> 2024-04-30, 2024-04-30, 2024-04-30, 2024-04-30, 2024-04-30…
$ hora       <chr> "Indeterminada", "18:00:00", "07:10:00", "07:10:00", "07:10…
$ tipolocal  <chr> "VIA PÚBLICA", "COMÉRCIO", "VIA PÚBLICA", "VIA PÚBLICA", "V…
$ municipio  <chr> "SERRA", "SERRA", "MONTANHA", "MONTANHA", "MONTANHA", "SERR…
$ bairro     <chr> "CARAPINA", "PARQUE RESIDENCIAL LARANJEIRAS", "ZONA RURAL",…
$ tipoacao   <chr> "ROUBADO", "FURTADO", "ROUBADO", "ROUBADO", "ROUBADO", "REC…
$ tipoobjeto <chr> "APARELHOS TELEFONICOS", "BICICLETA", "VEICULO", "APARELHOS…
$ tipo       <chr> "Sem Informação (Tipo)", "Sem Informação (Tipo)", "MOTOCICL…
$ marca      <chr> "XIAOMI", "BIKE MAX", "HONDA", "SAMSUNG", "VOLKSWAGEN", "FO…
$ modelo     <chr> "REDIMI NOTE 9", "JY 20020223", "CG150 FAN ESDI", "Sem Info…

No tratamento feito anteriormente foram solucionadas as linhas que continham valores NA.

any(is.na(data))
[1] FALSE
colSums(is.na(data))
      data       hora  tipolocal  municipio     bairro   tipoacao tipoobjeto 
         0          0          0          0          0          0          0 
      tipo      marca     modelo 
         0          0          0 

Para contar os valores únicos em cada coluna da base de dados, criei a seguinte função e um novo dataset.

contar_valores_unicos <- function(dataset) {
  contagens <- numeric(ncol(dataset))
  for (i in 1:ncol(dataset)) {
    contagens[i] <- length(unique(dataset[[i]]))
  }
  nomes_colunas <- names(dataset)
  resultado <- data.frame(Coluna = nomes_colunas, Valores_Unicos = contagens)
  
  return(resultado)
}
data_unicos <- contar_valores_unicos(data)
data_unicos
       Coluna Valores_Unicos
1        data           2312
2        hora           7004
3   tipolocal             31
4   municipio             78
5      bairro           1893
6    tipoacao              3
7  tipoobjeto              3
8        tipo             20
9       marca           5271
10     modelo          44173

Algumas observações sobre os valores:

  • O Estado do Espírito Santo possui 78 municípios, logo todos estão contemplados.

  • Na coluna “tipoacao” temos três ações: Roubado, Recuperado e Furtado.

  • Na coluna “tipoobjeto” temos os três objetos dos dados disponíveis: Veículos, Bicicletas e Aparelhos Telefônicos.

Análise Gráfica

Local

ggplot(data, aes(x = tipolocal)) +
  geom_bar(fill = "steelblue", color = "black") +
  labs(title = "Distribuição de TipoLocal",
       x = "Tipo de Local",
       y = "Contagem") +
  theme_minimal()+
  coord_flip()

A maior parte das ocorrências são em Via Pública, seguidas de residência, comércio, outro local e veículo.

data |> 
  group_by(tipolocal) |> 
  summarise(count = n(), .groups = 'drop') |> 
  mutate(percent = count / sum(count) * 100) |> 
  arrange(desc(count)) |> 
  slice_head(n = 10) |> 
  ggplot(aes(x = reorder(tipolocal, count), y = count, fill = tipolocal)) +
    geom_col(fill = "steelblue", color = "black") +
    geom_text(aes(label = sprintf("%.1f%%", percent), y = count + 1), vjust = 0.4) +
    labs(title = "Top 10 Tipos de Local por Contagem",
         x = "Tipo de Local",
         y = "Contagem") +
    theme_minimal() +
    coord_flip()

Município

Os municípios com maiores ocorrências são:

Bairro

Os bairros com as maiores ocorrências são:

# A tibble: 10 × 4
   municipio  bairro                         count percent
   <chr>      <chr>                          <int>   <dbl>
 1 CARIACICA  CAMPO GRANDE                    5024    1.77
 2 SERRA      PARQUE RESIDENCIAL LARANJEIRAS  4896    1.73
 3 VITORIA    JARDIM DA PENHA                 4329    1.53
 4 VILA VELHA PRAIA DA COSTA                  3902    1.38
 5 SERRA      JARDIM LIMOEIRO                 3900    1.38
 6 VITORIA    CENTRO                          3893    1.37
 7 VITORIA    JARDIM CAMBURI                  3551    1.25
 8 VITORIA    PRAIA DO CANTO                  3064    1.08
 9 VILA VELHA CENTRO VILA VELHA               2986    1.05
10 VILA VELHA ITAPOA                          2959    1.04

Tipo de Ação

No dataset disponibilizado, 52,5% das ocorências são de roubos, 34,5 furtos e 12,9% dos itens foram recuperados.

# A tibble: 3 × 3
  tipoacao    count percent
  <chr>       <int>   <dbl>
1 ROUBADO    148826    52.5
2 FURTADO     97863    34.5
3 RECUPERADO  36721    13.0

Tipos de Objetos

64,5% dos itens roubados ou furtados são Aparelhos telefônicos. Veículos representam 28,2% e bicicletas 7,2%.

# A tibble: 3 × 3
  tipoobjeto             count percent
  <chr>                  <int>   <dbl>
1 APARELHOS TELEFONICOS 182816   64.5 
2 VEICULO                79976   28.2 
3 BICICLETA              20618    7.27

Descrição dos Objetos (coluna “tipo”)

Vou criar um filtro para o objeto “VEICULO”. Os demais objetos, Bicicletas e Aparelhos Telefônicos não tem informação na descrição (coluna “tipo”).

Veículos

Podemos constatar que 42,6% dos veículos roubados ou furtados são motocicletas e 39,2% são automóveis.

# A tibble: 10 × 3
   tipo            count percent
   <chr>           <int>   <dbl>
 1 MOTOCICLETA     34110  42.7  
 2 AUTOMÓVEL       31427  39.3  
 3 CAMINHONETE      5597   7.00 
 4 MOTONETA         3984   4.98 
 5 CAMINHÃO         1538   1.92 
 6 CAMIONETA        1422   1.78 
 7 CICLOMOTOR        575   0.719
 8 QUADRICICLO       438   0.548
 9 REBOQUE           305   0.381
10 CAMINHAO TRATOR   195   0.244

Marcas

Marcas dos objetos roubados, furtados e recuperados. Novamante vou dividir em três tipos de objetos e por maiores ocorrências, para melhor compreensão:

Veículos - Motocicletas

A Motocicleta de marca Honda tem 88,1% das ocorrências.

# A tibble: 10 × 3
   marca    count percent
   <chr>    <int>   <dbl>
 1 HONDA    30055 88.1   
 2 YAMAHA    3006  8.81  
 3 SUZUKI     367  1.08  
 4 SHINERAY   155  0.454 
 5 DAFRA      105  0.308 
 6 SUNDOWN     84  0.246 
 7 MOTTUS      71  0.208 
 8 DAYUN       41  0.120 
 9 OUTROS      29  0.0850
10 KASINSKI    27  0.0792

Veículos - Automóveis

Fiat, VolksWagen e Chevrolet lideram o número de ocorrências.

# A tibble: 10 × 3
   marca          count percent
   <chr>          <int>   <dbl>
 1 FIAT            6876   21.9 
 2 VOLKSWAGEN      6239   19.9 
 3 CHEVROLET       5469   17.4 
 4 FORD            2220    7.06
 5 TOYOTA          2164    6.89
 6 HYUNDAI         1824    5.80
 7 RENAULT         1531    4.87
 8 GM / CHEVROLET  1202    3.82
 9 HONDA           1006    3.20
10 VOLKSWAGEM       921    2.93

Aparelhos Telefônicos

Samsung é a marca de aparelho telefônico com mais ocorrências: 40,5%

# A tibble: 10 × 3
   marca      count percent
   <chr>      <int>   <dbl>
 1 SAMSUNG    74012  40.5  
 2 MOTOROLA   44507  24.3  
 3 APPLE      18541  10.1  
 4 LG         16936   9.26 
 5 XIAOMI     14655   8.02 
 6 OUTROS      6931   3.79 
 7 ASUS        3080   1.68 
 8 MULTILASER  1110   0.607
 9 NOKIA       1011   0.553
10 POSITIVO     899   0.492

Bicicletas

Para apresentar as marcas de Bicicletas com mais ocorrências, vamos precisar fazer uma correção no dataset. A marca “Caloi” se apresenta com três grafias diferentes: CALOI, caloi e Caloi. Vou agrupar e somar todas em CALOI.

Temos o mesmo problema com a marca “MONARK”

data$marca <- gsub("caloi", "CALOI", data$marca, ignore.case = TRUE)
data$marca <- gsub("monark", "MONARK", data$marca, ignore.case = TRUE)
# A tibble: 10 × 3
   marca             count percent
   <chr>             <int>   <dbl>
 1 CALOI              4702  22.8  
 2 MONARK             1215   5.89 
 3 SAMY                315   1.53 
 4 SEM MARCA           301   1.46 
 5 OGGI                265   1.29 
 6 TSW                 161   0.781
 7 HOUSTON             154   0.747
 8 NÃO SABE INFORMAR   148   0.718
 9 NÃO INFORMADO       147   0.713
10 GTS                 134   0.650

Modelos

Vou fazer alguns filtros para os modelos dos itens com mais ocorrências. Estes filtros serão melhor visualizados com o dashboard feito em Power BI.

Veiculo > Automóvel > Fiat

# A tibble: 10 × 3
   modelo              count percent
   <chr>               <int>   <dbl>
 1 UNO ELECTRONIC        583    8.48
 2 UNO MILLE EP          315    4.58
 3 SIENA ATTRACTIV 1.4   280    4.07
 4 ARGO DRIVE 1.0        268    3.90
 5 UNO MILLE EX          244    3.55
 6 UNO MILLE SX          191    2.78
 7 PALIO FIRE ECONOMY    188    2.73
 8 UNO MILLE SMART       183    2.66
 9 UNO MILLE FIRE        160    2.33
10 SIENA ESSENCE 1.6     150    2.18

Aparelhos Telefônicos > Samsung

# A tibble: 10 × 3
   modelo                  count percent
   <chr>                   <int>   <dbl>
 1 Sem Informação (Modelo)  7835   10.6 
 2 J5                       2205    2.98
 3 J7                       1787    2.41
 4 A10                      1449    1.96
 5 J7 PRIME                 1224    1.65
 6 J2                       1123    1.52
 7 J5 PRIME                 1093    1.48
 8 J4                       1017    1.37
 9 A20                       942    1.27
10 J2 PRIME                  939    1.27

Aparelhos Telefônicos > Apple

# A tibble: 10 × 3
   modelo                  count percent
   <chr>                   <int>   <dbl>
 1 IPHONE 11                1459    7.87
 2 Sem Informação (Modelo)  1119    6.04
 3 IPHONE 7                  985    5.31
 4 IPHONE                    724    3.90
 5 IPHONE 6                  608    3.28
 6 IPHONE 6S                 603    3.25
 7 IPHONE 8 PLUS             581    3.13
 8 IPHONE 8                  573    3.09
 9 IPHONE 7 PLUS             569    3.07
10 IPHONE XR                 558    3.01

FAQ

Qual a diferença entre Roubo e Furto? (chatGPT)

Roubo e furto são dois tipos de crimes contra o patrimônio que são frequentemente confundidos, mas têm características legais distintas, especialmente em termos de como são definidos e punidos na lei. Aqui estão as principais diferenças entre eles:

Roubo (Art. 157 do Código Penal Brasileiro)

  • Uso de violência ou ameaça: No roubo, o agente usa violência contra a pessoa ou a ameaça com o intuito de subtrair algo para si ou para terceiro. A presença de violência ou ameaça é a principal característica que distingue o roubo do furto.

  • Pena: A pena para roubo é tipicamente mais severa devido ao uso de violência ou ameaça. A pena base pode variar bastante dependendo de fatores como uso de arma, lesão corporal grave, ou outros agravantes.

  • Impacto na vítima: O roubo é frequentemente mais traumático para a vítima devido à natureza violenta do crime.

Furto (Art. 155 do Código Penal Brasileiro)

  • Ausência de violência ou ameaça: No furto, o agente subtrai algo de alguém sem o uso de violência ou ameaça contra a pessoa. O ato geralmente é cometido sem que a vítima esteja presente ou ciente no momento da ocorrência.

  • Pena: A pena para furto é geralmente menor do que para roubo, refletindo a menor gravidade em termos de agressão física ou ameaça direta à vítima.

  • Modalidades: Existem diferentes tipos de furto, como furto simples, furto qualificado (por exemplo, com destruição ou rompimento de obstáculo), e furto de uso.

Exemplos Práticos

  • Roubo: Uma pessoa é abordada na rua por alguém que, sob ameaça de uma arma, exige que entregue seu telefone celular e carteira.

  • Furto: Uma pessoa deixa seu celular em uma mesa de café e vai ao banheiro; ao retornar, descobre que o celular foi levado sem que ela percebesse.

Estas distinções são importantes tanto do ponto de vista legal, influenciando a forma como os crimes são julgados e penalizados, quanto do ponto de vista da segurança pública, orientando estratégias de prevenção e resposta.

Qual o item mais recuperado?

data |> 
  filter(tipoacao == "RECUPERADO") |> 
  group_by(tipoobjeto) |> 
  summarise(count = n(), .groups = 'drop') |> 
  mutate(percent = count / sum(count) * 100) |> 
  arrange(desc(count)) |> 
  slice_head(n = 10)
# A tibble: 3 × 3
  tipoobjeto            count percent
  <chr>                 <int>   <dbl>
1 VEICULO               28870   78.6 
2 APARELHOS TELEFONICOS  6582   17.9 
3 BICICLETA              1269    3.46

Qual o item mais roubado?

data |> 
  filter(tipoacao == "ROUBADO") |> 
  group_by(tipoobjeto) |> 
  summarise(count = n(), .groups = 'drop') |> 
  mutate(percent = count / sum(count) * 100) |> 
  arrange(desc(count)) |> 
  slice_head(n = 10)
# A tibble: 3 × 3
  tipoobjeto             count percent
  <chr>                  <int>   <dbl>
1 APARELHOS TELEFONICOS 124494   83.7 
2 VEICULO                21255   14.3 
3 BICICLETA               3077    2.07

Qual o item mais furtado?

data |> 
  filter(tipoacao == "FURTADO") |> 
  group_by(tipoobjeto) |> 
  summarise(count = n(), .groups = 'drop') |> 
  mutate(percent = count / sum(count) * 100) |> 
  arrange(desc(count)) |> 
  slice_head(n = 10)
# A tibble: 3 × 3
  tipoobjeto            count percent
  <chr>                 <int>   <dbl>
1 APARELHOS TELEFONICOS 51740    52.9
2 VEICULO               29851    30.5
3 BICICLETA             16272    16.6