--- title: "Acessando dados criminais com BrazilCrime" author: | Giovanni Vargette, Igor Laltuf, Marcelo Justus output: bookdown::pdf_document2: toc: true toc_depth: 2 number_sections: true latex_engine: xelatex fig_caption: true keep_tex: true margin_top: 2.5cm margin_bottom: 2.5cm margin_left: 2.5cm margin_right: 2.5cm header-includes: - \usepackage{indentfirst} - \setlength{\parindent}{1.5em} - \usepackage{fontspec} - \usepackage{polyglossia} - \usepackage{fvextra} - \usepackage{booktabs} - \usepackage{threeparttable} - \usepackage{multirow} - \usepackage{float} - \DefineVerbatimEnvironment{Highlighting}{Verbatim}{breaklines=true,fontsize=\small,commandchars=\\\{\}} vignette: > %\VignetteIndexEntry{Acessando dados criminais com BrazilCrime} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include=FALSE} #library(BrazilCrime) #library(ggplot2) #library(kableExtra) knitr::opts_chunk$set(collapse = TRUE, comment = "#>") ``` # Introdução O pacote BrazilCrime permite acessar dados públicos de segurança do sistema SINESP/VDE com filtros por localidade, tipologia criminal, categoria e período. A função central, get_sinesp_vde_data(), permite obter dados por UF, município, categoria (arma de fogo, bombeiros, desaparecidos/localizados, drogas, mandado de prisão cumprido, ocorrencias, profissionais de segurança e vitimas), para 28 tipologias de evento (Apreensão de Cocaína, Apreensão de Maconha, Arma de Fogo Apreendida, Atendimento pré-hospitalar, Busca e salvamento, Combate a incêndios, Emissão de Alvarás de licença, Estupro, Feminicídio, Homicídio doloso, Lesão corporal seguida de morte, Mandado de prisão cumprido, Morte de Agente do Estado, Morte no trânsito ou em decorrência dele (exceto homicídio doloso), Morte por intervenção de Agente do Estado, Mortes a esclarecer (sem indício de crime), Pessoa Desaparecida, Pessoa Localizada, Realização de vistorias, Roubo a instituição financeira, Roubo de carga, Roubo de veículo, Roubo seguido de morte (latrocínio), Suicídio, Suicídio de Agente do Estado, Tentativa de homicídio, Tráfico de drogas) com granularidade mensal ou anual. # Exemplos de Uso ## Exemplo 1 - Visualização simples ```{r exemplo 1, tidy=TRUE, out.width='\\textwidth', fig.width=6, fig.height=4, results='asis'} dados <- BrazilCrime::get_sinesp_vde_data() kableExtra::kable(head(dados), format = "latex", booktabs = TRUE, caption = "Visualização dos primeiros registros") |> kableExtra::kable_styling(latex_options = c("scale_down", "hold_position")) ``` ## Exemplo 2 - Filtrar por Estado, cidade e tipologia ```{r exemplo2, tidy=TRUE, out.width='\\textwidth', fig.width=6, fig.height=4, results='asis'} recife <- BrazilCrime::get_sinesp_vde_data( state = "PE", city = "Recife", typology = "Homicídio doloso", year = 2020:2022 ) kableExtra::kable(head(recife), format = "latex", booktabs = TRUE, caption = "Visualização dos primeiros registros") |> kableExtra::kable_styling(latex_options = c("scale_down", "hold_position")) ``` ## Exemplo 3 - Dados agregados por ano, para Estado e categoria específica ```{r exemplo3, tidy=TRUE, out.width='\\textwidth', fig.width=6, fig.height=4, results='asis'} sp_anuais <- BrazilCrime::get_sinesp_vde_data( state = "SP", category = "ocorrencias", granularity = "year" ) kableExtra::kable(head(sp_anuais), format = "latex", booktabs = TRUE, caption = "Visualização dos primeiros registros") |> kableExtra::kable_styling(latex_options = c("scale_down", "hold_position")) ``` ## Exemplo 4 - Visualização rápida ```{r exemplo4, tidy=TRUE, out.width='\\textwidth', fig.width=6, fig.height=4, results='asis'} #library(ggplot2) ggplot2::ggplot(sp_anuais, ggplot2::aes(x = ano, y = total)) + ggplot2::geom_line(color = "#0072B2", size = 1.2) + ggplot2::geom_point(color = "#D55E00", size = 2) + ggplot2::facet_wrap(~evento) + ggplot2::labs( title = "Evolução anual de ocorrências no Estado de SP", y = "Total de ocorrências", x = "Ano" ) + ggplot2::theme_minimal(base_size = 12) + ggplot2::theme( plot.title = ggplot2::element_text(face = "bold", size = 14), axis.text.x = ggplot2::element_text(angle = 45, hjust = 1) ) ``` ## Exemplo 5 - Visualização de dados com vítimas ```{r exemplo5, tidy=TRUE, out.width='\\textwidth', fig.width=6, fig.height=4, results='asis'} #library(ggplot2) sp_anuais_vit <- BrazilCrime::get_sinesp_vde_data( state = "SP", city = "SÃO PAULO", category = "vitimas", granularity = "year" ) # Quebrar nomes longos nos títulos dos facetes sp_anuais_vit$evento <- stringr::str_wrap(sp_anuais_vit$evento, width = 20) ggplot2::ggplot(sp_anuais_vit, ggplot2::aes(x = ano, y = total_vitima)) + ggplot2::geom_line(color = "#0072B2", size = 1.2) + ggplot2::geom_point(color = "#D55E00", size = 2) + ggplot2::facet_wrap(~evento) + ggplot2::labs( title = "Evolução anual de vítimas na cidade de SP", y = "Total de vítimas", x = "Ano" ) + ggplot2::theme_minimal(base_size = 12) + ggplot2::theme( plot.title = ggplot2::element_text(face = "bold", size = 14), axis.text.x = ggplot2::element_text(angle = 45, hjust = 1), strip.text = ggplot2::element_text(size = 8)) ``` ## Exemplo 6 - Buscando tendências com o argumento geom_smooth em ggplot ```{r exemplo6,tidy=TRUE, out.width='\\textwidth', fig.width=6, fig.height=4, results='asis'} # Carregar dados dados_var <- BrazilCrime::get_sinesp_vde_data( state = "BA", typology = "Homicídio doloso", city = "Salvador", category = "vitimas", granularity = "month", year = 2015:2023) dados_var <- dados_var |> dplyr::mutate(data = as.Date(paste0(ano, "-", mes, "-01"))) # Carregar pacotes #library(ggplot2) # Criar gráfico com smoothing ggplot2::ggplot(dados_var, ggplot2::aes(x = data)) + ggplot2::geom_line(ggplot2::aes(y = total_vitima, color = "Valores mensais"), size = 0.8) + ggplot2::geom_smooth( ggplot2::aes(y = total_vitima, color = "Tendência"), method = "loess", se = FALSE, size = 1.2, span = 0.3 ) + ggplot2::scale_color_manual( name = "Série Temporal", values = c("Valores mensais" = "#0072B2", "Tendência" = "#D55E00") ) + ggplot2::labs( title = "Tendência de homicídios dolosos em Salvador - BA (2015–2023)", x = "Data", y = "Total de Vítimas" ) + ggplot2::theme_minimal(base_size = 12) + ggplot2::theme( plot.title = ggplot2::element_text(face = "bold", size = 10, hjust = 0.5), axis.text.x = ggplot2::element_text(angle = 45, hjust = 1), panel.grid.minor = ggplot2::element_blank(), legend.position = "top", legend.direction = "horizontal", legend.box = "horizontal", legend.title = ggplot2::element_text(size = 9, face = "bold"), legend.text = ggplot2::element_text(size = 9) ) ``` ## Exemplo 7 - Análise de correlação ```{r exemplo7,tidy=TRUE, out.width='\\textwidth', fig.width=6, fig.height=4, results='asis'} # Pacotes necessários #library(BrazilCrime) #library(tidyverse) #library(ggcorrplot) # Buscar dados para SP em 2022 (cross-section municipal) dados_cross <- BrazilCrime::get_sinesp_vde_data( state = "SP", granularity = "year", year = 2022, category = "vitimas" ) # Selecionar algumas tipologias comuns tipos_desejados <- c("Feminicídio", "Homicídio doloso", "Suicídio", "Lesão corporal seguida de morte") # Agrupar e pivotar os dados corretamente dados_filtrados <- dados_cross |> dplyr::filter(evento %in% tipos_desejados) |> dplyr::group_by(municipio, evento) |> dplyr::summarise(total_vitima = sum(total_vitima, na.rm = TRUE), .groups = "drop") |> tidyr::pivot_wider(names_from = evento, values_from = total_vitima) |> tidyr::drop_na() |> dplyr::mutate(across(-municipio, as.numeric)) # Calcular matriz de correlação matriz_cor <- cor(dados_filtrados[-1], method = "pearson") # Gerar gráfico de correlação ggcorrplot::ggcorrplot( matriz_cor, lab = TRUE, lab_size = 3, colors = c("#D73027", "white", "#1A9850"), outline.color = "gray80" ) + ggplot2::ggtitle("Correlação entre diferentes crimes em SP (2022)") + ggplot2::theme_minimal() + ggplot2::theme( plot.title = ggplot2::element_text(size = 14, hjust = 0.5), plot.margin = ggplot2::margin(t = 20, r = 10, b = 20, l = 10), axis.text.x = ggplot2::element_text(angle = 45, vjust = 1, hjust = 1) ) ``` --- \begin{thebibliography}{9} \bibitem{mjsp} Ministério da Justiça e Segurança Pública (MJSP). \textit{SINESP - Sistema Nacional de Informações de Segurança Pública}. Disponível em: \url{https://www.gov.br/mj/pt-br/assuntos/sua-seguranca/seguranca-publica/estatistica/dados-nacionais-1/base-de-dados-e-notas-metodologicas-dos-gestores-estaduais-sinesp-vde-2022-e-2023}. Acesso em: julho de 2025. \bibitem{brazilcrime} Vargette, G., Laltuf, I., Justus, M. (2024). \textit{BrazilCrime: Interface to Brazilian Crime Data}. CRAN - Comprehensive R Archive Network. Disponível em: \url{https://CRAN.R-project.org/package=BrazilCrime} \bibitem{ggplot2} Wickham, H. (2016). \textit{ggplot2: Elegant Graphics for Data Analysis}. Springer-Verlag New York. \url{https://ggplot2.tidyverse.org} \bibitem{ggcorrplot} Gu, Z., Eils, R., Schlesner, M. (2022). \textit{ggcorrplot: Visualization of a Correlation Matrix using ggplot2}. Disponível em: \url{https://cran.r-project.org/package=ggcorrplot} \bibitem{rbase} R Core Team (2024). \textit{R: A Language and Environment for Statistical Computing}. R Foundation for Statistical Computing, Vienna, Austria. \url{https://www.R-project.org/} \bibitem{kableextra} Zhu, H. (2021). \textit{kableExtra: Construct Complex Table with 'kable' and Pipe Syntax}. CRAN. \url{https://cran.r-project.org/package=kableExtra} \bibitem{dplyr} Wickham, H., François, R., Henry, L., Müller, K. (2019). \textit{dplyr: A Grammar of Data Manipulation}. \url{https://dplyr.tidyverse.org} \bibitem{tidyr} Wickham, H. (2023). \textit{tidyr: Tidy Messy Data}. \url{https://tidyr.tidyverse.org} \bibitem{stringr} Chang, W. (2023). \textit{stringr: Simple, Consistent Wrappers for Common String Operations}. \url{https://stringr.tidyverse.org} \end{thebibliography}