O que você vai aprender

Visão geral do curso

  • Grande demanda por profissionais em estatística aplicada
  • Mineração de dados e as saídas gráficas: passo fundamental em estatística aplicada
  • Objetivo: apresentar duas importantes ferramentas disponíveis no software R: os pacotes tidyverse e ggplot2

Pré-requisitos

  • É desejável que o aluno tenha algum conhecimento de programação em linguagem R
  • É também desejável que o aluno tenha conhecimentos básicos de Estatística e Probabilidades

Introdução

Pacotes necessários

  • Instalação e carregamento dos pacotes no R

Código:

 #nomes dos pacotes
 packages <- c("dplyr","tidyverse","lattice",  "rgdal", "rgeos",
 "maptools", "plyr", "sf", "covid19br", "RColorBrewer")

 # instala os pacotes que não estão instalados
 installed_packages <- packages %in% rownames(installed.packages())
 if (any(installed_packages == FALSE)) {
   install.packages(packages[!installed_packages])
 }

# carrega os pacotes
invisible(lapply(packages, library, character.only = TRUE))

Base de dados

  • Base de dados disponível no R: mtcars
  • Coletados da revista “Motor Trend US (1974)”
  • 32 modelos de automóveis: consumo de combustível e outros 10 aspectos de design e desempenho
  • Preparando a base de dados
mtcars <- within(mtcars, {
   vs <- factor(vs, labels = c("V", "S"))
   am <- factor(am, labels = c("automatica", "manual"))
   cyl  <- ordered(cyl)
   gear <- ordered(gear)
   carb <- ordered(carb)})
summary(mtcars)
##       mpg        cyl         disp             hp             drat      
##  Min.   :10.40   4:11   Min.   : 71.1   Min.   : 52.0   Min.   :2.760  
##  1st Qu.:15.43   6: 7   1st Qu.:120.8   1st Qu.: 96.5   1st Qu.:3.080  
##  Median :19.20   8:14   Median :196.3   Median :123.0   Median :3.695  
##  Mean   :20.09          Mean   :230.7   Mean   :146.7   Mean   :3.597  
##  3rd Qu.:22.80          3rd Qu.:326.0   3rd Qu.:180.0   3rd Qu.:3.920  
##  Max.   :33.90          Max.   :472.0   Max.   :335.0   Max.   :4.930  
##        wt             qsec       vs              am     gear   carb  
##  Min.   :1.513   Min.   :14.50   V:18   automatica:19   3:15   1: 7  
##  1st Qu.:2.581   1st Qu.:16.89   S:14   manual    :13   4:12   2:10  
##  Median :3.325   Median :17.71                          5: 5   3: 3  
##  Mean   :3.217   Mean   :17.85                                 4:10  
##  3rd Qu.:3.610   3rd Qu.:18.90                                 6: 1  
##  Max.   :5.424   Max.   :22.90                                 8: 1

Porque o pacote ggplot2

  • Vamos construir algumas saídas gráficas
  • Utilzar as funções do pacote graphics: base do R
  • Pacote lattice

Histograma: base v.s. lattice

hist(mtcars$mpg,
     col = "lightblue",
     main = "Função hist (base)",
     xlab = "Milhas por galão (mpg)",
     ylab = "Frequência absoluta")

library(lattice)
histogram(~mpg,data=mtcars, 
          type ="count", 
          xlab ="Milhas por galão (mpg)",
       ylab = "Frequência absoluta", 
       main ="Função histogram (lattice)",
       col = "lightblue", breaks = 5)

Gráfico de barras: base v.s. lattice

tab <- table(mtcars$cyl)
barplot(tab, 
        col = "lightblue",
        main = "Função barplot (base)", 
  xlab = "Número de cilindros por motor (cyl)", 
  ylab = "Frequência absoluta")

library(lattice)
tabela <- xtabs(~cyl, data = mtcars)
barchart(tabela,
         horizontal = FALSE, 
         main = "Função barchart (lattice)",
         xlab = "Número de cilindros por motor (cyl)", 
         ylab = "Frequência absoluta", 
         col = "lightblue")

Visão geral

