-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcode
More file actions
236 lines (181 loc) · 11 KB
/
code
File metadata and controls
236 lines (181 loc) · 11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
#rstudio
title: "Criação de Heatmaps para a Pesquisa"
author: "Pablo Bandeira Dalla Vecchia, *e-mail: bandeiraroque@gmail.com*"
date: "`r format(Sys.Date(), '%d %B %Y')`"
output:
html_document:
code_download: true
number_sections: true
toc: true
toc_float: true
word_document:
toc: true
pdf_document:
toc: true
abstract: "In this project I use RStudio, ggplot2 and geobr packages to map the Human Development Indices for municipalities in the Brazilian State of Ceará. It's written in portuguese and, so, I encourage non-portuguese speakers to open the html post in Google Chrome or similar with the translate option.
Later on, i'll be searching for a data source it can provide birth records (probably SINASC), infarnt mortality data (probably SIM), hospitalization data (probably SIH) and dengue data (SINAN, in portuguese). So, for now, i gonna stay with the HDI parameters just for the code."
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
Introdução
==================
Primeiro instale o R e posteriormente o RStudio, de modo que o segundo reconheça automaticamente o primeiro. Se tudo estiver perfeito, a tela inicial do RStudio mostrará corretamente a versão do R.
Mapas em R
==================
Agora a meta é gerar um mapa simples em R. Para tanto, primeiro define-se a malha municipal desejada. Para o presente caso, utilizam-se as malhas digitais (packages) do pacote `geobr`.
Aqui, deixarei o código para a instalação dos pacotes e também seu chamamento através do comando "library".
```{r echo = T, results = 'hide', warnings=FALSE}
install.packages(geobr)
install.packages(ggplot2)
install.packages(rnaturalearth)
install.packages(rnaturalearthhires)
install.packages(sf)
install.packages(rio)
install.packages(readr)
install.packages(tidyverse)
install.packages(ggspatial)
install.packages(readxl)
install.packages(httr)
install.packages(xlsx)
```
```{r echo = T, results = 'hide', warnings=FALSE}
library(geobr)
library(ggplot2)
library(rnaturalearth)
library(rnaturalearthhires)
library(sf)
library(rio)
library(readr)
library(tidyverse)
library(ggspatial)
library(readxl)
library(httr)
library(xlsx)
```
O pacote `geobr` tem as rotinas para o download dos mapas com divisões territoriais variadas. Faremos para os municípios do Ceará (CE) - de forma mais precisa, com a cidade de Iguatu - utilizando
a malha com a estrutura municipal de 2018, contendo 184 municípios. É importante o leitor ter essa estrutura em mente, pois ao longo dos anos, municípios são criados a partir de desmembramentos de outros,
não necessariamente respeitando limites de distritos ou outros atributos previamente definidos.
Este rápido exemplo faz uso das funções do pacote `geobr` e assim, precisamos saber quais os códigos para cada estado. A função `download_metadata()` permite encontrar os códigos para estado e ano e a desagregação desejada (município, estado etc).
```{r echo = T, results = 'hide'}
library(geobr)
list_geobr()
city <- read_municipality()
all_mun_ce <- read_municipality(code_muni = 23, year=2018) #
O IBGE utiliza uma codificação para cada Unidade da Federação (UF ou Estado) e, geralmente, esse código vem através de números. O código para o Estado do Ceará é 23.
Você pode consultar os demais código nesse site aqui. <https://atendimento.tecnospeed.com.br/hc/pt-br/articles/360021494734-Tabela-de-C%C3%B3digo-de-UF-do-IBGE>
Posso verificar que para CE, especificarei 23 e para o ano de 2018. Agora posso baixar os dados (shapes) para os municípios do Ceará fazendo uso da função `read_municipality(code_muni=23, year=2018)` em:
```
all_mun_ce <- read_municipality(code_muni=23, year=2018)
```
O usuário que desejar baixar todos os municípios observará alguma demora no download dos dados, devido ao número de municípios e restrito à velocidade de sua internet.
A visualização da saída do objeto `all_mun_ce` indica as variáveis armazenadas. É possível verificar que esse objeto é da classe `sf` e `data.frame`.
Um objeto `sf` contém uma coleção de recursos incluindo atributos e geometrias que contemplam os aspectos espaciais para desenhar o mapa.
```{r echo = T, results = 'hide', warnings=FALSE}
class(all_mun_ms)
[1] "sf" "data.frame"
```
O dataset pode então ser observado. O dataset contém o código do município, o nome do município, o código do estado, a sigla do estado e aspectos geográficos como latitude, longitude dos vários segmentos que permitirão construir o mapa.

Agora vou construir uma variável para ser plotada no mapa. Preciso ter os meus dados em uma planilha em que uma das colunas será o código do município da mesma forma que consta em `code_muni` no objeto `all_mun_ce`.
Recomendo fazer a associação entre os dados por meio do código, menos sujeito a erros de digitação que para os nomes dos municípios. Para este exemplo, baixei os dados de <http://atlasbrasil.org.br/2013/pt/download/>, ou mais precisamente em <http://atlasbrasil.org.br/2013/data/rawData/atlas2013_dadosbrutos_pt.xlsx>, o site oficial do PNUD para o Índice de Desenvolvimento Humano Municipal do Brasil, para 2013, que nesse caso se refere aos dados do censo demográfico 2010.
No caso, o arquivo Excel veio com dados de todo o Brasil e para os anos 1991, 2000 e 2010, mas fiz uma extração dos dados para apenas os municípios do Ceará e 2010. Observar que nesse caso tenho uma estrutura municipal de 184 municípios.
```{r, eval=FALSE}
Executei uma vez e gerei dput para executar mais rapidamente conforme próximo chunk
url <- "https://github.com/amrofi/atlasg/raw/master/dadosbrutos/atlas2013_dadosbrutos_pt.xlsx"
destfile <- "atlas2013_dadosbrutos_pt.xlsx"
#options(timeout= 4000000) # Pode demorar, mas acredita em mim, vai ser tranquilo! :)
curl::curl_download(url, destfile)
atlas2013_dadosbrutos_pt <- read_excel(destfile,
sheet = "MUN 91-00-10")
dados_ce <- subset(atlas2013_dadosbrutos_pt, UF == '23' & ANO == '2010',
select=c(Codmun7,IDHM,IDHM_E,IDHM_L,IDHM_R))
View(dados_ce)
```
Segue o chunk para carregar dados de `dados_ce` sem precisar acessar o arquivo mestre do chunk anterior. Gera os mesmos resultados acima, transformados a partir do `dput()` de `dados_ce`. Esta alternativa acelera a execução do script.
# Separar as tabelas com base no identificador
```{r}
dados_ce <-structure(list(Codmun7 = c(), IDHM = c(0.67, 0.711, 0.673,
0.663, 0.67, 0.697, 0.643, 0.697, 0.688, 0.633, 0.681, 0.71,
0.684, 0.698, 0.666, 0.67, 0.701, 0.692, 0.703, 0.784, 0.647,
0.727, 0.754, 0.671, 0.589, 0.7, 0.706, 0.703, 0.694, 0.639,
0.699, 0.747, 0.684, 0.714, 0.66, 0.721, 0.675, 0.662, 0.681,
0.654, 0.62, 0.72, 0.526, 0.664, 0.712, 0.708, 0.623, 0.704,
0.672, 0.736, 0.632, 0.686, 0.7, 0.639, 0.694, 0.721, 0.649,
0.721, 0.588, 0.671, 0.701, 0.666, 0.664, 0.715, 0.709, 0.673,
0.651, 0.642, 0.729, 0.614, 0.682, 0.686, 0.681, 0.593, 0.651,
0.658, 0.744, 0.711), IDHM_E = c(0.518, 0.572, 0.546, 0.557,
0.538, 0.582, 0.526, 0.588, 0.562, 0.507, 0.537, 0.606, 0.559,
0.585, 0.573, 0.508, 0.57, 0.592, 0.596, 0.724, 0.522, 0.627,
0.665, 0.531, 0.417, 0.586, 0.606, 0.579, 0.595, 0.528, 0.597,
0.657, 0.577, 0.621, 0.511, 0.648, 0.549, 0.53, 0.531, 0.523,
0.479, 0.615, 0.337, 0.53, 0.595, 0.579, 0.485, 0.618, 0.545,
0.613, 0.507, 0.565, 0.597, 0.483, 0.554, 0.616, 0.523, 0.627,
0.444, 0.562, 0.598, 0.526, 0.519, 0.59, 0.585, 0.521, 0.491,
0.505, 0.608, 0.45, 0.576, 0.561, 0.557, 0.434, 0.545, 0.521,
0.645, 0.626), IDHM_L = c(0.823, 0.858, 0.818, 0.789, 0.826,
0.839, 0.799, 0.804, 0.84, 0.798, 0.848, 0.847, 0.814, 0.83,
0.776, 0.831, 0.837, 0.828, 0.817, 0.844, 0.826, 0.811, 0.85,
0.83, 0.806, 0.834, 0.811, 0.836, 0.81, 0.773, 0.809, 0.843,
0.824, 0.815, 0.83, 0.822, 0.826, 0.817, 0.846, 0.809, 0.772,
0.85, 0.791, 0.827, 0.845, 0.857, 0.77, 0.822, 0.822, 0.873,
0.782, 0.808, 0.803, 0.822, 0.809, 0.85, 0.798, 0.823, 0.811,
0.801, 0.812, 0.83, 0.83, 0.861, 0.869, 0.852, 0.83, 0.8, 0.85,
0.778, 0.825, 0.829, 0.803, 0.782, 0.769, 0.839, 0.849, 0.835
), IDHM_R = c(0.705, 0.733, 0.683, 0.663, 0.676, 0.692, 0.633,
0.717, 0.69, 0.628, 0.694, 0.698, 0.702, 0.699, 0.665, 0.714,
0.721, 0.676, 0.715, 0.79, 0.628, 0.756, 0.758, 0.684, 0.607,
0.701, 0.717, 0.719, 0.693, 0.64, 0.706, 0.753, 0.674, 0.719,
0.677, 0.705, 0.677, 0.671, 0.702, 0.66, 0.645, 0.715, 0.547,
0.668, 0.718, 0.716, 0.646, 0.687, 0.676, 0.744, 0.638, 0.707,
0.715, 0.658, 0.746, 0.716, 0.656, 0.727, 0.566, 0.672, 0.708,
0.677, 0.681, 0.72, 0.702, 0.686, 0.676, 0.655, 0.751, 0.66,
0.668, 0.694, 0.706, 0.615, 0.657, 0.651, 0.752, 0.689)), row.names = c(NA,
-78L), class = c("tbl_df", "tbl", "data.frame"))
```
Segue o chunk para opção de download manual e armazenamento em seu diretório.
```{r, eval=FALSE}
# trazendo os dados do Brasil todo apenas para municipios
library(readxl)
atlas2013_dadosbrutos_pt <- read_excel("atlas2013_dadosbrutos_pt.xlsx",
sheet = "MUN 91-00-10") # O comando "sheet" serve para selecionar, dentro do arquivo em Excel, qual das "pastas" ou "planilhas" eu vou utilizar. Nesse caso, iremos usar a planilha chamada de "MUN 91-00-10"
# Reduzir linhas para 2010 e MS
# Usando a funcao subset para pegar as colunas de IDH até a última ()
dados_ce <- subset(atlas2013_dadosbrutos_pt, UF == '23' & ANO == '2010',
select=c(Codmun7,IDHM,IDHM_E,IDHM_L,IDHM_R))
```
```{r echo = T, results = 'hide'}
all_mun_ce <- read_municipality(code_muni=23, year=2010)
```
Juntarei os datasets pela condição de que o `code_muni` do objeto `all_mun_ms` é igual ao `Codmun7` do objeto `dados_ce`.
```{r}
dataset_final = left_join(all_mun_ce, dados_ce, by=c("code_muni"="Codmun7"))
max(dataset_final$IDHM) # 0.784
min(dataset_final$IDHM) # 0.526
ggplot() +
geom_sf(data=dataset_final, aes(fill=IDHM), color= NA, size=.15)+
labs(title="IDHM 2013 (ano base 2010) dos Municipíos de MS",
caption='Fonte: Elaboração própria', size=8)+
scale_fill_distiller(palette = "Greens", limits=c(0.5, 0.8),
name="Code_muni")+
theme_minimal()
```
Sendo um mapa feito em `ggplot2` pelos comandos `ggplot() +
geom_sf(data=dataset_final, aes(fill=IDHM), color= NA, size=.15)`, o padrão é um mapa na escala azul. Ou seja, fazendo agora um mapa para o IDHM_E (IDHM Educação), recomendo o usuário fazer o passo a passo de modo a ver exatamente o que o código realiza:
```{r}
#dataset_final = left_join(all_mun_ms, dados_ce, by=c("code_muni"="Codmun7"))
max(dataset_final$IDHM_E) # 0.724
min(dataset_final$IDHM_E) # 0.337
```
```{r}
ggplot() +
geom_sf(data=dataset_final, aes(fill=IDHM_E), color= NA, size=.15)
```
Veja que o mapa anterior saiu em azul, sem rótulos. Observe que nesse caso e no próximo, não fiz nenhuma restrição à legenda.
O próximo sai com rótulos do título e nota ao final do mapa.
```{r}
ggplot() +
geom_sf(data=dataset_final, aes(fill=IDHM_E), color= NA, size=.15)+
labs(title="IDHM Educação 2013 (ano base 2010) dos Municipíos do Ceará",
caption='Fonte: Elaboração própria', size=8)
```