’ do código HTML
alltables <- html %>% html_table(fill = TRUE)
print(alltables)
## [[1]]
## # A tibble: 231 × 3
## `Posição\nno Estado` Municípios `Dados\nde 2010`
## <chr> <chr> <chr>
## 1 "Posição\nno Estado" Municípios IDH municipal
## 2 "IDH-M muito alto" IDH-M muito alto IDH-M muito alto
## 3 "nenhum município" nenhum município nenhum município
## 4 "IDH-M alto" IDH-M alto IDH-M alto
## 5 "1" João Pessoa 0,763
## 6 "2" Cabedelo 0,748
## 7 "3" Campina Grande 0,720
## 8 "4" Várzea 0,707
## 9 "5" Patos 0,701
## 10 "IDH-M médio" IDH-M médio IDH-M médio
## # … with 221 more rows
##
## [[2]]
## # A tibble: 3 × 6
## IDH `Muito Alto` Alto Médio Baixo `Muito Baixo`
## <int> <int> <int> <int> <int> <int>
## 1 1991 0 0 0 1 222
## 2 2000 0 0 2 8 213
## 3 2010 0 5 66 152 0
##
## [[3]]
## # A tibble: 10 × 14
## `vdeClassificaçã…` `vdeClassifica…` `` `` `` `` `` `` ``
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 "Critérios geográ… "Altitude\nÁrea… <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 2 "Critérios econôm… "Domicílios\nEm… <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 3 "Critérios divers… "Denominação an… <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 4 "Listas de municí… "Listas de muni… List… List… Regi… "Acr… Regi… "Ala… Regi…
## 5 "Listas de municí… "Listas de muni… <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 6 "Região Norte" "Acre\nAmapá\nA… <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 7 "Região Nordeste" "Alagoas\nBahia… <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 8 "Região Centro-Oe… "Distrito Feder… <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 9 "Região Sudeste" "Espírito Santo… <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## 10 "Região Sul" "Paraná\nRio Gr… <NA> <NA> <NA> <NA> <NA> <NA> <NA>
## # … with 5 more variables: `` <chr>, `` <chr>, `` <chr>, `` <chr>, `` <chr>
##
## [[4]]
## # A tibble: 6 × 2
## X1 X2
## <chr> <chr>
## 1 Listas de municípios do Brasil por IDH por estado por região geográfica "List…
## 2 Região Norte "Acre…
## 3 Região Nordeste "Alag…
## 4 Região Centro-Oeste "Dist…
## 5 Região Sudeste "Espí…
## 6 Região Sul "Para…
*PS: Perceba que diferente da tabela de taxa de homicídio, na tabela
do IDB as 4 primeiras linhas são apenas o título das variáveis, logo,
temos que remove-las:
table_idh <- alltables[[1]]
table_idh <- table_idh[-c(1, 2, 3, 4), ]
table_idh$Municípios <- stri_trans_totitle(table_idh$Municípios) # Capitalize
print(table_idh)
## # A tibble: 227 × 3
## `Posição\nno Estado` Municípios `Dados\nde 2010`
## <chr> <chr> <chr>
## 1 1 João Pessoa 0,763
## 2 2 Cabedelo 0,748
## 3 3 Campina Grande 0,720
## 4 4 Várzea 0,707
## 5 5 Patos 0,701
## 6 IDH-M médio Idh-M Médio IDH-M médio
## 7 6 Santa Luzia 0,682
## 8 7 Cajazeiras 0,679
## 9 8 Guarabira 0,673
## 10 9 Sousa 0,668
## # … with 217 more rows
Appending IDH da base de dados ‘table_idh’ na ‘all_muni’ e colocando
NA nas cidades aonde não foram fornecidos o índice (há a possibilidade
das cidades esterem com nomes diferentes nas bases de dados)
i <- 1
while (i <= length(all_muni$name_muni)) {
if (all_muni$name_muni[i] %in% table_idh$Municípios == TRUE){
all_muni$IDH[i] <- table_idh$'Dados\nde 2010'[match(all_muni$name_muni[i], table_idh$Municípios)]
} else {
all_muni$IDH[i] <- NA
}
i = i+1
}
Perceba que as novas variáveis (IDH/Taxa) colocadas na base de dados
são do tipo caracteres:
## Classes 'sf' and 'data.frame': 223 obs. of 7 variables:
## $ code_muni : num 2500106 2500205 2500304 2500403 2500502 ...
## $ name_muni : chr "Água Branca" "Aguiar" "Alagoa Grande" "Alagoa Nova" ...
## $ code_state : chr "25" "25" "25" "25" ...
## $ abbrev_state: chr "PB" "PB" "PB" "PB" ...
## $ geom :sfc_MULTIPOLYGON of length 223; first list element: List of 1
## ..$ :List of 1
## .. ..$ : num [1:57, 1:2] -37.7 -37.7 -37.7 -37.7 -37.7 ...
## ..- attr(*, "class")= chr [1:3] "XY" "MULTIPOLYGON" "sfg"
## $ Taxa : chr "11.8" "14.1" "7.1" "3.5" ...
## $ IDH : chr "0,572" "0,597" "0,582" "0,576" ...
## - attr(*, "sf_column")= chr "geom"
## - attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA NA NA NA NA NA
## ..- attr(*, "names")= chr [1:6] "code_muni" "name_muni" "code_state" "abbrev_state" ...
Para resolver esse problema, usei a seguinte solução:
all_muni$IDH <- as.numeric(gsub(",", ".", all_muni$IDH))
## Warning: NAs introduzidos por coerção
all_muni$Taxa <- as.double(all_muni$Taxa) # Para a variável taxa foi mais simples pq ela já apesentada como separador decimal o ponto '.' diferente do IDH
## Warning: NAs introduzidos por coerção
## Classes 'sf' and 'data.frame': 223 obs. of 7 variables:
## $ code_muni : num 2500106 2500205 2500304 2500403 2500502 ...
## $ name_muni : chr "Água Branca" "Aguiar" "Alagoa Grande" "Alagoa Nova" ...
## $ code_state : chr "25" "25" "25" "25" ...
## $ abbrev_state: chr "PB" "PB" "PB" "PB" ...
## $ geom :sfc_MULTIPOLYGON of length 223; first list element: List of 1
## ..$ :List of 1
## .. ..$ : num [1:57, 1:2] -37.7 -37.7 -37.7 -37.7 -37.7 ...
## ..- attr(*, "class")= chr [1:3] "XY" "MULTIPOLYGON" "sfg"
## $ Taxa : num 11.8 14.1 7.1 3.5 2.6 14.4 0 25.7 1.9 9.5 ...
## $ IDH : num 0.572 0.597 0.582 0.576 0.595 0.578 0.548 0.582 0.608 0.606 ...
## - attr(*, "sf_column")= chr "geom"
## - attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA NA NA NA NA NA
## ..- attr(*, "names")= chr [1:6] "code_muni" "name_muni" "code_state" "abbrev_state" ...
Foi necessário achar os valores mínimos e máximos do IDH para
construir o gráfico de forma que o gradiente da cor fosse mais
visível:
# Dando replace nos NA's para que eu possa ver o valor máximo e mínimo dos meus dados
all_muni$IDH[is.na(all_muni$IDH)] <- 0
min(all_muni$IDH)
## [1] 0
## [1] 0.763
Parte 3: Plotando o gráfico
Gráfico não interativo
graph_teste1 <- ggplot() +
geom_sf(data=all_muni, aes(fill=IDH), color= 'black', size=.15) +
labs(title = "IDH - Municípios da Paraíba") +
scale_fill_distiller(palette = "Reds", direction = 1, name="IDH", na.value='red', guide = "coloursteps", limits = c(0.501,0.763)) +
theme(
plot.title = element_text(hjust=0.5,family="sara", colour = 'black', size=25)
)
graph_teste1

Gráfico interativo (tentativa)
Utilizando plotly::ggplotly
PS:
Perceba que o gráfico interativo não está funcionando do jeito que se
esperava, pois ele está sendo interativo quando o hover do mouse está
nas divisões das cidades, e no caso deveria ser quando o mouse estivesse
em cima da região da cidade.