Não é necessário:

  • comandos específicos para cada gráfico gerado

  • funções adicionais (table ou xtabs)

  • conhecimento prévio de cada uma das funções

  • sintaxe fixa e única

O pacote ggplot2

Estatístico, cientista computacional e professor adjunto norte-americano

Hadley Wickham (2008):

Vantagens:

Ideias:

A gramática em camada de gráficos

Descrevendo um gráfico estatístico:

Elementos Exemplos
aestética\(^*\) cor, formato
geometrias\(^*\) barra, ponto
estatísticas (modelos) mediana, máximo
facetas facetas
coordenadas polar, cartesiana
themas eixos, títulos

Construindo gráficos no gplot2

Passos

Primeiro passo:

ggplot(mtcars)

Segundo passo:

  • inserir uma forma geométrica
  • gráfico de dispersão
ggplot(mtcars) +
  geom_point(mapping = aes(x= disp, y=mpg))

Os tipos de geometrias (geom)

Principais:

  • point (pontos); line (dispersão);
  • bar (barras); col (colunas); errorbar (barra de erros)
  • boxplot; histogram(histogramas), density (densidades), sf (mapas)

Argumentos de estética (aes)

Principais:

  • variáveis (x, y, z)
  • cores (color, colour, fill)
  • tonalidade (alpha)
  • formas (shape, linetype)
  • tamanhos (size)

A escolha das cores

Argumento color (colour):

  • Objetos geométricos que não possuem área
  • Pontos, linhas, borda de gráficos e mapas, etc

Argumento fill :

  • Preenchimento
  • Objetos geométricos que possuem área não nula
  • Caixas, colunas, círculos, polígonos, etc

O argumento color

Exemplo: Gráfico de dispersão

ggplot(mtcars) +
  geom_point(mapping = aes(x= disp, 
                           y=mpg, 
                           color=as.factor(am)))

O argumento color

Exemplo: Gráfico de dispersão

ggplot(mtcars) +
  geom_point(mapping = aes(x= disp, 
                           y=mpg),
             color=c("red"))

O argumento fill

Exemplo: gráfico de barras

ggplot(mtcars, aes(x = as.factor(cyl))) +
  geom_bar(aes(fill=as.factor(am)))

Outro exemplo: gráfico de barras

ggplot(mtcars, aes(x = as.factor(cyl))) +
  geom_bar(fill = c("red"))

O argumento alpha (tonalidade das cores)

  • varia entre 0 e 1

Exemplo: gráfico de barras

ggplot(mtcars, aes(x = as.factor(cyl))) +
  geom_bar(aes(alpha = as.factor(cyl),  fill = as.factor(cyl)))

O argumento forma (shape)

Exemplo: Gráfico de dispersão (Exclusivo)

ggplot(mtcars) +
  geom_point(mapping = aes(x= disp, y=mpg, color=as.factor(am), shape = as.factor(carb)))

O argumento forma (linetype)

Exemplo: Gráfico de linhas (Exclusivo)

ggplot(mtcars) +
  geom_line(mapping = aes(x= disp, y=mpg, linetype = as.factor(am), color = as.factor(am)))

O argumento tamanho (size)

Exemplo: Gráfico de dispersão

ggplot(mtcars) +
  geom_point(mapping = aes(x= disp, y=mpg, color=as.factor(am), 
        shape = as.factor(carb), size = as.factor(cyl)))

O argumento tamanho (size)

Exemplo: Gráfico de linhas

ggplot(mtcars) +
  geom_line(mapping = aes(x= disp, y=mpg, linetype = as.factor(am), 
              color = as.factor(am), size = as.factor(cyl)))

Retirando variáveis da legenda (guides)

Linha de comando: guides(nome = “none)

  • guides(color = “none”)
  • guides(fill = “none)
  • guides(shape = “none”)
  • guides(size = “none”)

A escolha dos rótulos dos eixos (labs)

Linha de comando: labs()

  • labs(x=“nome”, y= “nome”, color=“nome”, fill=“nome”,…)
  • labs(size=“none”) (não rotula)

A escala dos eixos (scale)

Linha de comando: scale_eixo_tipo

  • eixo x: scale_x_discrete
  • eixo y: scale_y_discrete
  • eixo x: scale_x_continuous
  • eixo y: scale_y_continuous

