Introdução

O cumprimento de mandados de prisão é um processo crucial para a manutenção da ordem pública e a garantia da justiça. Ele representa a concretização de uma decisão judicial, na qual um indivíduo é privado de sua liberdade em decorrência de um crime cometido.

No Brasil, o cumprimento de mandados de prisão é realizado por diversas forças de segurança, como a Polícia Federal, a Polícia Civil e a Polícia Militar. O processo envolve diversas etapas, desde a expedição do mandado pelo juiz até a captura do indivíduo e seu encaminhamento ao sistema prisional.

A efetividade do cumprimento de mandados de prisão é fundamental para a segurança da sociedade. Indivíduos que possuem mandados de prisão em aberto representam um risco para a comunidade, e sua captura é essencial para evitar a prática de novos crimes.

No entanto, o cumprimento de mandados de prisão também enfrenta diversos desafios, como a falta de informações precisas sobre o paradeiro dos foragidos, a resistência de algumas comunidades à ação policial e a complexidade do sistema prisional.

O objetivo da presente produção de conhecimento é realizar o cruzamento de dados de mandados de prisão dos estados do nordeste brasileiro, a fim de identificar possíveis atuações interestaduais e organizações criminosas. Cruzar dados de mandados de prisão emitidos por diferentes estados é de extrema importância para a segurança pública e o sistema de justiça brasileiro. Essa prática permite:

  • Identificar foragidos com mandados múltiplos: Uma pessoa pode ter mandados de prisão expedidos em diferentes estados, dificultando sua captura se as informações não forem compartilhadas. O cruzamento de dados permite identificar esses casos e priorizar a prisão de indivíduos com maior periculosidade.

  • Combater o crime organizado: Organizações criminosas frequentemente atuam em diferentes estados. O cruzamento de dados auxilia na identificação de membros dessas organizações, seus padrões de movimentação e suas atividades ilícitas, facilitando a ação das forças de segurança.

  • Aprimorar a inteligência policial: A análise de dados de diferentes estados fornece informações valiosas para a inteligência policial, permitindo a criação de mapas do crime, a identificação de rotas de fuga e a previsão de áreas de risco.

  • Garantir a efetividade do sistema de justiça: O cruzamento de dados evita a duplicidade de mandados, garante a atualização das informações sobre foragidos e auxilia na localização de testemunhas e vítimas que podem ter se mudado para outros estados.

O Banco Nacional de Monitoramento de Prisões (BNMP 2.0) do Conselho Nacional de Justiça (CNJ) é uma ferramenta fundamental para o cruzamento de dados de mandados de prisão em todo o país. O BNMP 2.0 permite que as forças de segurança e o sistema de justiça acessem informações atualizadas sobre mandados de prisão, facilitando a captura de foragidos e o combate ao crime.

Pacotes Requeridos

Os seguintes pacotes são utilizados no tratamento dos dados:

  • readr: é um pacote do R projetado para simplificar e acelerar a leitura de arquivos de dados tabulares, como CSVs e arquivos delimitados;
  • abjutils: biblioteca que fornece um conjunto de ferramentas abrangentes para o processamento e manipulação de dados textuais;
  • plotly: biblioteca de visualização de dados interativa que permite criar gráficos e dashboards de alta qualidade.
  • tidyr: utilizado para a organização e transformação de dados. Ele permite remodelar dados, facilitando a manipulação e a análise.
  • igraph: utilizado para gerar gráficos de vínculo.

Origem dos dados

O Banco Nacional de Monitoramento de Prisões (BNMP 2.0) é um sistema eletrônico abrangente que armazena e gerencia uma vasta gama de dados relacionados a prisões no Brasil. Ele foi desenvolvido pelo Conselho Nacional de Justiça (CNJ) com o objetivo de centralizar e uniformizar as informações sobre mandados de prisão, alvarás de soltura e outras ordens judiciais relacionadas à privação de liberdade.

Os dados utilizados nesta presente produção podem ser encontrados através do link selecionando-se os estados de interesse e foram coletados em 18/02/2025.

