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.
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)
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
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()
É 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.