Análise de dados com a Linguagem R: Segurança no Rio de Janeiro

Introdução ao Ciclo de Análise de Dados

A análise de dados é um processo estruturado que transforma informações brutas em conhecimento útil, orientando decisões mais embasadas. Esse processo é comumente representado como um ciclo composto por etapas interligadas, que vão desde a obtenção dos dados até a comunicação dos resultados. Dominar cada uma dessas etapas é essencial para qualquer profissional que deseje extrair valor dos dados — seja em contextos acadêmicos, corporativos ou governamentais. As fases clássicas incluem a coleta, o tratamento (ou limpeza), a análise exploratória, a modelagem e a apresentação dos resultados.

ciclo de análise de dados

Neste tutorial, aplicaremos o ciclo de análise de dados a um caso real e de grande relevância social: a segurança pública no estado do Rio de Janeiro. Utilizaremos a base de dados mensal de criminalidade, disponibilizada pelo Instituto de Segurança Pública (ISP). O objetivo é investigar as tendências de diferentes tipos de crimes ao longo das últimas décadas, identificando padrões e criando visualizações que facilitem a compreensão do cenário da criminalidade no estado.

Para conduzir a análise, utilizaremos a linguagem R em conjunto com o Quarto, uma ferramenta de publicação de código aberto que integra texto, código e visualizações em um único documento dinâmico e reprodutível. Ao longo das próximas seções, você será guiado passo a passo — desde o carregamento dos dados diretamente da fonte até a criação de gráficos que revelam as principais narrativas escondidas nos números. O propósito é capacitá-lo a reproduzir e adaptar esse fluxo de trabalho em suas próprias análises.

Nesta primeira etapa, o foco será apresentar o processo inicial da análise de dados, com ênfase na coleta e em uma exploração preliminar das informações. Em tutoriais futuros, aprofundaremos a investigação aplicando técnicas de séries temporais ao conjunto de dados, com destaque para a série “Homicídios por Intervenção Policial”. Também exploraremos o framework tidyverts, que permite construir modelos de previsão de maneira organizada e eficiente. Nosso objetivo central é ensinar como estruturar um framework de análise de dados claro, acessível e facilmente adaptável a diferentes contextos.

Para obter o tutorial deste exercício faça parte do Clube AM e receba toda semana os códigos em R/Python, vídeos, tutoriais e suporte completo para dúvidas.

1. Coleta e Carregamento dos Dados

A primeira etapa do nosso ciclo é a coleta. Aqui, nosso objetivo é importar os dados para o nosso ambiente de análise em R. Os dados do ISP estão convenientemente disponíveis online em um formato CSV (Comma-Separated Values), o que facilita o carregamento direto. Utilizaremos o pacote readr, parte do ecossistema tidyverse, para ler o arquivo. Desta forma, é simples o processo de simplesmente “plugar” o link de download do arquivo diretamente na função, de modo que o processo esteja automatizado.

Após o carregamento, é uma boa prática inspecionar a estrutura dos dados para entender suas colunas, tipos de variáveis e as primeiras linhas.