A estrutura original dos dados inclui as seguintes variáveis:

  • Número: Identificador único da ordem de prisão.

  • Nome: Nome completo da pessoa procurada.

  • Alcunha: Apelidos ou outros nomes pelos quais a pessoa é conhecida.

  • Nome da Mãe: Nome completo da mãe da pessoa procurada.

  • Nome do Pai: Nome completo do pai da pessoa procurada.

  • Data de Nascimento: Data de nascimento da pessoa procurada.

  • Data: Data de emissão da ordem de prisão.

  • Órgão Expedidor: Identificação do órgão judicial que emitiu a ordem.

  • Peça: Tipo da peça judicial (mandado de prisão, etc.).

Carga dos dados

Exibir código
alagoas <- as.data.frame(read_csv("relatorio alagoas.csv",locale = locale(encoding = "UTF-8"),
                       col_types = cols(
                         `Data de Nascimento` = col_date(format = "%d/%m/%Y"),
                         Data = col_date(format = "%d/%m/%Y")
                       )))
alagoas$Estado <- "Alagoas"
alagoas$Estado <- as.factor(alagoas$Estado)

bahia <- as.data.frame(read_csv("relatorio bahia.csv",locale = locale(encoding = "UTF-8"),
                       col_types = cols(
                         `Data de Nascimento` = col_date(format = "%d/%m/%Y"),
                         Data = col_date(format = "%d/%m/%Y")
                       )))
bahia$Estado <- "Bahia"
bahia$Estado <- as.factor(bahia$Estado)

ceara <- as.data.frame(read_csv("relatorio ceara.csv",locale = locale(encoding = "UTF-8"),
                       col_types = cols(
                         `Data de Nascimento` = col_date(format = "%d/%m/%Y"),
                         Data = col_date(format = "%d/%m/%Y")
                       )))
ceara$Estado <- "Ceara"
ceara$Estado <- as.factor(ceara$Estado)
  
maranhao <- as.data.frame(read_csv("relatorio maranhao.csv",locale = locale(encoding = "UTF-8"),
                       col_types = cols(
                         `Data de Nascimento` = col_date(format = "%d/%m/%Y"),
                         Data = col_date(format = "%d/%m/%Y")
                       )))
maranhao$Estado <- "Maranhao"
maranhao$Estado <- as.factor(maranhao$Estado)

paraiba <- as.data.frame(read_csv("relatorio paraiba.csv",locale = locale(encoding = "UTF-8"),
                       col_types = cols(
                         `Data de Nascimento` = col_date(format = "%d/%m/%Y"),
                         Data = col_date(format = "%d/%m/%Y")
                       )))
paraiba$Estado <- "Paraiba"
paraiba$Estado <- as.factor(paraiba$Estado)

pernambuco <- as.data.frame(read_csv("relatorio pernambuco.csv",locale = locale(encoding = "UTF-8"),
                       col_types = cols(
                         `Data de Nascimento` = col_date(format = "%d/%m/%Y"),
                         Data = col_date(format = "%d/%m/%Y")
                       )))
pernambuco$Estado <- "Pernambuco"
pernambuco$Estado <- as.factor(pernambuco$Estado)


piaui <- as.data.frame(read_csv("relatorio piaui.csv",locale = locale(encoding = "UTF-8"),
                       col_types = cols(
                         `Data de Nascimento` = col_date(format = "%d/%m/%Y"),
                         Data = col_date(format = "%d/%m/%Y")
                       )))
piaui$Estado <- "Piaui"
piaui$Estado <- as.factor(piaui$Estado)

rio_grande_do_norte <- as.data.frame(read_csv("relatorio rio grande do norte.csv",locale = locale(encoding = "UTF-8"),
                       col_types = cols(
                         `Data de Nascimento` = col_date(format = "%d/%m/%Y"),
                         Data = col_date(format = "%d/%m/%Y")
                       )))
rio_grande_do_norte$Estado <- "Rio G. do Norte"
rio_grande_do_norte$Estado <- as.factor(rio_grande_do_norte$Estado)

sergipe <- as.data.frame(read_csv("relatorio sergipe.csv",locale = locale(encoding = "UTF-8"),
                       col_types = cols(
                         `Data de Nascimento` = col_date(format = "%d/%m/%Y"),
                         Data = col_date(format = "%d/%m/%Y")
                       )))
sergipe$Estado <- "Sergipe"
sergipe$Estado <- as.factor(sergipe$Estado)