A escolha dos temas (theme)

Linha de comando: theme_nome()

  • theme_gray; theme_bw()
  • theme_linedraw(); theme_light
  • theme_dark(); theme_minimal
  • theme_classic(); theme_void()

A escolha do título (ggtitle)

Linha de comando: ggtitle(“nome”)

Exemplo:

  • ggtitle(“Média de casos de COVID-19 - Brasil - 2021”)

Gráficos mais apresentáveis

Exemplo (Gráfico de dispersão)

ggplot(mtcars) +
  geom_point(mapping = aes(x= disp, y=mpg, color = as.factor(am),
                           shape = as.factor(am)))+
  guides(shape = "none")+
  labs(x = "Distância percorrida (disp)", 
       y = "Milhas percorridas por galão (mpg)", 
    color = "Tipo de Transmissão", 
    size ="Número de Carburadores (motor)")+
  theme_classic()+
  ggtitle("mpg vs disp: tipo de transmissão")

Gráfico de barras

ggplot(mtcars) +
  geom_bar(mapping = aes(x= as.factor(carb), y = (..count..), 
          fill = as.factor(am)), position = "dodge", color = "black")+
  scale_y_continuous(limits = c(0,8))+
  labs(x = "Número de Carburadores (motor)", 
       y = "Frequência absoluta", 
       fill = "Tipo de Transmissão")+
  theme_classic()+
  ggtitle("Número de carburadores (motor): tipo de transmissão")

Histograma

ggplot(mtcars) +
  geom_histogram(mapping = aes(x = mpg, y = (..count..)/100, 
                fill = as.factor(carb)), bins= 5, color = "black") +
  labs(x = "Milhas percorridas por galão (mpg)",
       y = "Frequência relativa",
       fill = "Número de carburadores")+
  theme_classic()+
  ggtitle("Milhas percorrida por galão (mpg)")

Histograma (facetas)

ggplot(mtcars) +
  geom_histogram(mapping = aes(x = mpg, y = (..count..)/100, 
                fill = as.factor(carb)), bins= 5, color = "black") +
  labs(x = "Milhas percorridas por galão (mpg)",
       y = "Frequência relativa",
       fill = "Número de carburadores")+
  theme_classic()+
  ggtitle("Milhas percorrida por galão (mpg)")+
  facet_wrap(~as.factor(carb))# facetas

Box-plot

ggplot(mtcars) +
  geom_boxplot(mapping = aes(x = as.factor(carb), y=mpg, 
                fill = as.factor(am)), color = "black")+
  labs(x = "Número de carburadores (carb)", 
       y = "Milhas percorridas v.s. galão (mpg)", 
       fill = "Tipo de transmissão")+
  theme_classic()+
  ggtitle("Distribuição mpg por carb: tipo de transmissão")

Densidades

ggplot(mtcars) +
  geom_density(mapping = aes(x = mpg, fill = as.factor(carb)), color = "black", 
               alpha = 0.1) +
  labs(x = "Milhas percorridas por galão (mpg)", y = "Densidades", 
       fill = "Número de carburadores")+
  theme_classic()+
  ggtitle("Densidade mpg")

Segunda parte

Data mining

  • Minerar um conjunto de dados original
  • pacotes tydyverse, tibble e dplyr do R.

Pacote covid19br

  • Criado por pesquisadores da UFMG
  • permite a coleta, em tempo real, de algumas informações sobre a doença COVID-19
  • nas unidades de saúde do Brasil
  • unidade de federação (states), por municípios (cities), regiões (regions)
  • no mundo por país (country)
  • informações como número de casos e mortes novos e acumulados diários
  • separadas por semana epidemiológica, datas, entre outros

Apresentando o conjunto de dados

