Laboratório de Econometria


Lab. 2 - Tidyverse

Lab. 2

Antonio Vinícius Barbosa

19-08-2024


O ambiente tidyverse

Pacotes do tidyverse

O tidyverse é uma coleção de pacotes que facilitam a organização e visualização de dados.

install.packages("tidyverse")
library(tidyverse)

Nesta aula, utilizaremos como exemplo os dados do Gapminder, com informações sobre países ao longo do tempo.

Leitura

O pacote readr

O pacote readr oferece algumas funcionalidades que facilitam a leitura de dados no formato retangular. As principais funções do pacote readr são:

  • read_csv(): arquivos separados por vírgula
  • read_csv2(): arquivos separados por ponto-e-vírgula
  • read_delim(): arquivos separados por qualquer delimitador

Para ler os dados, fazemos:

# Ler dados
dados_gapminder <- readr::read_csv("dados/dados_gapminder.csv")

Análise inicial dos dados

Para fazer uma checagem inicial da estrutura dos dados, utilizamos a função glimpse()

# Checar dados
glimpse(dados_gapminder)
## Rows: 1,704
## Columns: 6
## $ pais                <chr> "Afeganistão", "Afeganistão", "Afeganistão", "Afeg…
## $ continente          <chr> "Ásia", "Ásia", "Ásia", "Ásia", "Ásia", "Ásia", "Á…
## $ ano                 <dbl> 1952, 1957, 1962, 1967, 1972, 1977, 1982, 1987, 19…
## $ expectativa_de_vida <dbl> 28.801, 30.332, 31.997, 34.020, 36.088, 38.438, 39…
## $ populacao           <dbl> 8425333, 9240934, 10267083, 11537966, 13079460, 14…
## $ pib_per_capita      <dbl> 779.4453, 820.8530, 853.1007, 836.1971, 739.9811, …

Manipulação

O operador pipe (|>)

  • Os operadores (|>) são chamados de pipes
  • Pipes são operadores sequenciais e podem ser lidos com “e então…”

Considere o seguinte exemplo:

# Operacao usual
sqrt(sum(9, 16))
## [1] 5

# Operacao com pipe
c(9, 16) |> sum() |> sqrt()
## [1] 5

O operador pipe (|>)

Outro exemplo:

# Operacao usual
nrow(dados_gapminder)
## [1] 1704

# Operacao com pipe
dados_gapminder |> nrow()
## [1] 1704

O pacote dplyr

  • O dplyr é um pacote bastante útil para manipular dados.
  • Os códigos são escritos de uma maneira intuitiva e elegante.
  • Se utilizam dos pipes para realizar operações sequenciais.

As principais funções do dplyr são:

  • select(): seleciona por coluna do banco de dados
  • filter(): seleciona linhas baseado em seu valor
  • mutate(): cria/modifica colunas baseado em colunas existentes
  • summarise(): realiza operações sobre um conjunto de valores
  • arrange(): reordena as linhas da base de dados

A função select()

Utilizamos select() para selecionar colunas ou variáveis dos dados:

A função select()

# Selecionar variaveis
dados_gapminder |> 
  select(pais, ano, populacao) |> 
  head()
## # A tibble: 6 × 3
##   pais          ano populacao
##   <chr>       <dbl>     <dbl>
## 1 Afeganistão  1952   8425333
## 2 Afeganistão  1957   9240934
## 3 Afeganistão  1962  10267083
## 4 Afeganistão  1967  11537966
## 5 Afeganistão  1972  13079460
## 6 Afeganistão  1977  14880372

A função filter()

A função filter() permite selecionar observações baseado em seus valores ou em uma condição:

A função filter()

# Selecionar variaveis
dados_gapminder |> 
  select(pais, ano, populacao) |> 
  filter(ano == 2007) |> 
  head()
## # A tibble: 6 × 3
##   pais          ano populacao
##   <chr>       <dbl>     <dbl>
## 1 Afeganistão  2007  31889923
## 2 Albânia      2007   3600523
## 3 Argélia      2007  33333216
## 4 Angola       2007  12420476
## 5 Argentina    2007  40301927
## 6 Austrália    2007  20434176

A função filter()

Outros exemplos com a função filter():

# Selecionar variaveis
dados_gapminder |> 
  select(pais, continente, ano, populacao) |> 
  filter(ano == 2007, continente == "Américas") |> 
  head()
## # A tibble: 6 × 4
##   pais      continente   ano populacao
##   <chr>     <chr>      <dbl>     <dbl>
## 1 Argentina Américas    2007  40301927
## 2 Bolívia   Américas    2007   9119152
## 3 Brasil    Américas    2007 190010647
## 4 Canadá    Américas    2007  33390141
## 5 Chile     Américas    2007  16284741
## 6 Colômbia  Américas    2007  44227550

A função mutate()

Utilizamos mutate() para criar ou modificar variáveis (colunas) baseado em outras variáveis do banco de dados:

A função mutate()

# Selecionar variaveis
dados_gapminder |> 
  select(pais, continente, ano, populacao, pib_per_capita) |> 
  filter(ano == 2007, continente == "Américas") |> 
  mutate(pib = populacao * pib_per_capita) |> 
  head()
## # A tibble: 6 × 6
##   pais      continente   ano populacao pib_per_capita     pib
##   <chr>     <chr>      <dbl>     <dbl>          <dbl>   <dbl>
## 1 Argentina Américas    2007  40301927         12779. 5.15e11
## 2 Bolívia   Américas    2007   9119152          3822. 3.49e10
## 3 Brasil    Américas    2007 190010647          9066. 1.72e12
## 4 Canadá    Américas    2007  33390141         36319. 1.21e12
## 5 Chile     Américas    2007  16284741         13172. 2.14e11
## 6 Colômbia  Américas    2007  44227550          7007. 3.10e11

A função arrange()

Utilizamos mutate() ordena a base de dados, baseada em uma ou mais variáveis:

A função arrange()

# Selecionar variaveis
dados_gapminder |> 
  select(pais, continente, ano, populacao, pib_per_capita) |> 
  filter(ano == 2007, continente == "Américas") |> 
  mutate(pib = populacao * pib_per_capita) |> 
  arrange(pib) |> 
  head()
## # A tibble: 6 × 6
##   pais              continente   ano populacao pib_per_capita          pib
##   <chr>             <chr>      <dbl>     <dbl>          <dbl>        <dbl>
## 1 Haiti             Américas    2007   8502814          1202. 10217297216.
## 2 Nicarágua         Américas    2007   5675356          2749. 15603375235.
## 3 Trindade e Tobago Américas    2007   1056608         18009. 19027934931.
## 4 Jamaica           Américas    2007   2780132          7321. 20353013485.
## 5 Honduras          Américas    2007   7483763          3548. 26554867097.
## 6 Paraguai          Américas    2007   6667147          4173. 27820927447.

A função summarise()

A função summarise() realiza operações sobre um conjunto de observações, reduzindo variáveis a valores.

A função summarise()

dados_gapminder |> 
  filter(ano == 2007) |> 
  summarise(pib_pc_min = min(pib_per_capita),
            pib_pc_mean = mean(pib_per_capita),
            pib_pc_mediana = median(pib_per_capita),
            pib_pc_max = max(pib_per_capita),
            pib_pc_dp = sd(pib_per_capita))
## # A tibble: 1 × 5
##   pib_pc_min pib_pc_mean pib_pc_mediana pib_pc_max pib_pc_dp
##        <dbl>       <dbl>          <dbl>      <dbl>     <dbl>
## 1       278.      11680.          6124.     49357.    12860.

A função summarise()

Para calcular estatísticas para grupos específicos, utilizamos o summarise() juntamente com a função group_by()

dados_gapminder |> 
  filter(ano == 2007) |> 
  group_by(continente) |> 
  summarise(esp_vida = mean(expectativa_de_vida))
## # A tibble: 5 × 2
##   continente esp_vida
##   <chr>         <dbl>
## 1 Américas       73.6
## 2 Europa         77.6
## 3 Oceania        80.7
## 4 África         54.8
## 5 Ásia           70.7

Visualização

O pacote ggplot2

O pacote ggplot2 é um dos mais elegantes e flexíveis ferramentas de visualização gráfica do R.

  • Possui lógica semelhante ao pipe (|>), onde é possível adicionar camadas e informações através de um operador sequencial (+)
  • Através dele, podemos definir sistematicamente quais são as camadas de um gráfico e como eles se interelacionam.

O pacote ggplot2

Abaixo temos o primeiro exemplo de gráfico:

# Salvar dados filtrados
dados_gapminder_2007 <- dados_gapminder |> 
  filter(ano == 2007) 

ggplot(data = dados_gapminder_2007) +
  geom_point(
    aes(x = pib_per_capita, y = expectativa_de_vida),
    color = "red"
    )

O pacote ggplot2

O pacote ggplot2

De forma geral, existem quatro partes fundamentais para a visualização no ggplot2:

O pacote ggplot2

A função ggplot(), a camada data, as variáveis através do aes() e a camada de geometria, especificada por geom_xxx(). Algumas geometrias disponíveis são:

  • geom_line()
  • geom_bar()
  • geom_col()
  • geom_histogram()
  • geom_density()
  • geom_polygon()
  • geom_smooth()
  • geom_text()

O pacote ggplot2

Abaixo temos o primeiro exemplo de gráfico:

# Grafico de linhas
dados_gapminder |> 
  filter(pais %in% c("Argentina", "Brasil", "Chile", "Uruguai")) |> 
  ggplot() +
  geom_line(
    aes(x = ano, y = expectativa_de_vida, color = pais),
    lwd = 1.5
    ) + 
  theme_minimal()

O pacote ggplot2