#REESTRUTURAÇÃO#
#Unificação dos dados#
nordeste <- rbind(alagoas, bahia, ceara, maranhao, paraiba, pernambuco, piaui, rio_grande_do_norte, sergipe)
rm(alagoas, bahia, ceara, maranhao, paraiba, pernambuco, piaui, rio_grande_do_norte, sergipe)

#Eliminação da coluna 'situação'
nordeste$Situação <- NULL

Para garantir a correta importação dos dados, os arquivos .csv foram padronizados com a nomenclatura “relatorio nome_do_estado”. O processo de carregamento e preparação dos dados para análise compreende as seguintes etapas:

  1. Carregamento dos Dados: 1.1. Importação dos arquivos .csv, individualmente, para cada estado; 1.2. Criação de uma nova coluna, “Estado”, em cada dataframe, identificando a origem dos Mandados de Prisão.
  2. Preparação e Visão Geral 2.1. Unificação de todos os dataframes em um único conjunto de dados, “nordeste”, para facilitar a análise comparativa; 2.2. Remoção da coluna “situação”, considerada desnecessária para os objetivos da análise.

Este fluxo de trabalho visa organizar e consolidar os dados de forma eficiente, permitindo análises abrangentes e comparativas dos Mandados de Prisão nos estados do Nordeste.

O código desta seção exibe uma rápida exploração dos conjuntos de dados relacionados aos mandados de prisão estados do Nordeste do Brasil. Primeiramente é exibida a estrutura do dataframe ‘nordeste’ para entender as variáveis presentes.

Este dataframe detalha informações cruciais sobre mandados de prisão na região Nordeste, abrangendo 57.680 registros e 10 variáveis distintas. Os campos são categorizados em diferentes tipos de dados, refletindo a natureza das informações que armazenam. Campos como “Número”, “Nome”, “Alcunha”, “Nome da Mãe”, “Nome do Pai”, “Órgão Expedidor” e “Peça” são do tipo caractere (chr), indicando que armazenam texto. Estes campos são essenciais para identificar indivíduos e processos, além de fornecer detalhes sobre a origem dos mandados. Os campos “Data de Nascimento” e “Data” são do tipo data (Date), formatados como “AAAA-MM-DD”, permitindo análises temporais e demográficas. Por fim, o campo “Estado” é um fator (Factor) com 9 níveis, representando os estados do Nordeste, o que facilita a análise geográfica da distribuição dos mandados. Em conjunto, esses campos fornecem um panorama completo dos mandados de prisão, desde a identificação dos envolvidos até a localização e o momento da emissão, possibilitando diversas análises estatísticas e estudos sobre o sistema prisional na região.

Em seguida, são exibidas as cinco primeiras linhas do dataframe para que o usuário possa visualizar o conteúdo e a estrutura dos dados. O objetivo é fornecer uma visão geral inicial dos dados, permitindo identificar variáveis e ter uma ideia dos valores registrados em cada estado.