data <- downloadCovid19("states")# dados por municípios brasileiros
glimpse(data)
## Rows: 28,539
## Columns: 12
## $ region       <chr> "North", "North", "North", "North", "North", "North", "No~
## $ state        <chr> "RO", "RO", "RO", "RO", "RO", "RO", "RO", "RO", "RO", "RO~
## $ date         <date> 2020-02-25, 2020-02-26, 2020-02-27, 2020-02-28, 2020-02-~
## $ epi_week     <int> 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11~
## $ newCases     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ~
## $ accumCases   <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ~
## $ newDeaths    <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ~
## $ accumDeaths  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ~
## $ newRecovered <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N~
## $ newFollowup  <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N~
## $ pop          <dbl> 1777225, 1777225, 1777225, 1777225, 1777225, 1777225, 177~
## $ state_code   <int> 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 1~

A estrutura (tibble)

  • um data frame com algumas particularidades
  • dimensão dos dados
  • o tipo de variável (categórica, inteiro, caractere, etc.)
Representação Tipo de variável
int números inteiros
dbl doubles (números reais)
chr vetores de caracteres (strings)
dttm datas-tempos (uma data + um horário)
fctr valores lógicos (TRUE ou FALSE)
date datas

Caracteres lógicos necessários

Caractere lógico Representação
== igual
& conectivo “e” (interseção)
\ conectivo “ou” (união)
> maior do que
< menor do que
>= maior do que ou igual a
<= menor do que ou igual a
!= diferente
%in% concatenar

Funções básicas do pacote dplyr

Funções Resultados
filter() seleciona observações das variáveis por seus valores assumidos
arrange() reordena as linhas (observações)
select() seleciona variáveis por seus nomes (rótulos)
mutate() cria novas variáveis com funções de variáveis existentes
summarize() reune muitos valores em um único resumo
group_by() muda o escopo de cada função anterior em todo o conjunto de dados para operar grupo por grupo.

Exemplificando

filter(data, 
       date >= "2022-02-20" &  state == "SP" & epi_week == 8)
##       region state       date epi_week newCases accumCases newDeaths
## 1: Southeast    SP 2022-02-20        8     6424    4935771        26
## 2: Southeast    SP 2022-02-21        8     2470    4938241        23
## 3: Southeast    SP 2022-02-22        8    15999    4954240       310
## 4: Southeast    SP 2022-02-23        8    15427    4969667       298
## 5: Southeast    SP 2022-02-24        8    15228    4984895       303
## 6: Southeast    SP 2022-02-25        8    14764    4999659       211
## 7: Southeast    SP 2022-02-26        8    11290    5010949       211
##    accumDeaths newRecovered newFollowup      pop state_code
## 1:      163160           NA          NA 45919049         35
## 2:      163183           NA          NA 45919049         35
## 3:      163493           NA          NA 45919049         35
## 4:      163791           NA          NA 45919049         35
## 5:      164094           NA          NA 45919049         35
## 6:      164305           NA          NA 45919049         35
## 7:      164516           NA          NA 45919049         35

Exemplificando

arrange(data, 
        state)
##        region state       date epi_week newCases accumCases newDeaths
##     1:  North    AC 2020-02-25        9        0          0         0
##     2:  North    AC 2020-02-26        9        0          0         0
##     3:  North    AC 2020-02-27        9        0          0         0
##     4:  North    AC 2020-02-28        9        0          0         0
##     5:  North    AC 2020-02-29        9        0          0         0
##    ---                                                               
## 28535:  North    TO 2022-03-15       11      215     301172         2
## 28536:  North    TO 2022-03-16       11      124     301296         0
## 28537:  North    TO 2022-03-17       11      128     301424         2
## 28538:  North    TO 2022-03-18       11      116     301540         2
## 28539:  North    TO 2022-03-19       11      107     301647         2
##        accumDeaths newRecovered newFollowup     pop state_code
##     1:           0           NA          NA  881935         12
##     2:           0           NA          NA  881935         12
##     3:           0           NA          NA  881935         12
##     4:           0           NA          NA  881935         12
##     5:           0           NA          NA  881935         12
##    ---                                                        
## 28535:        4134           NA          NA 1572866         17
## 28536:        4134           NA          NA 1572866         17
## 28537:        4136           NA          NA 1572866         17
## 28538:        4138           NA          NA 1572866         17
## 28539:        4140           NA          NA 1572866         17

Exemplificando

select(data, 
       region,
       date,
       state,
       newCases,
       accumCases)