CÓDIGO DISPONÍVEL PARA MEMBROS DO CLUBE AM
Rows: 417
Columns: 56
$ ano                        <dbl> 1991, 1991, 1991, 1991, 1991, 1991, 1991, 1…
$ mes                        <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2…
$ hom_doloso                 <dbl> 657, 732, 713, 634, 650, 647, 558, 557, 542…
$ lesao_corp_morte           <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ latrocinio                 <dbl> 15, 17, 25, 20, 20, 14, 14, 11, 19, 21, 13,…
$ cvli                       <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ hom_por_interv_policial    <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ letalidade_violenta        <dbl> 672, 749, 738, 654, 670, 661, 572, 568, 561…
$ tentat_hom                 <dbl> 162, 175, 216, 200, 146, 201, 201, 209, 146…
$ lesao_corp_dolosa          <dbl> 3051, 3421, 3613, 3211, 3051, 2977, 2784, 3…
$ estupro                    <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ hom_culposo                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ lesao_corp_culposa         <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ roubo_transeunte           <dbl> 967, 963, 963, 1186, 931, 831, 797, 813, 80…
$ roubo_celular              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ roubo_em_coletivo          <dbl> 381, 432, 422, 354, 335, 342, 308, 299, 281…
$ roubo_rua                  <dbl> 1348, 1395, 1385, 1540, 1266, 1173, 1105, 1…
$ roubo_veiculo              <dbl> 1174, 1097, 1265, 1415, 1449, 1354, 1365, 1…
$ roubo_carga                <dbl> 63, 64, 71, 81, 82, 82, 82, 71, 91, 83, 94,…
$ roubo_comercio             <dbl> 350, 357, 443, 425, 553, 518, 496, 498, 473…
$ roubo_residencia           <dbl> 188, 171, 191, 199, 231, 178, 186, 189, 199…
$ roubo_banco                <dbl> 37, 35, 43, 36, 27, 37, 25, 29, 12, 16, 26,…
$ roubo_cx_eletronico        <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ roubo_conducao_saque       <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ roubo_apos_saque           <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ roubo_bicicleta            <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ outros_roubos              <dbl> 158, 142, 131, 112, 147, 81, 94, 88, 90, 10…
$ total_roubos               <dbl> 3318, 3261, 3529, 3808, 3755, 3423, 3353, 3…
$ furto_veiculos             <dbl> 2009, 1850, 2084, 2085, 2185, 1992, 1978, 1…
$ furto_transeunte           <dbl> 1147, 1066, 1062, 1195, 723, 673, 700, 794,…
$ furto_coletivo             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ furto_celular              <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ furto_bicicleta            <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ outros_furtos              <dbl> 3561, 3309, 3573, 3290, 3546, 3519, 3604, 3…
$ total_furtos               <dbl> 6717, 6225, 6719, 6570, 6454, 6184, 6282, 6…
$ sequestro                  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ extorsao                   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ sequestro_relampago        <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ estelionato                <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ apreensao_drogas           <dbl> 133, 127, 80, 133, 163, 157, 203, 215, 179,…
$ posse_drogas               <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ trafico_drogas             <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ apreensao_drogas_sem_autor <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ recuperacao_veiculos       <dbl> 872, 751, 789, 787, 845, 802, 870, 809, 756…
$ apf                        <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ aaapai                     <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ cmp                        <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ cmba                       <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ ameaca                     <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ pessoas_desaparecidas      <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ encontro_cadaver           <dbl> 217, 209, 188, 140, 78, 111, 126, 79, 71, 9…
$ encontro_ossada            <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ pol_militares_mortos_serv  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ pol_civis_mortos_serv      <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ registro_ocorrencias       <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ fase                       <dbl> 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3…

Neste caso, observamos que o conjunto de dados possui colunas separadas para ano e mês, que juntas representam o contexto temporal da série. No entanto, linguagens de programação como o R não reconhecem automaticamente essa combinação como uma variável de tempo. Para contornar isso, é necessário realizar um pequeno tratamento, criando uma nova coluna do tipo Date, de modo que a linguagem consiga interpretar corretamente o componente temporal e permitir análises de séries históricas.

Em relação às demais variáveis (colunas), não há grandes complicações: todos os valores numéricos foram corretamente identificados como do tipo double, o que dispensa ajustes imediatos. Ainda assim, seria recomendável incluir um sanity check, já que dados extraídos diretamente de fontes públicas podem sofrer alterações ou inconsistências ao longo do tempo — embora, neste tutorial, não faremos essa verificação detalhada.

O principal ponto de atenção está nos valores ausentes (NA). Esse tipo de ocorrência é bastante comum em séries temporais brasileiras. No caso em questão, os valores faltantes concentram-se principalmente no início da série, o que é relativamente fácil de lidar. Já a presença de NAs ao longo de todo o período seria um problema mais sério, exigindo técnicas específicas de imputação ou tratamento, que poderão ser exploradas em etapas futuras da análise.

2. Tratamento e Limpeza dos Dados

Com os dados carregados, a próxima etapa é o tratamento, também conhecido como limpeza ou pré-processamento. Raramente os dados brutos estão prontos para a análise. Nesta fase, focamos em ajustar formatos, lidar com valores ausentes e criar novas variáveis que possam ser úteis. Para nossa análise de séries temporais, é crucial ter uma coluna de data adequada. Os dados originais possuem colunas separadas para ano e mês. Vamos combiná-las para criar uma única coluna de data, facilitando a plotagem e a análise temporal.

CÓDIGO DISPONÍVEL PARA MEMBROS DO CLUBE AM

3. Análise Exploratória e Visualização