str(nordeste)
## 'data.frame':    57680 obs. of  10 variables:
##  $ Número            : chr  "0005060-90.2018.8.02.0001.01.0003-04" "0002303-62.2007.8.02.0049.01.0001-03" "0003280-85.2011.8.02.0058.01.0001-01" "0002577-15.2003.8.02.0001.01.0001-00" ...
##  $ Nome              : chr  "MIRIAM SUELY DA SILVA LOPES" "WELLINTON FERREIRA DE LIMA" "Luiz Silva Duarte" "Mauro Jorge Ferreira da Silva" ...
##  $ Alcunha           : chr  "Não informado" "GORDINHO" "Não Informado" "Não Informado" ...
##  $ Nome da Mãe       : chr  "Maria Vilma Nogueira da Silva" "GENECE ROSA FERREIRA DE LIMA" "Não Informado" "Marizete Ferreira dsa Silva" ...
##  $ Nome do Pai       : chr  "JOSE CICERO LOPES DA SILVA" "SEVERINO FERREIRA DE LIMA" "Não Informado" "Antônio Ferreira da Silva" ...
##  $ Data de Nascimento: Date, format: "1983-05-19" "1984-08-15" ...
##  $ Data              : Date, format: "2018-05-24" "2018-07-31" ...
##  $ Órgão Expedidor   : chr  "17ª VARA CRIMINAL DA CAPITAL" "4ª VARA CRIMINAL DE PENEDO" "JUIZADO ESPECIAL CRIMINAL E DA VIOLÊNCIA DOMÉSTICA E FAMILIAR CONTRA A MULHER DE ARAPIRACA" "9ª VARA CRIMINAL DA CAPITAL / TRIBUNAL DO JÚRI" ...
##  $ Peça              : chr  "Mandado de Prisão" "Mandado de Prisão" "Mandado de Prisão" "Mandado de Prisão" ...
##  $ Estado            : Factor w/ 9 levels "Alagoas","Bahia",..: 1 1 1 1 1 1 1 1 1 1 ...
knitr::kable(head(nordeste,5), caption = "Visão Geral")
Visão Geral
Número Nome Alcunha Nome da Mãe Nome do Pai Data de Nascimento Data Órgão Expedidor Peça Estado
0005060-90.2018.8.02.0001.01.0003-04 MIRIAM SUELY DA SILVA LOPES Não informado Maria Vilma Nogueira da Silva JOSE CICERO LOPES DA SILVA 1983-05-19 2018-05-24 17ª VARA CRIMINAL DA CAPITAL Mandado de Prisão Alagoas
0002303-62.2007.8.02.0049.01.0001-03 WELLINTON FERREIRA DE LIMA GORDINHO GENECE ROSA FERREIRA DE LIMA SEVERINO FERREIRA DE LIMA 1984-08-15 2018-07-31 4ª VARA CRIMINAL DE PENEDO Mandado de Prisão Alagoas
0003280-85.2011.8.02.0058.01.0001-01 Luiz Silva Duarte Não Informado Não Informado Não Informado NA 2018-08-01 JUIZADO ESPECIAL CRIMINAL E DA VIOLÊNCIA DOMÉSTICA E FAMILIAR CONTRA A MULHER DE ARAPIRACA Mandado de Prisão Alagoas
0002577-15.2003.8.02.0001.01.0001-00 Mauro Jorge Ferreira da Silva Não Informado Marizete Ferreira dsa Silva Antônio Ferreira da Silva 1969-10-25 2017-11-09 9ª VARA CRIMINAL DA CAPITAL / TRIBUNAL DO JÚRI Mandado de Prisão Alagoas
0700076-96.2014.8.02.0054.01.0001-25 João Amaro dos Santos Filho Não Informado Silvania da Conceição Silva João Amaro dos Santos 1994-11-23 2016-12-16 VARA DO ÚNICO OFÍCIO DE SÃO LUIZ DO QUITUNDE Mandado de Prisão Alagoas

Reestrutuação e Higienização dos dados

Para garantir a qualidade e a consistência dos dados, esta etapa foca na padronização, crucial para análises precisas. O processo de higienização dos dados envolve os seguintes passos:

  1. Tratamento dos Campos de Texto (“Nome”, “Nome da Mãe” e “Nome do Pai”):

1.1. Padronização de Caixa Alta: Todos os caracteres textuais serão convertidos para maiúsculo, garantindo uniformidade.

1.2. Remoção de Espaços Excedentes: Espaços em branco desnecessários no início, no final das palavras serão eliminados.

1.3. Substituição de Caracteres Especiais: Caracteres especiais, como acentos e símbolos, serão padronizados ou substituídos, conforme necessário.

1.4. Tratamento de Dados Ausentes: Os campos com dados faltantes serão padronizados, seja por meio de imputação de valores ou outras técnicas adequadas.

Ao final é exibido o resultado final da higienização dos dados para as dez primeiras linhas.

Exibir código
##HIGIENIZAÇÃO##
#Caracteres maiúsculos#
nordeste$Nome <- toupper(nordeste$Nome)
nordeste$`Nome da Mãe` <- toupper(nordeste$`Nome da Mãe`)
nordeste$`Nome do Pai` <- toupper(nordeste$`Nome do Pai`)
nordeste$`Alcunha` <- toupper(nordeste$`Alcunha`)