##        region       date state newCases accumCases
##     1:  North 2020-02-25    RO        0          0
##     2:  North 2020-02-26    RO        0          0
##     3:  North 2020-02-27    RO        0          0
##     4:  North 2020-02-28    RO        0          0
##     5:  North 2020-02-29    RO        0          0
##    ---                                            
## 28535:  North 2022-02-19    RO        0          0
## 28536:  North 2022-02-20    RO        0          0
## 28537:  North 2022-02-21    RO        0          0
## 28538:  North 2022-02-22    RO        0          0
## 28539:  North 2022-02-23    RO        0          0

Exemplificando

mutate(data, 
       rate_newcases = newCases/pop*100000)
##        region state       date epi_week newCases accumCases newDeaths
##     1:  North    RO 2020-02-25        9        0          0         0
##     2:  North    RO 2020-02-26        9        0          0         0
##     3:  North    RO 2020-02-27        9        0          0         0
##     4:  North    RO 2020-02-28        9        0          0         0
##     5:  North    RO 2020-02-29        9        0          0         0
##    ---                                                               
## 28535:  North    RO 2022-02-19        7        0          0         0
## 28536:  North    RO 2022-02-20        8        0          0         0
## 28537:  North    RO 2022-02-21        8        0          0         0
## 28538:  North    RO 2022-02-22        8        0          0         0
## 28539:  North    RO 2022-02-23        8        0          0         0
##        accumDeaths newRecovered newFollowup     pop state_code rate_newcases
##     1:           0           NA          NA 1777225         11             0
##     2:           0           NA          NA 1777225         11             0
##     3:           0           NA          NA 1777225         11             0
##     4:           0           NA          NA 1777225         11             0
##     5:           0           NA          NA 1777225         11             0
##    ---                                                                      
## 28535:           0           NA          NA      NA         11            NA
## 28536:           0           NA          NA      NA         11            NA
## 28537:           0           NA          NA      NA         11            NA
## 28538:           0           NA          NA      NA         11            NA
## 28539:           0           NA          NA      NA         11            NA

Exemplificando

summarize(data, 
          mean_newdeaths=mean(newDeaths), 
          desv_pad= sd(newDeaths),
          standard_error=desv_pad/sqrt(length(data)))
##   mean_newdeaths desv_pad standard_error
## 1       23.18823 64.04652       18.48864

Exemplificando

group_by(data, 
         region,
         epi_week)
## # A tibble: 28,539 x 12
## # Groups:   region, epi_week [265]
##    region state date       epi_week newCases accumCases newDeaths accumDeaths
##    <chr>  <chr> <date>        <int>    <int>      <int>     <int>       <int>
##  1 North  RO    2020-02-25        9        0          0         0           0
##  2 North  RO    2020-02-26        9        0          0         0           0
##  3 North  RO    2020-02-27        9        0          0         0           0
##  4 North  RO    2020-02-28        9        0          0         0           0
##  5 North  RO    2020-02-29        9        0          0         0           0
##  6 North  RO    2020-03-01       10        0          0         0           0
##  7 North  RO    2020-03-02       10        0          0         0           0
##  8 North  RO    2020-03-03       10        0          0         0           0
##  9 North  RO    2020-03-04       10        0          0         0           0
## 10 North  RO    2020-03-05       10        0          0         0           0
## # ... with 28,529 more rows, and 4 more variables: newRecovered <int>,
## #   newFollowup <int>, pop <dbl>, state_code <int>

Situação real

  • Conhecer quantas mortes por COVID-19
  • Cada uma das UF’s brasileiras
  • dia 20-02-2022 e na oitava semana epidemiológica
Dados <- select(data, epi_week, state, newDeaths, date)
resultados <- filter(Dados, epi_week == 8 & date == "2022-02-20")
head(resultados)
##    epi_week state newDeaths       date
## 1:        8    RO         5 2022-02-20
## 2:        8    AC         3 2022-02-20
## 3:        8    AM         6 2022-02-20
## 4:        8    RR         1 2022-02-20
## 5:        8    PA        23 2022-02-20
## 6:        8    AP         0 2022-02-20

Saída gráfica

ggplot(resultados)+
geom_col(aes(x=as.factor(state), y=newDeaths, fill=as.factor(state)), 
         alpha=0.65, position = "stack")+
