Sobre o dataset

O dataset utilizado nesse documento refere-se aos incidentes envolvendo qualquer tipo de arma de fogo no território estadunidense no período de 2013 - 2018. É importante ressaltar que esses dados não necessariamente somente se referem a incidentes fatais.

1. Introdução

1.1 Declaração do problema

Nesta análise, o objetivo é investigar o padrão de violência armada nos Estados Unidos a partir de um conjunto de dados públicos, buscando entender como os casos se distribuem no tempo e no espaço e qual a gravidade típica em termos de vítimas fatais e/ou feridas.
Esse tipo de investigação é relevante para formulação de políticas públicas (no contexto estado unidense), pois fornece evidências empíricas sobre a intensidade e a dinâmica da violência armada.

1.2 Dados utilizados e metodologia

Para abordar esse problema, foi utilizado um dataset do Kaggle que compila registros do Gun Violence Archive, cobrindo incidentes de violência armada entre 2013 e 2018.
A metodologia é a exploratória (EDA), combinando limpeza e transformação dos dados, criação de novas variáveis e visualizações (gráficos e tabelas) para revelar padrões que não são imediatamente aparentes nos dados brutos.

1.3 Abordagem técnica adotada

A abordagem técnica foca em transformar o conjunto de dados original em uma versão mais enxuta e analiticamente útil, com variáveis derivadas como ano, mês e total de vítimas (mortos + feridos).
Com isso, torna-se possível investigar questões sazonais (por ano e mês), padrões de intensidade e diferenças entre localidades, sem alterar o conteúdo informativo original do dataset.

2. Pacotes Requeridos

2.1 Carregamento dos pacotes

Nesta seção, será listado explicitamente todos os pacotes necessários para que a análise possa ser reproduzida por qualquer leitor, carregando-os de forma antecipada.

library(tidyverse)
library(lubridate)
library(kableExtra)
library(scales)
library(gridExtra)

2.2 Propósito dos pacotes

O tidyverse é utilizado como motor principal de manipulação dos dados, leitura do CSV, criação de novas variáveis e visualização por meio do ggplot2.

O lubridate é empregado para tratar datas de forma eficiente, permitindo extrair ano e mês da data de ocorrência, algo essencial para as análises sazonais.

O kableExtra é usado para apresentar os dados brutos e tabelas-resumo de forma limpa e legível no relatório final, melhorando a comunicação dos resultados.

O pacote scales auxilia na formatação de eixos, rótulos numéricos e legendas em gráficos, enquanto gridExtra permite combinar múltiplos gráficos em um único layout quando necessário.

3. Preparação dos Dados

3.1 Fonte dos dados

Os dados foram obtidos através do repositório Kaggle Gun Violence Data, que compila registros do Gun Violence Archive em formato tabular.
Essa fonte reúne incidentes reportados entre 2013 e 2018, permitindo análises estatísticas e exploratórias sobre violência armada ao longo do tempo.

3.2 Descrição dos dados originais

O dataset original contém mais de 230.000 registros de incidentes, incluindo variáveis como data, estado, cidade, número de mortos, número de feridos e coordenadas geográficas.
Algumas colunas, como participant_age e participant_gender, apresentam formatação complexa (texto não estruturado e informações concatenadas), o que exige tratamento específico e motiva, nesta análise, o foco em variáveis estruturadas de impacto (vítimas) e localização.

3.3 Importação e limpeza

Nesta etapa, o arquivo CSV é importado e são realizadas transformações para tornar o conjunto de dados mais adequado à análise exploratória.
Primeiro, convertemos a coluna de data para o formato apropriado; em seguida, criamos variáveis auxiliares de ano e mês e uma métrica total de vítimas, além de selecionar apenas as colunas necessárias e garantir a presença da informação de estado.

df_raw <- read_csv("gun-violence-data_01-2013_03-2018.csv")

df_clean <- df_raw %>%
  mutate(date = ymd(date)) %>%
  mutate(year = year(date),
         month = month(date, label = TRUE)) %>%
  mutate(total_victims = n_killed + n_injured) %>%
  select(date, year, month, state, city_or_county, n_killed, n_injured, total_victims, gun_type, latitude, longitude) %>%
  filter(!is.na(state))

