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.
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.
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.
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.
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.
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.
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.
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.
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.
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"))| 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 |
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
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")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.
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.
# 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 textoAná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.
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)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.
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")| 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 |
# 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))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.