Contexto

Eu vou criar uma base de dados que contem os homicídios por cidade por ano.


No caminho para a criação dessa base de dados a gente vai ver quais são as cidades mais violentas, onde que os houve melhora relativa em termos de segurança pública, onde os homicídios estão mais concentrados em relação a dia da semana, raça, idade, etc.

Apesar do tema ser pesado, vai ser legal.

Pacotes

library(loadinstall)
#devtools::install_github("flaviaerius/loadinstall")

packages <- c("haven", "readr", "ggplot2", "ggrepel", "ggthemes", 
  "tidyr", "tidyverse", "sidrar", "rbcb", "readxl", "lubridate", 
  "sjPlot", "sjstats", "broom", "kableExtra", "modelsummary", "kableExtra", "plm", "AER", "zoo", "readr", "ggplot2", "methods", "ggthemes", 
  "directlabels", "ggrepel", "readxl", "haven", "dplyr", "knitr", "tidyr", 
  "gghighlight", "fixest", "modelsummary", "basedosdados", "DBI", 
  "data.table", "did", "lubridate", "stargazer", "bigrquery", "stringi", "sidrar", "viridis", "gtsummary",
  "broom", "data.table")

lapply(packages, dynamic_require)

Como baixar os dados da BD (opcional)

Para carregar esses dados você precisa carregar as suas credenciais. Eu vou omitir o chunk que faz isso com as minhas credenciais. Mas, só para ficar claro, é algo próximo disso aqui.

con <- dbConnect( bigrquery::bigquery(), billing = “nomedoprojeto”, project = “basedosdados” )

set_billing_id(“projeto-009909009”)

Estou dizendo que esta parte é opcional porque eu vou fornecer os dados para vocês.

CARREGANDO

load("homicidios.Rda")
# Primeiro gráfico: densidade da variável idade
ggplot(homicidios, aes(x = idade)) +
  geom_density(fill = "skyblue", alpha = 0.7) +
  labs(title = "Densidade da Idade dos Homicídios")
## Warning: Removed 20484 rows containing non-finite values (`stat_density()`).

# Segundo gráfico: densidade da variável idade separada por sexo
table(homicidios$sexo)
## 
##       1       2 
## 1009302   88135
ggplot(homicidios, aes(x = idade, fill = factor(sexo))) +
  geom_density(alpha = 0.4) +
  scale_fill_manual(values = c("blue", "red"), labels = c("Homens", "Mulheres")) +
  labs(title = "Densidade da Idade dos Homicídios", fill = "")
## Warning: Removed 20484 rows containing non-finite values (`stat_density()`).

homicidios2 <- homicidios %>% 
  filter(raca_cor == 1 | raca_cor == 2 | raca_cor == 4)

ggplot(homicidios2, aes(x = idade, fill = factor(raca_cor))) +
  geom_density(alpha = 0.3) +
  scale_fill_manual(values = c("blue", "black", "darkred"), labels = c("Branca", "Preta", "Parda")) +
  labs(title = "Densidade da Idade dos Homicídios", fill = "")
## Warning: Removed 14712 rows containing non-finite values (`stat_density()`).

ggplot(homicidios, aes(x = escolaridade, fill = factor(sexo))) +
  geom_density(alpha = 0.4) +
  scale_fill_manual(values = c("blue", "red"), labels = c("Homens", "Mulheres")) +
  labs(title = "Esse não é bom. Pq?", fill = "")
## Warning: Groups with fewer than two data points have been dropped.
## Warning in max(ids, na.rm = TRUE): nenhum argumento não faltante para max;
## retornando -Inf

Dando uma olhada na base de homicídios

Homicídios por ano

homicidios <- homicidios %>%
  mutate(data_obito = as.Date(data_obito),
         year = lubridate::year(data_obito))

counts <- homicidios %>%
  group_by(year) %>%
  summarise(count = n())

ggplot(counts, aes(x = year, y = count/1000)) +
  geom_line() +
  geom_point() +
  labs(title = "",
       x = "",
       y = "Homicídios (mil)")+theme_clean()

Dia da semana importa?

É preciso criar a variável dia da semana.

homicidios <- homicidios %>%
  mutate(data_obito = as.Date(data_obito),
         dia = weekdays(data_obito))
# Definir a ordem dos dias da semana
dias_ordem <- c("segunda-feira", "terça-feira", "quarta-feira", "quinta-feira", "sexta-feira", "sábado", "domingo")

# Converter a variável dia para fator com a ordem desejada
homicidios$dia <- factor(homicidios$dia, levels = dias_ordem)

# Criar um gráfico de barras com a ordem dos dias da semana definida
ggplot(homicidios, aes(x = dia)) +
  geom_bar(fill = "skyblue", color = "black") +
  labs(title = "Somatório de 2000 a 2023",
       x = "",
       y = "Homicídios (mil)") +
  theme_minimal()+
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))+
    scale_y_continuous(labels = scales::number_format(scale = 1e-3))

ggplot(homicidios, aes(x = dia, y = ..count../1000)) +
  geom_bar(fill = "skyblue", color = "black") +
  geom_text(stat='count', aes(label=round(..count../1000)), vjust=-0.5, size=3) +
  labs(title = "Somatório de 2000 a 2023",
       x = "",
       y = "Homicídios (mil)") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)) 
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.