O objetivo desse exercício é aprender a importar dados e fazer manipulações básicas, plotar gráficos
# A função para definir o diretório é:
setwd("C:/Métodos Regional/Material Aula 1")
# Troque "\" por "/" no endereço da pasta
# Importante: O R faz distinção entre letras maiúsculas e minúsculas
Vamos usar os seguintes pacotes:
tidyverse - Conjunto de outros pacotes, facilitando a manipulação e visualização de dados. Dentre os pacotes do Tidyverse está o “ggplot2” que é a plataforma gráfica mais usada e uma das mais “poderosas” do ambiente R.
ggmap - Funções complementares ao “ggplot2” para visualização de dados espaciais.
sf - Permite a manipulação de dados espaciais.
readxl - Permite a importação e exportação de dados em “.xlsx” ou “.xls”
ggpubr - Permite combinar e exportar objetos gráficos em formato de imagem
ggthemes - Conjunto de temas (estéticos) pré-programados para gráficos do ggplot2
geobr - Download de dados espaciais oficiais do Brasil.
# A função para instalar novos pacotes é "install.packages()"
#install.packages("tidyverse")
#install.packages("ggmap")
#install.packages("sf")
#install.packages("readxl")
#install.packages("geobr")
#install.packages("ggpubr")
#install.packages("viridis")
#install.packages("ggthemes")
Após instalar os pacotes é necessário “carregar” os pacotes para serem usados. Só é preciso instalar os pacotes uma única vez.
O R é uma linguagem de programação orientada a objetos, isso significa que tudo que importarmos para o ambiente será armazenado como um “objeto” que pode ter 6 formas: vetores, matrizes, listas, data frame (2 dimensões), arranjos (> 2 dimensões), fatores.
Os dados(atributos) devem ter uma coluna que possa servir como referência para identificar os espaços.
Dados: Pessoas de 14 anos ou mais de idade (Mil pessoas) - PNAD Contínua
Fonte: tabela 4092 Sidra https://sidra.ibge.gov.br/tabela/4092
# A função para importar o arquivo em excel (xlsx ou xls) é:
Dados <- read_excel("Dados_Aula1.xlsx",
col_types = c("text", "text", "date", "numeric", "numeric", "numeric", "numeric"))
# Como já indicamos o diretório, bastou indicar o nome do arquivo e a extensão.
View(Dados) # Visualiza o objeto. No ambiente basta clicar sobre o objeto para visualiza-lo
head(Dados) # Visualiza as primeiras observações do objeto
## # A tibble: 6 × 7
## Estado Sigla Trimestre_R Total FT FTO FTD
## <chr> <chr> <dttm> <dbl> <dbl> <dbl> <dbl>
## 1 Acre AC 2012-01-01 00:00:00 534 313 284 29
## 2 Acre AC 2012-04-01 00:00:00 537 329 299 30
## 3 Acre AC 2012-07-01 00:00:00 539 325 299 25
## 4 Acre AC 2012-10-01 00:00:00 542 332 305 27
## 5 Acre AC 2013-01-01 00:00:00 543 330 294 36
## 6 Acre AC 2013-04-01 00:00:00 550 328 296 31
#glimpse(Dados) #Outra forma de visualizar os objetos
Legenda
Consultar: https://www.tidyverse.org/
É um conjunto de pacotes para manipulação e visualização de dados
# Criando uma nova variável usando a função mutate
Dados <- Dados |> mutate(Tx_Des = (FTD/FT)*100)
# Criando um novo dataframe filtrando o original para um Estado
Dados_SP <- Dados |> filter(Estado == "São Paulo")
A função summaryprovê um resumo geral dos dados.
summary(Dados)
## Estado Sigla Trimestre_R
## Length:1350 Length:1350 Min. :2012-01-01 00:00:00
## Class :character Class :character 1st Qu.:2015-01-01 00:00:00
## Mode :character Mode :character Median :2018-02-15 00:00:00
## Mean :2018-02-14 18:14:24
## 3rd Qu.:2021-04-01 00:00:00
## Max. :2024-04-01 00:00:00
## Total FT FTO FTD
## Min. : 296 Min. : 185 Min. : 169 Min. : 11.0
## 1st Qu.: 2140 1st Qu.: 1266 1st Qu.: 1127 1st Qu.: 107.2
## Median : 3092 Median : 1854 Median : 1693 Median : 203.0
## Mean : 6137 Mean : 3823 Mean : 3433 Mean : 389.3
## 3rd Qu.: 7466 3rd Qu.: 4130 3rd Qu.: 3706 3rd Qu.: 419.8
## Max. :39480 Max. :26320 Max. :24580 Max. :3636.0
## Tx_Des
## Min. : 2.345
## 1st Qu.: 7.441
## Median : 9.776
## Mean :10.272
## 3rd Qu.:12.966
## Max. :21.753
Usando a função summarise_at conseguimos selecionar as
variáveis que pretendemos analisar e quais as estatísticas que serão
calculadas.
Além disso, usando a função group_by agrupamos os dados
em função do “Estado”, ou seja, vamos extrair a média das
variáveis(vars) selecionadas por Estado.
Dados |> group_by(Estado) |> summarise_at(vars(FT,FTO,FTD,Tx_Des), list(Média = mean))
## # A tibble: 27 × 5
## Estado FT_Média FTO_Média FTD_Média Tx_Des_Média
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 Acre 345. 306. 39.6 11.4
## 2 Alagoas 1260. 1091. 169. 13.5
## 3 Amapá 371. 317. 53.6 14.4
## 4 Amazonas 1784. 1568. 215. 12.0
## 5 Bahia 6967. 5922. 1044. 15.0
## 6 Ceará 3900. 3498. 402. 10.3
## 7 Distrito Federal 1614. 1428. 186. 11.5
## 8 Espírito Santo 2057. 1864. 194. 9.39
## 9 Goiás 3630. 3325. 306. 8.39
## 10 Maranhão 2725. 2418. 307. 11.4
## # ℹ 17 more rows
Suponha que o pesquisador agora queira a média por macrorregião. Para isso, vamos precisar adicionar mais algumas colunas na base de dados.
#Criei um objeto dataframe com três variáveis
x <- data.frame(
Sigla = c(
"AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES", "GO", "MA",
"MT", "MS", "MG", "PA", "PB", "PR", "PE", "PI", "RJ", "RN",
"RS", "RO", "RR", "SC", "SP", "SE", "TO"),
Código = c(
"12", "27", "16", "13", "29", "23", "53", "32", "52", "21",
"51", "50", "31", "15", "25", "41", "26", "22", "33", "24",
"43", "11", "14", "42", "35", "28", "17"),
Região = c(
"Norte", "Nordeste", "Norte", "Norte", "Nordeste", "Nordeste", "Centro-Oeste",
"Sudeste", "Centro-Oeste", "Nordeste", "Centro-Oeste","Centro-Oeste", "Sudeste",
"Norte", "Nordeste","Sul", "Nordeste", "Nordeste", "Sudeste", "Nordeste","Sul",
"Norte", "Norte", "Sul", "Sudeste", "Nordeste", "Norte" ))
# Unindo dataframes
Dados <- Dados |> left_join(x, by="Sigla")
rm(x) # Exclui o objeto do ambiente
Usando os mesmos princípios podemos obter:
# Média e desvio padrão da taxa de desocupação para todo o período por região
a <- Dados |> group_by(Região) |> summarise_at(vars(Tx_Des), list(Média = mean, Desv.P = sd))
# Média e desvio padrão da taxa de desocupação nos estados da região Sudeste
b <- Dados |> filter(Região=="Sudeste") |> group_by(Estado) |>
summarise_at(vars(Tx_Des), list(Média = mean, Desv.P = sd))
a; b
## # A tibble: 5 × 3
## Região Média Desv.P
## <chr> <dbl> <dbl>
## 1 Centro-Oeste 8.28 3.10
## 2 Nordeste 12.4 3.45
## 3 Norte 10.5 3.70
## 4 Sudeste 10.2 3.30
## 5 Sul 6.20 2.03
## # A tibble: 4 × 3
## Estado Média Desv.P
## <chr> <dbl> <dbl>
## 1 Espírito Santo 9.39 2.87
## 2 Minas Gerais 9.12 2.59
## 3 Rio de Janeiro 11.9 4.00
## 4 São Paulo 10.5 2.91
# Média e Desvio Padrão para o período antes e depois de 2014.3 (Início da crise)
c <- Dados |> filter(Trimestre_R < as.Date("2014-07-01")) |> group_by(Região) |>
summarise_at(vars(Tx_Des), list(Média = mean, Desv.P = sd))
d <- Dados |> filter(Trimestre_R > as.Date("2014-07-01")) |> group_by(Região) |>
summarise_at(vars(Tx_Des), list(Média = mean, Desv.P = sd))
c;d
## # A tibble: 5 × 3
## Região Média Desv.P
## <chr> <dbl> <dbl>
## 1 Centro-Oeste 6.12 1.86
## 2 Nordeste 9.40 1.70
## 3 Norte 8.35 2.21
## 4 Sudeste 7.07 0.586
## 5 Sul 4.27 0.896
## # A tibble: 5 × 3
## Região Média Desv.P
## <chr> <dbl> <dbl>
## 1 Centro-Oeste 8.90 3.09
## 2 Nordeste 13.2 3.33
## 3 Norte 11.1 3.79
## 4 Sudeste 11.1 3.19
## 5 Sul 6.75 1.92
rm(a,b,c,d)
O pacote ggplot2 é o pacote de visualização de dados
mais usado do R, também é o mais versátil.
Ver: GGPLOT galeria
# Gráfico de colunas
Dados |> filter(Região=="Nordeste", Trimestre_R==as.Date("2024-04-01"))|> # Usando a função filter do tidyverse
ggplot()+ # Carregando biblioteca gráfica
geom_col(aes(x= Sigla, y=Tx_Des)) # Escolhendo o tipo de gráfico (geom_***) e a estética (aes)
# Histograma
Dados %>% ggplot() + geom_histogram(aes(x=Tx_Des))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
É possível construir gráficos mais elaborados e mudar a sua estética somando mais funções e/ou especificando argumentos dentro das funções.
Usando o pacote ggthemes é possível carregar mais alguns
temas gráficos além dos já pré-programados.
Ver Pacotes GGTHEME
#Função densidade de probabilidade - Estimativa (Alternativa ao uso do histograma)
Dados |> ggplot() + geom_density(aes(x=Tx_Des), colour="red")+ theme_minimal()
É possível criar objetos gráficos e adicionar camadas ao objeto com novas funções.
# Boxplot
c <- Dados |> ggplot()+ geom_boxplot(aes(x=Região, y=Tx_Des))
c
c + theme_minimal()
c + theme_minimal() + labs(title = "Desocupação entre as regiões",
subtitle = "Distribuição trimestral 2012.1 a 2024.2",
y="Taxa de Desocupação",
x= "Regiões")
rm(c)
Podemos combinar vários tipos de gráficos em um mesmo “plot”. No exemplo abaixo, estou criando o gráfico “d” a partir de uma combinação de gráfico de linhas e gráfico de pontos.
# Gráfico de Linhas e Pontos
d <- Dados |> filter(Sigla %in% c("BA","SC","SP")) |>
ggplot(aes(x=Trimestre_R, y=Tx_Des, color=Estado))+ #Observe que o argumento "aes" é declarado dentro da função "ggplot"
geom_line() + #Gráfico de linhas
geom_point()+ #Gráfico de pontos
theme_minimal() + #Tema
theme(legend.position = "bottom")+ # Alterando o tema para mudar a posição das legendas
scale_color_viridis_d(option = "viridis")+ #Usando uma escala de cores do pacote Viridis
labs(title = "Taxa de desocupação em estados selecionados",
subtitle = "2012.1 a 2024.2",
x="", y="Taxa de desocupação")
d
Agora fazendo o mesmo para outra variável,taxa de participação
#Criando variável taxa de participação
Dados <- Dados |> mutate(Tx_Par = (FT/Total)*100)
e <- Dados |> filter(Sigla %in% c("BA","SC","SP")) |>
ggplot(aes(x=Trimestre_R,y=Tx_Par,color=Estado))+
geom_line() +
geom_point()+
theme_minimal() +
theme(legend.position = "bottom")+
scale_color_viridis_d(option = "viridis")+
labs(title = "Taxa de participação em estados selecionados",
subtitle = "2012.1 a 2024.2",
x="", y="Taxa de participação")
e
Avaliando se taxa de participação e taxa de desocupação estão correlacionadas
#Curiosidade: paradoxo de Simpson
f <- Dados |> #filter(Sigla %in% c("BA","SC","SP")) |>
ggplot(aes(x=Tx_Des,y=Tx_Par))+
geom_point(color="grey")+
geom_smooth(formula = 'y ~ x',method = "lm",se=F, color="black")+ #Adicionando uma reta de regressão linear
theme_minimal() +
theme(legend.position = "bottom")+
labs(title = "Taxa de participação e desocupação",
subtitle = "PNAD contínua trimestral: 2012.1 a 2024.2",
x="Taxa de desocupação", y="Taxa de participação")
f1 <- Dados |>
ggplot(aes(x=Tx_Des,y=Tx_Par, color=Região))+
geom_point()+
geom_smooth(formula = 'y ~ x',method = "lm",se=F)+ #Adicionando uma reta de regressão linear
theme_minimal() +
scale_color_viridis_d()+
theme(legend.position = "bottom")+
labs(title = "Taxa de participação e desocupação",
subtitle = "PNAD contínua trimestral: 2012.1 a 2024.2",
x="Taxa de desocupação", y="Taxa de participação")
g <- Dados |> filter(Sigla %in% c("BA","SC","SP")) |>
ggplot(aes(x=Tx_Des,y=Tx_Par, color=Estado))+
geom_point()+
geom_smooth(formula = 'y ~ x',method = "lm",se=F)+ #Adicionando uma reta de regressão linear
theme_minimal() +
theme(legend.position = "bottom")+
scale_color_viridis_d(option = "viridis")+
labs(title = "Taxa de participação e desocupação em estados selecionados",
subtitle = "2012.1 a 2024.2",
x="Taxa de desocupação", y="Taxa de participação")
f;f1; g
cor(Dados$Tx_Des,Dados$Tx_Par) #Correlação
## [1] -0.4520161
Vamos usar o pacote ggpubr para criar uma combinação dos
gráficos f e g, armazenando o resultado em um
objeto z.
O pacote também conta com a função ggsave para exportar
o arranjo de gráficos.
z <- ggarrange(f,g, nrow = 2)
z
ggsave("Gráficos de Exemplo.pdf", last_plot(), height = 10, width = 10, dpi = 1000 ) #pdf, png, jpeg...
Finalmente, vamos nos dedicar a importar os insumos necessários para criar um mapa coroplético. O primeiro deles é a geometria
“Um shapefile é um formato de armazenamento de dados de vetor desenvolvido pela empresa Esri para armazenar a posição, a forma e os atributos de feições geográficas.”
Na verdade, um shapefile é um conjunto de arquivos relacionados.
O IBGE possui uma biblioteca de malhas territoriais com shapes para diversos recortes.
Para nossos propósitos, vamos utilizar o pacote
geobrdesenvolvido para carregar shapes diretamente no
ambiente R.
Uf <- read_state(showProgress = F, year = 2010) #Há vários argumentos possíveis, mas vamos utilizar o padrão
## Using year/date 2010
plot(st_geometry(Uf)) #Geometria vazia
Assim como fizemos anteriormente, podemos unir nosso dataframe com o objeto “Uf” a partir de uma coluna comum como referência.
Primeiro precisamos selecionar os dados de que semestre queremos plotar.
Dados_2014.2 <- Dados |> filter(Trimestre_R == as.Date("2014-04-01"))
Dados_2024.2 <- Dados |> filter(Trimestre_R == as.Date("2024-04-01"))
#criando novos objetos para preservar o original Uf
Uf2014.2 <- left_join(Uf, Dados_2014.2, by=c("abbrev_state"="Sigla"))
Uf2024.2 <- left_join(Uf, Dados_2024.2, by=c("abbrev_state"="Sigla"))
rm(Dados_2014.2,Dados_2024.2)
A partir da biblioteca do “ggplot2” podemos criar um polígono a partir da função “geom_sf”, no argumento “aes” precisamos indicar qual variável deve preencher (“fill”) o nosso mapa.
Uf2024.2 |> ggplot()+geom_sf(aes(fill=Tx_Des))+ theme_minimal()
#A partir do mapa básico podemos adicionar novas funções e argumentos para modificar a estética do nosso mapa
Uf2014.2 |> ggplot()+geom_sf(aes(fill=Tx_Des), color="black")+scale_fill_gradient(low = "white", high = "red")+ theme_minimal() + labs(title = "Taxa de desemprego", subtitle = "Segundo semestre de 2014")
Uf2024.2 |> ggplot()+geom_sf(aes(fill=Tx_Des), color="black")+scale_fill_gradient(low = "white", high = "red")+ theme_minimal() + labs(title = "Taxa de desemprego", subtitle = "Segundo semestre de 2024")
Uf2024.2 |> ggplot()+
geom_sf(aes(fill=Tx_Par,), color="white")+
geom_sf_label(aes(label = abbrev_state), size=1.8)+ #Legendas
scale_fill_viridis_c(guide = guide_colourbar(direction = "horizontal", title.position = "top"), option = "cividis")+
theme_minimal()+
theme(legend.position ="inside",legend.position.inside = c(0.825, 0.1))+
labs(title = "Taxa de participação", subtitle = "Segundo semestre de 2024", fill="Taxa de participação", x="", y="")
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data