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