df_weapons <- df_clean %>%
  select(gun_type) %>%
  drop_na(gun_type) %>%
  separate_rows(gun_type, sep = "\\|\\|") %>%
  mutate(gun_type_clean = str_remove(gun_type, "^[0-9]+::")) %>%
  mutate(gun_type_clean = str_to_title(gun_type_clean))

Essas etapas seguem um processo lógico: corrigir tipos, extrair componentes temporais relevantes, criar uma métrica de severidade por incidente e, por fim, reduzir o dataset às variáveis de interesse, removendo linhas sem estado para evitar problemas nas análises espaciais.

3.4 Visualização do dataset final

Abaixo, apresentamos uma amostra das primeiras 10 linhas do conjunto de dados limpo para que o leitor visualize como o dataset final está estruturado, sem imprimir mais de 200 linhas no relatório.

head(df_clean %>% select(-gun_type), 10) %>%
  kable(caption = "Dados Tratados (Amostra)") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
Dados Tratados (Amostra)
date year month state city_or_county n_killed n_injured total_victims latitude longitude
2013-01-01 2013 Jan Pennsylvania Mckeesport 0 4 4 40.3467 -79.8559
2013-01-01 2013 Jan California Hawthorne 1 3 4 33.9090 -118.3330
2013-01-01 2013 Jan Ohio Lorain 1 3 4 41.4455 -82.1377
2013-01-05 2013 Jan Colorado Aurora 4 0 4 39.6518 -104.8020
2013-01-07 2013 Jan North Carolina Greensboro 2 2 4 36.1140 -79.9569
2013-01-07 2013 Jan Oklahoma Tulsa 4 0 4 36.2405 -95.9768
2013-01-19 2013 Jan New Mexico Albuquerque 5 0 5 34.9791 -106.7160
2013-01-21 2013 Jan Louisiana New Orleans 0 5 5 29.9435 -90.0836
2013-01-21 2013 Jan California Brentwood 0 4 4 37.9656 -121.7180
2013-01-23 2013 Jan Maryland Baltimore 1 6 7 39.2899 -76.6412

3.5 Resumo das Variáveis de Interesse

Abaixo, um resumo estatístico das variáveis numéricas principais, que nos dá uma visão geral da gravidade dos incidentes.

# Resumo estatístico focado nas vítimas
summary(df_clean %>% select(n_killed, n_injured, total_victims))
##     n_killed         n_injured      total_victims     
##  Min.   : 0.0000   Min.   : 0.000   Min.   :  0.0000  
##  1st Qu.: 0.0000   1st Qu.: 0.000   1st Qu.:  0.0000  
##  Median : 0.0000   Median : 0.000   Median :  1.0000  
##  Mean   : 0.2523   Mean   : 0.494   Mean   :  0.7463  
##  3rd Qu.: 0.0000   3rd Qu.: 1.000   3rd Qu.:  1.0000  
##  Max.   :50.0000   Max.   :53.000   Max.   :103.0000

4 Análise Exploratória de Dados (EDA)

Visão Geral

Evolução Temporal

Investigamos se a violência está aumentando ou diminuindo ao longo dos anos registrados.
Os dados são agregados por mês/ano para visualizar a tendência.

# grouping dados por mês para observar possíveis tendências
trend_data <- df_clean %>%
  group_by(floor_date = floor_date(date, "month")) %>%
  summarise(total_incidents = n(),
            total_killed = sum(n_killed))

# evolução temporal
ggplot(trend_data, aes(x = floor_date)) +
  geom_line(aes(y = total_incidents, color = "Total de Incidentes"), size = 1) + 
  geom_line(aes(y = total_killed, color = "Total de Mortes"), size = 1) +       
  labs(title = "Evolução da Violência Armada (2013-2018)",
       subtitle = "Comparação entre volume de casos e letalidade ao longo do tempo",
       x = "Data", 
       y = "Quantidade Absoluta",
       color = "Métrica") + 
  theme_minimal() +
  scale_color_manual(values = c("Total de Incidentes" = "steelblue", "Total de Mortes" = "darkred"),
                     labels = c("Total de Incidentes", "Total de Mortes")) + 
  theme(legend.position = "bottom")

Distribuição por Estado (Estados mais violentos)

Análise da distribuição dos incidentes e vítimas por estado.
Quais estados concentram maior quantidade de violência armada