#Remoção de caracteres especiais#
nordeste$Nome <- abjutils::rm_accent(nordeste$Nome)
nordeste$`Nome da Mãe` <- abjutils::rm_accent(nordeste$`Nome da Mãe`)
nordeste$`Nome do Pai` <- abjutils::rm_accent(nordeste$`Nome do Pai`)
nordeste$Alcunha <- abjutils::rm_accent(nordeste$Alcunha)

#Remoção de espaçoes em branco no início e fim#
nordeste$Nome <-  trimws(nordeste$Nome)
nordeste$`Nome da Mãe` <-  trimws(nordeste$`Nome da Mãe`)
nordeste$`Nome do Pai` <- abjutils::rm_accent(nordeste$`Nome do Pai`)
nordeste$Alcunha <- abjutils::rm_accent(nordeste$Alcunha)

#Padronização de campos com dados ausentes#
nordeste$`Nome do Pai` <- gsub(pattern = "NAO (INFORMAD(A|O)|IDENTIFICAD(O|A))|NAO CONSTA|NADA CONSTA|NAO DECLARAD(O|A)|IGNORAD(O|A)|SEM (MAE|PAI)|DESCONHECID(O|A)|SEM (INFO|INFORMACAO)|NAO DECLARAD(A|O)|NAO INFORMAD(O|A) (NOS AUTOS|NO PROCESSO)|NAO INFORMADO HA INFORMACAO NOS AUTOS|NAO INFORMADO INFORMADA|MAE DESCONHECIDA|PAI (DESCONHECIDO|NAO ((DECLARADO|INFORMADO)|IGNORADO))", replacement = NA, x = nordeste$`Nome do Pai`)
nordeste$`Nome da Mãe` <- gsub(pattern = "NAO (INFORMAD(A|O)|IDENTIFICAD(O|A)|HA INFORMACAO)|NAO CONSTA|NADA CONSTA|NAO DECLARAD(O|A)|IGNORAD(O|A)|SEM (MAE|PAI)|DESCONHECID(O|A)|SEM (INFO|INFORMACAO)|NAO DECLARAD(A|O)|NAO INFORMAD(O|A) (NOS AUTOS|NO PROCESSO)|NAO INFORMADO HA INFORMACAO NOS AUTOS|NAO INFORMADO INFORMADA|MAE DESCONHECIDA|PAI (DESCONHECIDO|NAO ((DECLARADO|INFORMADO)|IGNORADO))", replacement = NA, x = nordeste$`Nome da Mãe`)

nordeste$`Nome do Pai`[nordeste$`Nome do Pai`=="ND"] <- NA
nordeste$`Nome da Mãe`[nordeste$`Nome da Mãe`=="ND"] <- NA
knitr::kable(head(nordeste,5), caption = "Visão Geral dos dados higienizados")
Visão Geral dos dados higienizados
Número Nome Alcunha Nome da Mãe Nome do Pai Data de Nascimento Data Órgão Expedidor Peça Estado
0005060-90.2018.8.02.0001.01.0003-04 MIRIAM SUELY DA SILVA LOPES NAO INFORMADO MARIA VILMA NOGUEIRA DA SILVA JOSE CICERO LOPES DA SILVA 1983-05-19 2018-05-24 17ª VARA CRIMINAL DA CAPITAL Mandado de Prisão Alagoas
0002303-62.2007.8.02.0049.01.0001-03 WELLINTON FERREIRA DE LIMA GORDINHO GENECE ROSA FERREIRA DE LIMA SEVERINO FERREIRA DE LIMA 1984-08-15 2018-07-31 4ª VARA CRIMINAL DE PENEDO Mandado de Prisão Alagoas
0003280-85.2011.8.02.0058.01.0001-01 LUIZ SILVA DUARTE NAO INFORMADO NA NA NA 2018-08-01 JUIZADO ESPECIAL CRIMINAL E DA VIOLÊNCIA DOMÉSTICA E FAMILIAR CONTRA A MULHER DE ARAPIRACA Mandado de Prisão Alagoas
0002577-15.2003.8.02.0001.01.0001-00 MAURO JORGE FERREIRA DA SILVA NAO INFORMADO MARIZETE FERREIRA DSA SILVA ANTONIO FERREIRA DA SILVA 1969-10-25 2017-11-09 9ª VARA CRIMINAL DA CAPITAL / TRIBUNAL DO JÚRI Mandado de Prisão Alagoas
0700076-96.2014.8.02.0054.01.0001-25 JOAO AMARO DOS SANTOS FILHO NAO INFORMADO SILVANIA DA CONCEICAO SILVA JOAO AMARO DOS SANTOS 1994-11-23 2016-12-16 VARA DO ÚNICO OFÍCIO DE SÃO LUIZ DO QUITUNDE Mandado de Prisão Alagoas