labs(x = "Unidades da federação",
     y = "Novas mortes",
     fill = "UF")+
  ggtitle("Situação COVID-19 - Brasil - 20-02-2022")+
theme_classic()

O operador pipe (%>%)

  • atribuímos dois labels: Dados e resultados
  • para um único gráfico
  • pacote magrittr
  • Informalmente: %>% pode ser entendido como “vem mais coisas por ai”
  • Formalmente: f(a) = y, então: g(.) tem como primeiro argumento de entrada f(a)
  • g(f(a),…)

Saída gráfica

  library(geobr)
Dados <- select(data, epi_week , state, newDeaths, date) %>%
  filter(epi_week == 8 & date == "2022-02-20")
ggplot(Dados)+
geom_col(aes(x=as.factor(state), y=newDeaths, fill=as.factor(state)),
alpha=0.65, position = "stack")+
labs(x = "Unidades da federação", y = "Novas mortes",
     fill = "UF")+
  ggtitle("Situação COVID-19 - Brasil - 20-02-2022")+
theme_classic()

Comprações entre as UF’s

  • taxas de novas mortes
  • devido a heterogeneidade populacional
  • mutate: criar a variável rate_newDeaths
  • constante IBGE: 100000

Saída gráfica

  library(geobr)
Dados <- select(data, epi_week , state, newDeaths, date, pop) %>%
  filter(epi_week == 8 & date == "2022-02-20")%>%
  mutate(rate_newDeaths = newDeaths/pop*100000)
ggplot(Dados)+
geom_col(aes(x=as.factor(state), y=rate_newDeaths, fill=as.factor(state)),
alpha=0.65, position = "stack")+
labs(x = "Unidades da federação", y = "Taxa de novas mortes",
     fill = "UF")+
  ggtitle("Situação COVID-19 - Brasil - 20-02-2022")+
theme_classic()

Situação real

  • conhecer a evolução diária dos novos casos
  • entre as semanas epidemiológicas 1 e 8
  • anos: 2021 e 2022
  • região: sudeste
  • UF’s

Saída gráfica

  library(geobr)
cor <- heat.colors(4, rev = TRUE)
resultados <- data %>%
mutate(year = as.numeric(format(date, "%Y")),
       rate = newCases/pop*100000)%>%
select(newDeaths, epi_week, state, year,  rate)%>%
filter(epi_week>= 1 & epi_week <= 8 & state %in% c("SP", "RJ", "MG", "ES") &
         year %in% c(2021, 2022))
ggplot(resultados, aes(x=as.factor(epi_week),  y = rate, 
           fill=as.factor(state)))+
facet_wrap(~year)+
geom_bar(stat="identity", position = "dodge", alpha=0.45) +
labs(x = "Semana de infecção", y = "Novas mortes - Sudeste") +
  ggtitle(paste("Nvos casos: COVID-19 - Região Sudeste",
                "\n", 
                "semanas epidemiológicas: 1 a 8 - 2021 e 2022"))+
theme_classic()

Produção de mapas

Preparando os dados

  library(geobr)
uf <- data %>%
  select(state, newDeaths, newCases, accumDeaths, accumCases, pop, date)%>%
  filter(date == "2022-02-23")%>%
  mutate(ratenewcases = newCases/pop*100000,
            rateaccumcases = accumCases/pop*100000,
            ratenewdeaths = newDeaths/pop*100000,
            rateaccumdeaths = accumDeaths/pop*100000)