# Identificando os Top 10 estados por número de mortes
state_violence <- df_clean %>%
  group_by(state) %>%
  summarise(total_killed = sum(n_killed),
            total_injured = sum(n_injured)) %>%
  arrange(desc(total_killed)) %>%
  head(10)

# Transformando dados para formato longo (tidy) para plotagem agrupada
state_violence_long <- state_violence %>%
  pivot_longer(cols = c(total_killed, total_injured), 
               names_to = "type", 
               values_to = "count")

# Gráfico de barras comparativo
ggplot(state_violence_long, aes(x = reorder(state, count), y = count, fill = type)) +
  geom_col(position = "dodge") + 
  coord_flip() + 
  labs(title = "Top 10 Estados com Maior Violência Armada",
       subtitle = "Ranking baseado no número total de mortes",
       x = "Estado",
       y = "Total de Pessoas",
       fill = "Tipo de Vítima") + 
  scale_fill_manual(values = c("total_injured" = "#E69F00", "total_killed" = "#D55E00"),
                    labels = c("Feridos", "Mortos")) + 
  theme_light()

Análise: Estados populosos como Califórnia, Texas e Flórida lideram o ranking. É interessante notar a diferença na proporção entre mortos e feridos: em Illinois (onde fica Chicago), o número de feridos é desproporcionalmente alto em comparação ao número de mortos, o que pode indicar um tipo específico de conflito urbano ou acesso a atendimento médico de trauma.

Letalidade e Severidade

Nem todo incidente resulta em morte, mas alguns são catastróficos. O gráfico abaixo busca correlações entre número de feridos e mortos para identificar eventos de “Mass Shooting”

# Filtrando para remover zeros irrelevantes e focar em incidentes com vítimas
heatmap_data <- df_clean %>% 
  filter(total_victims > 0)

ggplot(heatmap_data, aes(x = n_injured, y = n_killed)) +
  geom_bin2d(bins = 30) + 
  scale_fill_viridis_c(option = "magma", trans = "log", name = "Frequência\n(Escala Log)") + 
  geom_smooth(method = "lm", color = "cyan", size = 0.5, se = FALSE) +
  labs(title = "Mapa de Calor: Severidade dos Incidentes",
       subtitle = "Cores mais quentes indicam onde a maioria dos crimes se concentra",
       x = "Número de Feridos", 
       y = "Número de Mortos") + 
  theme_dark() +
  annotate("text", x = 25, y = 40, label = "Eventos Raros\n(Mass Shootings)", color = "white", size = 3)

Análise: A grande concentração de pontos no canto inferior esquerdo (0,0) indica que a vasta maioria dos incidentes tem poucas vítimas. No entanto, os outliers (pontos distantes da massa) mostram eventos raros mas devastadores, onde dezenas de pessoas são feridas ou mortas em um único evento.

Armas mais utilizadas

# Contagem das armas limpas
top_weapons <- df_weapons %>%
  count(gun_type_clean, sort = TRUE) %>%
  # Remover "Unknown" se quiser focar apenas em armas identificadas
  filter(gun_type_clean != "Unknown") %>% 
  head(3)

# Gráfico de Barras
ggplot(top_weapons, aes(x = reorder(gun_type_clean, n), y = n)) +
  geom_col(fill = "#2c3e50", alpha = 0.8) +
  geom_text(aes(label = comma(n)), hjust = -0.1) + # Adiciona o valor na barra
  coord_flip() +
  labs(title = "As 3 Armas Mais Identificadas em Crimes",
       subtitle = "Excluindo armas não identificadas",
       x = "Tipo de Arma",
       y = "Frequência de Aparição") +
  theme_classic() +
  expand_limits(y = max(top_weapons$n) * 1.1) # Dá espaço para o texto

Análise: O gráfico confirma a prevalência massiva de Handguns (Pistolas/Revólveres). Elas são fáceis de ocultar e transportar, superando largamente armas longas como rifles ou espingardas (shotguns) na criminalidade diária.

Armas em Tiroteios em Massa (Mass Shootings)

Nesta seção, refinamos nossa análise para focar exclusivamente nos eventos de alta severidade. Definimos “Mass Shooting” como incidentes com 4 ou mais vítimas (mortos ou feridos). O objetivo é entender se o perfil do armamento muda quando analisamos apenas esses eventos catastróficos.