Agora que nossos dados estão limpos e organizados, podemos iniciar a fase de análise exploratória. O objetivo aqui é investigar os dados para descobrir padrões, anomalias e tendências. A visualização de dados é a ferramenta mais poderosa nesta etapa. Vamos criar gráficos de séries temporais para observar a evolução de diferentes categorias de crimes ao longo do tempo.

3.1. Crimes Violentos

Primeiro, vamos focar em um grupo de crimes de alta letalidade e violência, como homicídio doloso, latrocínio e lesão corporal seguida de morte. Para visualizar todos esses crimes de forma comparável, precisamos antes remodelar nossos dados. Atualmente, cada tipo de crime está em uma coluna diferente (formato wide). Vamos transformá-los para o formato long, onde teremos uma coluna para o tipo de crime e outra para o número de ocorrências. Isso nos permite usar a função facet_wrap() do ggplot2 para criar um gráfico para cada crime.

CÓDIGO DISPONÍVEL PARA MEMBROS DO CLUBE AM
Evolução dos crimes violentos no estado do Rio de Janeiro (1991–2025)

Cada série apresenta um comportamento distinto ao longo do tempo. Algumas mostraram tendência de crescimento consistente ao longo dos anos — como os casos de estupro e tentativa de homicídio, embora esta última apresente uma queda mais recente. Outras séries exibem variações de curto prazo, mas mantêm relativa estabilidade no longo prazo, como o latrocínio e a lesão corporal seguida de morte, que permanecem praticamente estáveis durante boa parte do período, com leve redução nos últimos anos.

Por outro lado, observamos séries com tendências de queda mais consistentes, especialmente os casos de letalidade violenta, homicídio doloso e homicídio culposo, indicando um movimento de redução gradual ao longo das últimas décadas.

3.2. Crimes de Roubo

Seguindo a mesma abordagem, agora vamos analisar a evolução dos crimes de roubo. Esta categoria inclui roubo de veículo, de celular, a transeunte, entre outros. O processo é idêntico: selecionamos as colunas de interesse, remodelamos os dados para o formato long e, em seguida, criamos um gráfico facetado para visualizar a tendência de cada tipo de roubo ao longo do tempo.

CÓDIGO DISPONÍVEL PARA MEMBROS DO CLUBE AM
Crimes associados a roubos no estado do RJ (1991–2025)

Considerações Finais

A análise realizada mostrou como o ciclo de análise de dados pode ser aplicado, de forma estruturada e reprodutível, para investigar fenômenos sociais complexos — neste caso, a evolução dos crimes violentos no estado do Rio de Janeiro. A partir de uma base pública e acessível, foi possível percorrer todas as etapas fundamentais do processo analítico: desde a coleta e tratamento dos dados até a exploração e visualização dos resultados.

Nos próximos passos, poderemos aprofundar a investigação utilizando técnicas de modelagem de séries temporais, com o objetivo de construir previsões e compreender melhor as dinâmicas de longo prazo dos diferentes tipos de crime. Essa abordagem permitirá não apenas descrever o passado, mas também antecipar possíveis cenários futuros, ampliando o poder analítico do processo iniciado aqui.

Quer aprender mais?

Conheça nossa Formação do Zero à Análise de Dados Econômicos e Financeiros usando R. Aprenda do ZERO a coletar, tratar, construir modelos e apresentar dados econômicos e financeiros com o uso de Python e IA.

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Determinantes do Preço do Ouro: VAR + Linguagem R

Este artigo realiza uma análise econométrica para investigar os determinantes dinâmicos do preço do ouro. Utilizando um modelo Vetorial Autorregressivo (VAR) em R, examinamos o impacto de variáveis como o dólar (DXY), a curva de juros e a incerteza global. Os resultados mostram que um fortalecimento inesperado do dólar tem um efeito negativo e significativo no curto prazo sobre os retornos do ouro, embora a maior parte de sua variância seja explicada por fatores intrínsecos ao seu próprio mercado.

Existe correlação entre vagas de emprego e o S&P 500?

O que explica a divergência entre S&P 500 e vagas de emprego? Seria o impacto da IA ou a política monetária? Utilizando um análise dados e modelo VAR e testes de causalidade de Granger usando a linguagem de programação R, investigamos a relação e o motivo por trás da "boca de jacaré".

Como medir a comunicação do Banco Central?

Descubra como o índice ALT transforma a linguagem do Banco Central em dados analisáveis, permitindo investigar como o tom das atas do COPOM varia conforme o cenário macroeconômico e as decisões de política monetária.

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.