dados_mapa <- read_state(year=2019, showProgress = FALSE)
colnames(dados_mapa)[2] <- "state"
dados_final <- left_join(dados_mapa, uf, "state")
dados_final
## Simple feature collection with 28 features and 15 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -73.99045 ymin: -33.75118 xmax: -28.84784 ymax: 5.271841
## Geodetic CRS:  SIRGAS 2000
## First 10 features:
##    code_state state name_state code_region name_region newDeaths newCases
## 1          11    RO   Rondônia           1       Norte        16     2741
## 2          11    RO   Rondônia           1       Norte         0        0
## 3          12    AC       Acre           1       Norte         4      654
## 4          13    AM   Amazônas           1       Norte         3      575
## 5          14    RR    Roraima           1       Norte         1      361
## 6          15    PA       Pará           1       Norte        17     2476
## 7          16    AP      Amapá           1       Norte         2       52
## 8          17    TO  Tocantins           1       Norte         2      723
## 9          21    MA   Maranhão           2    Nordeste        14     1283
## 10         22    PI      Piauí           2    Nordeste         5      645
##    accumDeaths accumCases     pop       date ratenewcases rateaccumcases
## 1         7036     366864 1777225 2022-02-23   154.229206      20642.519
## 2            0          0      NA 2022-02-23           NA             NA
## 3         1966     119090  881935 2022-02-23    74.155125      13503.263
## 4        14101     571174 4144597 2022-02-23    13.873484      13781.171
## 5         2126     152146  605761 2022-02-23    59.594461      25116.506
## 6        17716     709489 8602865 2022-02-23    28.781110       8247.125
## 7         2100     160025  845731 2022-02-23     6.148527      18921.501
## 8         4095     296677 1572866 2022-02-23    45.967044      18862.192
## 9        10739     410211 7075181 2022-02-23    18.133812       5797.887
## 10        7619     364093 3273227 2022-02-23    19.705324      11123.365
##    ratenewdeaths rateaccumdeaths                           geom
## 1     0.90027993        395.8981 MULTIPOLYGON (((-65.3815 -1...
## 2             NA              NA MULTIPOLYGON (((-65.3815 -1...
## 3     0.45354816        222.9189 MULTIPOLYGON (((-71.07772 -...
## 4     0.07238339        340.2261 MULTIPOLYGON (((-69.83766 -...
## 5     0.16508161        350.9635 MULTIPOLYGON (((-63.96008 2...
## 6     0.19760859        205.9314 MULTIPOLYGON (((-51.43248 -...
## 7     0.23648181        248.3059 MULTIPOLYGON (((-50.45011 2...
## 8     0.12715641        260.3528 MULTIPOLYGON (((-48.23163 -...
## 9     0.19787480        151.7841 MULTIPOLYGON (((-44.5383 -2...
## 10    0.15275445        232.7672 MULTIPOLYGON (((-42.91539 -...

Taxa de novos casos

  ggplot(dados_final) +
  geom_sf(aes(fill = ratenewcases), color = "black") +
  geom_sf_text(aes(label = state), size = 2, color = "white")+
  labs(title = paste("Novos casos", "\n", "Brasil - 23-02-2022"), 
       fill = "Taxa (Brasil)") +
  theme_minimal()+
  theme(axis.title = element_blank(),
        axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.grid = element_blank())

Taxa de novas mortes

  ggplot(dados_final) +
  geom_sf(aes(fill = ratenewdeaths), color = "black") +
  geom_sf_text(aes(label = state), size = 2, color = "white")+
  labs(title = paste("Novas mortes", "\n", "Brasil - 23-02-2022"), 
       fill = "Taxa (Brasil)") +
  theme_minimal()+
  theme(axis.title = element_blank(),
        axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.grid = element_blank())

Taxa de casos acumulados

  ggplot(dados_final) +
  geom_sf(aes(fill = rateaccumcases), color = "black") +
  geom_sf_text(aes(label = state), size = 2, color = "white")+
  labs(title = paste("Casos acumulados", "\n", "Brasil - 23-02-2022"), 
       fill = "Taxa (Brasil)") +
  theme_minimal()+
  theme(axis.title = element_blank(),
        axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.grid = element_blank())

Taxa de casos acumulados

  ggplot(dados_final) +
  geom_sf(aes(fill = rateaccumdeaths), color = "black") +
  geom_sf_text(aes(label = state), size = 2, color = "white")+
  labs(title = paste("Mortes acumuladas", "\n", "Brasil - 23-02-2022"), 
       fill = "Taxa (Brasil)") +
  theme_minimal()+
  theme(axis.title = element_blank(),
        axis.text = element_blank(),
        axis.ticks = element_blank(),
        panel.grid = element_blank())

Material de apoio

ggplot2: elegant graphics for data analysis

R for Data Science

R Graphics Cookbook