# 1. Filtrar apenas Mass Shootings (>= 4 vítimas)
mass_shootings_df <- df_clean %>%
  filter(total_victims >= 4)

# 2. Processamento de String (Limpeza da coluna gun_type apenas para esses casos)
ms_weapons <- mass_shootings_df %>%
  select(gun_type) %>%
  drop_na(gun_type) %>%
  # Separa linhas múltiplas
  separate_rows(gun_type, sep = "\\|\\|") %>%
  # Remove códigos numéricos "0::", "1::"
  mutate(gun_type_clean = str_remove(gun_type, "^[0-9]+::")) %>%
  # Padronização de texto
  mutate(gun_type_clean = str_to_title(gun_type_clean))

# 3. Contagem e Ranking (Top 3)
top_ms_weapons <- ms_weapons %>%
  count(gun_type_clean, sort = TRUE) %>%
  filter(gun_type_clean != "Unknown") %>% # Remove desconhecidos
  head(3)

# 4. Visualização
ggplot(top_ms_weapons, aes(x = reorder(gun_type_clean, n), y = n)) +
  geom_col(fill = "#8B0000", alpha = 0.9) + # Vermelho escuro para indicar gravidade
  geom_text(aes(label = n), hjust = -0.1, fontface = "bold") + 
  coord_flip() +
  labs(title = "Top 3 Armas em Mass Shootings",
       subtitle = "Considerando incidentes com 4+ vítimas (Mortos + Feridos)",
       x = "Tipo de Arma",
       y = "Frequência em Massacres") +
  theme_classic() +
  expand_limits(y = max(top_ms_weapons$n) * 1.15)

Incidentes Não Letais (Sem Óbitos)

Para finalizar nossa análise exploratória, investigamos o extremo oposto: incidentes onde houve vítimas feridas, mas nenhuma morte. Entender qual armamento está associado a casos de menor letalidade (sobrevivência das vítimas) pode indicar características do armamento (menor calibre) ou do tipo de crime.

# 1. Filtrar incidentes com feridos, mas SEM mortes
non_fatal_df <- df_clean %>%
  filter(n_killed == 0 & n_injured > 0)

# 2. Processamento de String para Armas
nf_weapons <- non_fatal_df %>%
  select(gun_type) %>%
  drop_na(gun_type) %>%
  separate_rows(gun_type, sep = "\\|\\|") %>%
  mutate(gun_type_clean = str_remove(gun_type, "^[0-9]+::")) %>%
  mutate(gun_type_clean = str_to_title(gun_type_clean))

# 3. Contagem e Ranking (Top 3)
top_nf_weapons <- nf_weapons %>%
  count(gun_type_clean, sort = TRUE) %>%
  filter(gun_type_clean != "Unknown") %>%
  head(3)

# 4. Visualização
ggplot(top_nf_weapons, aes(x = reorder(gun_type_clean, n), y = n)) +
  geom_col(fill = "#27AE60", alpha = 0.8) + # Verde para indicar "Sobrevivência/Não letal"
  geom_text(aes(label = comma(n)), hjust = -0.1) + 
  coord_flip() +
  labs(title = "Top 3 Armas em Incidentes Sem Mortes",
       subtitle = "Casos com apenas feridos (n_killed = 0)",
       x = "Tipo de Arma",
       y = "Frequência") +
  theme_classic() +
  expand_limits(y = max(top_nf_weapons$n) * 1.15)

Análise: Novamente, a Handgun (Pistola) domina o cenário. Isso reforça a tese de que a pistola é a arma onipresente na violência americana, seja em assassinatos ou em ferimentos. No entanto, é interessante observar se armas de menor potencial ofensivo ou armas de defesa pessoal aparecem aqui com mais frequência relativa do que nos dados de massacres. O fato de pistolas liderarem tanto em mortes quanto em ferimentos sugere que a letalidade depende muito da intenção do atirador e da circunstância, e não apenas do calibre da arma.

