Este post é na verdade parte de um post que, por sua vez, é parte de uma ideia. Tudo começou com discussões políticas a respeito da violência. Então resolvi dar uma olhada nos dados. No final das contas não encontrei as correlações que imaginava. De toda forma, como tive todo o trabalho de pesquisa e produção, vou deixar disponível para quem tiver interesse.
Neste post específico está a construção da base de dados. Os gráficos estão no outro post.
Inicialmente é necessário carregar os seguintes pacotes:
library(tidyverse)
library(reshape2)
library(xlsx)
library(stargazer)
A base de dados que estou utilizando é a de homicídios por municípios, disponível no atlas da violência. Escolhi a variável homicídios, pois era a única disponível por municípios. Além disso, é uma importante proxy para violência.
HOM <- read.csv2(
"Municípios/Violência/homicidios-1996-01-15-2016-01-15.csv",
encoding = "UTF-8")
stargazer(HOM, type = "html", digit.separator = "", digits = 0)
Statistic | N | Mean | St. Dev. | Min | Pctl(25) | Pctl(75) | Max |
cod | 115353 | 3249029 | 986975 | 1100015 | 2511301 | 4118402 | 5300108 |
período | 115353 | 2006 | 6 | 1996 | 2001 | 2011 | 2016 |
valor | 115353 | 9 | 76 | 0 | 0 | 4 | 6657 |
População
Em seguida, fui atrás dos dados populacionais, pois no atlas só tinham as opções de homicídios e taxa de homicídios. Pensando em retrospectiva, poderia ter calculado a população com essas informações, ao invés de ter feito todo o trabalho que vou mostrar em seguida. O consolo é que o burro é o que aprende mais. :-(
De toda forma, foi o que fiz. Busquei as informações populacionais no ipeadata.
POP <- read.csv2("Municípios/População/ipeadata[11-10-2018-07-17].csv",
skip = 1, encoding = "UTF-8")
POP <- POP[,1:21]
stargazer(POP[1:5,], type = "html", summary = F,
digit.separator = "", digits = 0)
Sigla | Código | Município | X1998 | X1999 | X2000 | X2001 | X2002 | X2003 | X2004 | X2005 | X2006 | X2008 | X2009 | X2011 | X2012 | X2013 | X2014 | X2015 | X2016 | X2017 | |
1 | AC | 1200013 | Acrelândia | 6730 | 6922 | 7115 | 8237 | 8454 | 8695 | 10668 | 11451 | 11786 | 11987 | 12241 | 12778 | 13011 | 13353 | 13613 | 13869 | 13613 | 14366 |
2 | AC | 1200054 | Assis Brasil | 2918 | 2919 | 2919 | 3564 | 3611 | 3667 | 4852 | 5063 | 5153 | 5559 | 5662 | 6192 | 6308 | 6480 | 6610 | 6738 | 6610 | 6986 |
3 | AC | 1200104 | Brasiléia | 13938 | 13930 | 13922 | 17384 | 17649 | 17944 | 16940 | 17721 | 18056 | 19829 | 20238 | 21837 | 22261 | 22899 | 23378 | 23849 | 23378 | 24765 |
4 | AC | 1200138 | Bujari | 4641 | 4888 | 5135 | 6154 | 6382 | 6641 | 7654 | 8423 | 8751 | 6745 | 6772 | 8629 | 8782 | 9003 | 9173 | 9339 | 9173 | 9664 |
5 | AC | 1200179 | Capixaba | 3286 | 3460 | 3635 | 5561 | 5814 | 6096 | 6287 | 7067 | 7403 | 8897 | 9287 | 9087 | 9368 | 9836 | 10170 | 10498 | 10170 | 11136 |
Mais uma vez, pensando em retrospectiva, foi um trabalho desnecessário, mas seguimos. A base importada do ipeadata vem com os anos em colunas, isso não ajuda, pois na base HOM, os anos são uma variável só. Assim, tive que utilizar a função melt
do pacote reshape2
que faz esse trabalho de transformar colunas em uma única coluna. Infelizmente, também tive que inserir os anos em número, pois eles ficaram com o formato tipo: X1998.
POP2 <- melt(POP, variable.name = "Ano",
id.vars = c("Sigla", "Código", "Município"))
POP2$Ano <- c(rep(1998,5596),rep(1999,5596),rep(2000,5596),
rep(2001,5596),rep(2002,5596),rep(2003,5596),
rep(2004,5596),rep(2005,5596),rep(2006,5596),
rep(2008,5596),rep(2009,5596),rep(2011,5596),
rep(2012,5596),rep(2013,5596),rep(2014,5596),
rep(2015,5596),rep(2016,5596),rep(2017,5596))
stargazer(POP2[1:5,], summary = F,
type = "html", digit.separator = "", digits = 0)
Sigla | Código | Município | Ano | value | |
1 | AC | 1200013 | Acrelândia | 1998 | 6730 |
2 | AC | 1200054 | Assis Brasil | 1998 | 2918 |
3 | AC | 1200104 | Brasiléia | 1998 | 13938 |
4 | AC | 1200138 | Bujari | 1998 | 4641 |
5 | AC | 1200179 | Capixaba | 1998 | 3286 |
Outro problema é que a base do IPEA não possui dados dos anos de 2007 e 2010. Para simplificar inseri a média aritimética dos anos de 2006 e 2008 no ano de 2007. Embora reconheça que isso está longe de ser uma metodologia adequada, acredito que ela gere poucos problemas.
POPtemp <- POP2 %>%
filter( Ano == 2006) %>%
select("Sigla","Código","Município")
POPtemp$Ano <- 2007
POPtemp$value <- as.integer(
as.matrix((POP2 %>% filter(Ano == 2006) %>% select(value) +
POP2 %>% filter(Ano == 2008) %>% select(value))/2
))
POP2 <- rbind(POP2,POPtemp)
stargazer(POP2, type = "html", digit.separator = "", digits = 0)
Statistic | N | Mean | St. Dev. | Min | Pctl(25) | Pctl(75) | Max |
Código | 106324 | 3253647 | 984442 | 1100015 | 2512175.0 | 4119264.0 | 5300108 |
Ano | 106324 | 2007 | 6 | 1998 | 2002 | 2013 | 2017 |
value | 105567 | 33558 | 199535 | 697 | 5194 | 22974 | 12106920 |
Já para o ano de 2010, existe o censo de 2010. Assim, por mais que acredite que a média aritmética seja uma substituição simplificada que gere poucos prejuízos à análise, se existem dados censitários, é sempre melhor utilizá-los.
Estes dados peguei no atlas do desenvolvimento humano no Brasil. Haviam outras bases, como a do IBGE, mas meu problema era que precisava que a base viesse com os códigos dos municípios. Do contrário daria ainda mais trabalho para conseguir juntar tudo.
Como importei os dados em formato Excel, utilizei a função read.xlsx
, mas sinceramente é melhor transformar em “csv”, pois a leitura é muito lenta.
Pop2010 <- read.xlsx("Municípios/População/AtlasBrasil_Consulta.xlsx",
sheetIndex = 1,
header = T,
encoding = "UTF-8")
Pop2010 <- Pop2010 %>%
filter( Código %in% POP2$Código) %>%
mutate(Ano = 2010)
colnames(Pop2010) <- c("Código", "Município", "value","Ano")
POP2 <- select(POP2, Código, Município, Ano, value)
Pop2010 <- select(Pop2010, Código, Município, Ano, value)
POPtemp <- rbind(POP2,Pop2010)
stargazer(POPtemp[1:5,], summary = F,
type = "html", digit.separator = "", digits = 0)
Código | Município | Ano | value | |
1 | 1200013 | Acrelândia | 1998 | 6730 |
2 | 1200054 | Assis Brasil | 1998 | 2918 |
3 | 1200104 | Brasiléia | 1998 | 13938 |
4 | 1200138 | Bujari | 1998 | 4641 |
5 | 1200179 | Capixaba | 1998 | 3286 |
Agora é inserir os dados populacionais na tabela de homicídios.
HOM <- merge(HOM,
select(POPtemp, Código, Ano, value),
by.x = c("cod","período"),
by.y = c("Código", "Ano"),
all.x = T, all.y = F)
names(HOM) <- c("cod", "Ano","Município","Homicídios","População")
Para gerar a taxa de homicídios é necessário dividir os homicídios pela população e multiplicar por 100 mil. Assim a taxa representa a quantidade de homicídios por município a cada mil habitantes.
HOM <- mutate(HOM, TaxaHom = (Homicídios / População)*100000)
Estados
Outra informação que percebi que seria útil e estava faltando na base eram os estados dos municípios. Pensei em utilizar um for loop, mas ouvi dizer que o R não é adequado para tal utilização. Como já estava meio cansado, resolvi simplificar escrevendo um monte de linhas.
HOM$UF <- NA
HOM$UF[HOM$cod < 1200000] <- "RO"
HOM$UF[HOM$cod < 1300000 & HOM$cod > 1200000] <- "AC"
HOM$UF[HOM$cod < 1400000 & HOM$cod > 1300000] <- "AM"
HOM$UF[HOM$cod < 1500000 & HOM$cod > 1400000] <- "RR"
HOM$UF[HOM$cod < 1600000 & HOM$cod > 1500000] <- "PA"
HOM$UF[HOM$cod < 1700000 & HOM$cod > 1600000] <- "AP"
HOM$UF[HOM$cod < 1800000 & HOM$cod > 1700000] <- "TO"
HOM$UF[HOM$cod < 2200000 & HOM$cod > 2100000] <- "MA"
HOM$UF[HOM$cod < 2300000 & HOM$cod > 2200000] <- "PI"
HOM$UF[HOM$cod < 2400000 & HOM$cod > 2300000] <- "CE"
HOM$UF[HOM$cod < 2500000 & HOM$cod > 2400000] <- "RN"
HOM$UF[HOM$cod < 2600000 & HOM$cod > 2500000] <- "PB"
HOM$UF[HOM$cod < 2700000 & HOM$cod > 2600000] <- "PE"
HOM$UF[HOM$cod < 2800000 & HOM$cod > 2700000] <- "AL"
HOM$UF[HOM$cod < 2900000 & HOM$cod > 2800000] <- "SE"
HOM$UF[HOM$cod < 3000000 & HOM$cod > 2900000] <- "BA"
HOM$UF[HOM$cod < 3200000 & HOM$cod > 3100000] <- "MG"
HOM$UF[HOM$cod < 3300000 & HOM$cod > 3200000] <- "ES"
HOM$UF[HOM$cod < 3400000 & HOM$cod > 3300000] <- "RJ"
HOM$UF[HOM$cod < 3600000 & HOM$cod > 3400000] <- "SP"
HOM$UF[HOM$cod < 4200000 & HOM$cod > 4100000] <- "PR"
HOM$UF[HOM$cod < 4300000 & HOM$cod > 4200000] <- "SC"
HOM$UF[HOM$cod < 4400000 & HOM$cod > 4300000] <- "RS"
HOM$UF[HOM$cod < 5100000 & HOM$cod > 5000000] <- "MS"
HOM$UF[HOM$cod < 5200000 & HOM$cod > 5100000] <- "MT"
HOM$UF[HOM$cod < 5300000 & HOM$cod > 5200000] <- "GO"
HOM$UF[HOM$cod < 5400000 & HOM$cod > 5300000] <- "DF"
E o mesmo para as regiões.
HOM$Região <- NA
HOM$Região[HOM$cod <2000000] <- "NORTE"
HOM$Região[HOM$cod >2000000 & HOM$cod <3000000] <- "NORDESTE"
HOM$Região[HOM$cod >3000000 & HOM$cod <4000000] <- "SUDESTE"
HOM$Região[HOM$cod >4000000 & HOM$cod <5000000] <- "SUL"
HOM$Região[HOM$cod >5000000 & HOM$cod <6000000] <- "CENTRO-OESTE"
Em seguida gerei a base de dados com a função write.csv2
e a deixei disponível no meu github.
A leitura e alguns gráficos estão no outro post.