Análise exploratória dos dados

O gráfico de barras abaixo oferece uma representação visual clara e concisa da distribuição dos mandados de prisão pendentes por estado no Nordeste, facilitando a análise e a identificação de padrões e tendências.

Exibir código
contagem_estados_nordeste <- nordeste %>%
  count(Estado)

grafico_estados_nordeste <- plot_ly(data = contagem_estados_nordeste,
                                      x = ~Estado,
                                      y = ~n,
                                      type = 'bar') %>%
  layout(title = "Registros de Mandados de Prisão por Estado no Nordeste",
         xaxis = list(title = "Estados"),
         yaxis = list(title = "Mandados Pendentes"))
grafico_estados_nordeste

Reincidência por estado

Para a individualização das pessoas com mandados de prisão, é gerada uma chave de identificação única, combinando os campos “Nome”, “Nome da Mãe” e “Data de Nascimento”, o que possibilita identificar indivíduos presentes em múltiplos estados.

O código analisa o conjunto de dados para determinar a quantidade de pessoas reincidentes existentes em cada estado do Nordeste, baseado na quantidade de vezes que o nome completo(composto pela concatenação dos campos “Nome”, “Nome da Mãe” e “Data de Nascimento”) aparece no conjunto de dados.

vale ressaltar que a definição de “reincidência” neste código é baseada na frequência com que um nome completo aparece nos dados. Isso pode não corresponder à definição legal de reincidência, que geralmente envolve condenações criminais anteriores.

Os resultados ainda dependem da qualidade e integridade dos registros dos dados originais. Erros ou inconsistências nos nomes podem afetar os resultados.

Exibir código
# Carga de dataframe chamado 'dados' a partir de 'nordeste'
dados <- nordeste

# Criar a chave de identificação da pessoa
dados$pessoa_id <- paste(dados$Nome, dados$`Nome da Mãe`, dados$`Data de Nascimento`, sep = "-")

# Contar reincidências por pessoa e estado
reincidencias <- dados %>%
  count(dados$pessoa_id, Estado, name = "Reincidencias") %>%
  filter(Reincidencias > 1)

# Exibir reincidências por estado
reincidencias_por_estado <- reincidencias %>%
  count(Estado, name = "Pessoas_Reincidentes") %>%
  arrange(desc(Pessoas_Reincidentes)) # Ordena do maior para o menor
# Exibir o resultado
knitr::kable(reincidencias_por_estado, caption = "Reincidências por estado", align = 'c', col.names = c("Estado", "Pessoas Reincidentes"))
Reincidências por estado
Estado Pessoas Reincidentes
Pernambuco 646
Paraiba 475
Bahia 381
Rio G. do Norte 375
Alagoas 266
Piaui 259
Sergipe 238
Ceara 74
Maranhao 70
# Gráfico de barras interativo com Plotly
plot_ly(reincidencias_por_estado, x = ~Estado, y = ~Pessoas_Reincidentes, type = "bar") %>%
  layout(title = "Reincidência por Estado",
         xaxis = list(title = "Estado"),
         yaxis = list(title = "Número de Pessoas Reincidentes"))

Interseções interestaduais

O código apresentado extrai a lista de estados únicos presentes nos dados e cria uma matriz denominada “intersecoes”, que armazenará o número de pessoas com mandados em comum entre cada par de estados.

Utilizando loops, o código calcula as interseções, comparando cada par de estados e contando o número de indivíduos com a mesma chave de identificação em ambos. Os resultados são armazenados na matriz “intersecoes”, que é então impressa, revelando o número de sobreposições entre os estados.

Para uma visualização gráfica, um heatmap é gerado, onde a intensidade da cor representa o número de sobreposições. Além disso um gráfico de rede mostra os estados como nós e as sobreposições como arestas. A espessura das arestas indica a força da conexão entre os estados.