letalidade média por tipo de arma

  incident_weapon <- df_clean %>%
    select(date, state, city_or_county, n_killed, gun_type) %>%
    drop_na(gun_type) %>%
    separate_rows(gun_type, sep = "\\|\\|") %>%
    mutate(gun_type_clean = str_remove(gun_type, "^[0-9]+::"),
           gun_type_clean = str_to_title(gun_type_clean)) %>%
    filter(gun_type_clean != "Unknown" & gun_type_clean != "0:Unknown")
  
  weapon_lethality <- incident_weapon %>%
    group_by(gun_type_clean) %>%
    summarise(
      mean_killed = mean(n_killed, na.rm = TRUE),
      n_incidents = n()
    ) %>%
    filter(n_incidents >= 30) %>%
    arrange(desc(mean_killed))
  
  weapon_lethality %>%
  mutate(mean_killed = round(mean_killed, 2)) %>%
  kable(caption = "Letalidade Média por Tipo de Arma (Mortes por Incidente)") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed")) %>%
  row_spec(0, bold = TRUE, background = "#23272b") %>% 
  row_spec(1, bold = TRUE, color = "white", background = "#D55E00")
Letalidade Média por Tipo de Arma (Mortes por Incidente)
gun_type_clean mean_killed n_incidents
223 Rem [Ar-15] 0.23 1613
30-30 Win 0.20 110
7.62 [Ak-47] 0.17 939
44 Mag 0.17 197
308 Win 0.16 92
Shotgun 0.15 4263
10mm 0.14 50
45 Auto 0.14 2360
Handgun 0.13 25038
30-06 Spr 0.13 84
9mm 0.13 6448
Rifle 0.13 5268
40 Sw 0.13 2745
357 Mag 0.13 822
12 Gauge 0.12 1112
22 Lr 0.12 3346
20 Gauge 0.11 205
410 Gauge 0.10 97
38 Spl 0.10 1809
Other 0.08 1060
32 Auto 0.08 488
25 Auto 0.08 610
380 Auto 0.07 2392
16 Gauge 0.03 32

Sazonalidade Mensal

# somando todos os anos
seasonal_data <- df_clean %>%
  group_by(month) %>%
  summarise(total_incidents = n())

# Gráfico de Sazonalidade
ggplot(seasonal_data, aes(x = month, y = total_incidents)) +
  geom_col(fill = "#34d1bf", alpha = 0.8) +
  labs(title = "Sazonalidade Mensal de Incidentes",
       subtitle = "Média de Casos Agregados (2013-2018)",
       x = "Mês", 
       y = "Total de Incidentes (Todos os Anos)") + 
  theme_dark() +
  scale_y_continuous(labels = comma) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Conclusão

A análise deste projeto evidencia que, embora as handguns (pistolas e revólveres) sejam as armas mais comuns envolvidas em incidentes de violência armada nos Estados Unidos, a arma mais letal identificada é o fuzil AR-15. Esse fuzil, muito associado a tiroteios em massa, apresenta uma letalidade elevada devido à sua capacidade de causar danos graves com apenas um disparo, conforme evidenciado por eventos marcantes que resultaram em múltiplas mortes. Por outro lado, as handguns predominam sobretudo pela facilidade de acesso, porte e uso na criminalidade cotidiana, aparecendo tanto em incidentes letais quanto em não letais.

Adicionalmente, o período de verão nos EUA mostra-se especialmente violento, com aumento significativo nos casos de violência armada. Esse fenômeno é atribuído a fatores como maior tempo de atividades ao ar livre e mais interações sociais, que potencializam conflitos e agressões. Essa sazonalidade reforça a necessidade de atenção especial nas políticas públicas durante esses meses.

Os gráficos do projeto apontam que, enquanto os tiroteios em massa com AR-15 são devastadores e causam alta mortalidade, a violência generalizada com armas de fogo é impulsionada principalmente pelas pistolas e revólveres, responsáveis pela maioria das ocorrências, tanto com feridos quanto com mortos. A combinação desses elementos indica que as políticas e debates sobre controle de armas devem considerar esses dois aspectos distintos: a letalidade concentrada dos fuzis como o AR-15 e a prevalência generalizada das pistolas na violência diária.

Essa conclusão destaca, portanto, que a dinâmica da violência armada nos Estados Unidos é complexa, envolvendo diferentes tipos de armas com impactos distintos, assim como variações sazonais claras, que juntas moldam o cenário da violência armada no país.

Esses pontos foram corroborados por dados e estudos recentes que confirmam a alta letalidade do AR-15 em tiroteios em massa, a predominância das pistolas na maioria das mortes por arma de fogo, e o aumento da violência durante o verão americano.