A partir das análises dos resultados apresentados é possível verificar a sobreposição de indivíduos com mandados de prisão entre os estados do Nordeste, bem como a quantificações dessas sobreposições através de dados e visualização gráfica, permitindo identificar quais estados compartilham um maior número de indivíduos com mandados em comum.

Exibir código
# Criar uma lista de estados únicos
estados <- unique(dados$Estado)

# Criar uma matriz para armazenar as interseções
intersecoes <- matrix(0, nrow = length(estados), ncol = length(estados), 
                     dimnames = list(estados, estados))

# Calcular as interseções
for (i in 1:length(estados)) {
  for (j in 1:length(estados)) {
    if (i != j) { # Condição para excluir interseções do mesmo estado
      pessoas_estado_i <- dados$pessoa_id[dados$Estado == estados[i]]
      pessoas_estado_j <- dados$pessoa_id[dados$Estado == estados[j]]
      intersecoes[i, j] <- length(intersect(pessoas_estado_i, pessoas_estado_j))
    }
  }
}
# Matriz de interseções
knitr::kable(intersecoes, caption = "Interseções entre estados", align = 'c')
Interseções entre estados
Alagoas Bahia Ceara Maranhao Paraiba Pernambuco Piaui Rio G. do Norte Sergipe
Alagoas 0 4 1 0 5 26 1 0 16
Bahia 4 0 0 2 8 8 0 3 21
Ceara 1 0 0 1 2 3 4 7 0
Maranhao 0 2 1 0 2 1 12 1 2
Paraiba 5 8 2 2 0 42 2 37 9
Pernambuco 26 8 3 1 42 0 2 10 6
Piaui 1 0 4 12 2 2 0 0 1
Rio G. do Norte 0 3 7 1 37 10 0 0 4
Sergipe 16 21 0 2 9 6 1 4 0
# Visualização em heatmap
heatmap(intersecoes, main = "Interseções de Pessoas entre Estados", Rowv = NA, Colv = NA, scale="none", )

# Visualização em rede
if (require(igraph)) {
  grafo <- graph.adjacency(intersecoes, mode = "undirected", weighted = TRUE, diag = FALSE, )
  plot(grafo, vertex.label.cex = 0.8, edge.width = E(grafo)$weight / max(E(grafo)$weight) * 5)
}

Conclusões

Ao analisar a distribuição dos dados de mandados de prisão pendentes por estado no Nordeste, podemos fazer algumas afirmações importantes:

O gráfico revela uma variação considerável na quantidade de mandados pendentes entre os estados. Isso indica que o problema não é homogêneo na região, com alguns estados enfrentando uma situação mais crítica do que outros.

É possível que existam fatores socioeconômicos, demográficos ou de gestão do sistema judiciário que influenciam essa variação. Uma análise mais aprofundada desses fatores poderia revelar padrões e correlações importantes. Ao analisar dados estatísticos do Conselho Nacional de justiça, é possivel notar que estados como Pernambuco e Ceará possuem um número mais elevado de mandados de prisão em aberto, se comparados aos demais estados do nordeste.

A distribuição desigual dos mandados pendentes pode ter implicações para a segurança pública, a eficiência do sistema judiciário e a percepção de justiça na região. Estados com um grande número de mandados pendentes podem enfrentar desafios adicionais na gestão do sistema prisional e na aplicação da lei.

Outro fator de destaque é a sobreposição de mandados de prisão entre os estados, por exemplo, é possível verificarque o estado da Paraíba apesar de não figurar como o maior em volume de mandados de prisão encontra-se como o estado com o maior volume de pessoas com interseções com outros estados.

Observa-se a necessidade de uma análise complementar para entender completamente a distribuição dos dados. Análises adicionais que poderiam trazer novas conclusões: comparar os dados com outros indicadores socioeconômicos e demográficos; analisar a evolução dos dados ao longo do tempo; investigar as causas da variação entre os estados.

A distribuição dos dados revela uma variação significativa na quantidade de mandados de prisão pendentes entre os estados do Nordeste, o que pode ter implicações importantes para a segurança pública e a justiça na região. Uma análise mais aprofundada dos dados é necessária para entender completamente as causas e as consequências dessa variação.