Tutorial 8: Bancos de Dados Tidy
Introdução.
Na semana passada, fizemos nossa primeira imersão no uso de tidyverse para manipulação de banco de dados. Hoje daremos um novo passo. Aprenderemos o conceito de banco de dados tidy, e como colocar nosso banco de dados neste formato.
Para aprender e praticar sobre bancos de dados tidy, usaremos o pacote tidyr
.
Tidy Data.
O nome tidyverse
vem do conceito de tidy
data. Todos os pacotes que discutimos até aqui, e os outros, sobretudo o ggplot
para visualização, são construídos em torno do conceito de dados em formato tidy
.
As três propriedades mais importantes que definem um banco de dados tidy
são:
Cada coluna é uma variável.
Cada linha é uma observação.
Cada valor em uma linha.
Vamos ver estas regras visualmente:
Estas duas simples definições trazem diversas vantagens:
Uma forma consistente para organizar nossos bancos de dados.
Salvar uma variável por coluna facilita operações de manipulação (R trabalha melhor com vetores em coluna).
Integra com outros pacotes do
tidyverse
Dados Tidy: Gapminder
library(gapminder)
library(tidyverse)
gapminder
## # A tibble: 1,704 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Afghanistan Asia 1952 28.8 8425333 779.
## 2 Afghanistan Asia 1957 30.3 9240934 821.
## 3 Afghanistan Asia 1962 32.0 10267083 853.
## 4 Afghanistan Asia 1967 34.0 11537966 836.
## 5 Afghanistan Asia 1972 36.1 13079460 740.
## 6 Afghanistan Asia 1977 38.4 14880372 786.
## 7 Afghanistan Asia 1982 39.9 12881816 978.
## 8 Afghanistan Asia 1987 40.8 13867957 852.
## 9 Afghanistan Asia 1992 41.7 16317921 649.
## 10 Afghanistan Asia 1997 41.8 22227415 635.
## # … with 1,694 more rows
Tidy vs Untidy
Untidy: Dados Abertos.
Dados untidy são em geral chamados de banco de dados abertos (wide em inglês). Na maior parte das vezes, estes dados possuem uma única variável espalhada por diversas colunas.
Vejamos um exemplo:
tibble(pais=c("Brasil", "Uruguai", "Chile"),
wide <-pres_ano_2010= c("Lula", "Mujica", "Pinera"),
pres_ano_2014=c("Dilma", "Tabare", "Bachelet"),
pres_ano_2018=c("Temer", "Lacalle", "Pinera"))
wide
## # A tibble: 3 x 4
## pais pres_ano_2010 pres_ano_2014 pres_ano_2018
## <chr> <chr> <chr> <chr>
## 1 Brasil Lula Dilma Temer
## 2 Uruguai Mujica Tabare Lacalle
## 3 Chile Pinera Bachelet Pinera
Desafio
Tidy ou Untidy
tibble(pais=c("Brasil", "Uruguai", "Argentina"),
tab <-i_2010 = c(5, 1, 2),
i_2014 = c(10, 9, 9),
i_2018 = c(0, 1, 2))
tab
## # A tibble: 3 x 4
## pais i_2010 i_2014 i_2018
## <chr> <dbl> <dbl> <dbl>
## 1 Brasil 5 10 0
## 2 Uruguai 1 9 1
## 3 Argentina 2 9 2
Tidy ou Untidy
tibble(pais=c("Brasil", "Argentina"),
tab1 <-ano = c(2020, 2020),
presidente_vice = c("Bolsonaro-Mourão", "Fernandez-Kirchner"))
tab1
## # A tibble: 2 x 3
## pais ano presidente_vice
## <chr> <dbl> <chr>
## 1 Brasil 2020 Bolsonaro-Mourão
## 2 Argentina 2020 Fernandez-Kirchner
Tidy ou Untidy
tibble(pais=c("Brasil", "Brasil", "Argentina", "Argentina"),
tab2 <-ano = c(2020, 2020, 2020, 2020),
covid = c("Casos", "Vacinas", "Casos", "Vacinas"),
numero= c(10500000, 6535363, 2100000, 1800000))
tidyr
Vamos usar tidyr
para tranformar nossos dados de um formato untidy->tidy, e vice-versa.
pivot_longer (Várias Colunas -> Uma Longa Coluna)
A função pivot_longer
possui três inputs principais:
cols
: as variáveis que você pretende empilhar.names_to
: nome da colunas para a nova variável.values_to
: nome da coluna para os valores da nova variável.
# Antes = Wide - Aberto. Variáveis Espalhadas nas Colunas.
wide
## # A tibble: 3 x 4
## pais pres_ano_2010 pres_ano_2014 pres_ano_2018
## <chr> <chr> <chr> <chr>
## 1 Brasil Lula Dilma Temer
## 2 Uruguai Mujica Tabare Lacalle
## 3 Chile Pinera Bachelet Pinera
# Rodando
%>%
wide pivot_longer(cols=c(pres_ano_2010, pres_ano_2014,
2018),
pres_ano_names_to="presidente_ano",
values_to="presidente")
## # A tibble: 9 x 3
## pais presidente_ano presidente
## <chr> <chr> <chr>
## 1 Brasil pres_ano_2010 Lula
## 2 Brasil pres_ano_2014 Dilma
## 3 Brasil pres_ano_2018 Temer
## 4 Uruguai pres_ano_2010 Mujica
## 5 Uruguai pres_ano_2014 Tabare
## 6 Uruguai pres_ano_2018 Lacalle
## 7 Chile pres_ano_2010 Pinera
## 8 Chile pres_ano_2014 Bachelet
## 9 Chile pres_ano_2018 Pinera
Mais um exemplo:
%>%
tab pivot_longer(cols = c(starts_with("i")),
names_to="t",
values_to="values")
## # A tibble: 9 x 3
## pais t values
## <chr> <chr> <dbl>
## 1 Brasil i_2010 5
## 2 Brasil i_2014 10
## 3 Brasil i_2018 0
## 4 Uruguai i_2010 1
## 5 Uruguai i_2014 9
## 6 Uruguai i_2018 1
## 7 Argentina i_2010 2
## 8 Argentina i_2014 9
## 9 Argentina i_2018 2
pivot_wider (Abrindo Uma Colunas -> Várias)
Uso Básico:
A função pivot_wider
possui dois inputs principais:
names_from
: nome da coluna com variáveis que será aberta.values_from
: nome da coluna com valores que será aberta.
# Veja os dados
tab2
## # A tibble: 4 x 4
## pais ano covid numero
## <chr> <dbl> <chr> <dbl>
## 1 Brasil 2020 Casos 10500000
## 2 Brasil 2020 Vacinas 6535363
## 3 Argentina 2020 Casos 2100000
## 4 Argentina 2020 Vacinas 1800000
# tidying
%>%
tab2 pivot_wider(names_from=covid,
values_from=numero)
## # A tibble: 2 x 4
## pais ano Casos Vacinas
## <chr> <dbl> <dbl> <dbl>
## 1 Brasil 2020 10500000 6535363
## 2 Argentina 2020 2100000 1800000
Ambas as funções pivot possuem diversos outros argumentos que são interessantes de explorar. Não cobrireremos estes argumentos em detalhes. Porém, sugiro ao alunos ler a documentação e praticar com exemplos on-line.
Separate e Unite
Para concluir, vamos aprender a usar as funções separate()
e unite()
. Ambas servem para separar ou agrupar colunas de forma bastante intuitiva. Por exemplo:
tab1
## # A tibble: 2 x 3
## pais ano presidente_vice
## <chr> <dbl> <chr>
## 1 Brasil 2020 Bolsonaro-Mourão
## 2 Argentina 2020 Fernandez-Kirchner
%>%
tab1 separate(presidente_vice, into=c("presidente", "vice"),
sep="-")
## # A tibble: 2 x 4
## pais ano presidente vice
## <chr> <dbl> <chr> <chr>
## 1 Brasil 2020 Bolsonaro Mourão
## 2 Argentina 2020 Fernandez Kirchner
Porque devo aprender isso tudo?
Como disse anteriormente, os pacotes do tidyverse usam dados organizados de forma tidy. O que significa que diversas da funções e vantagens dos pacotes tidyverse funcionarão de forma mais eficiente quando organizamos nossos dados neste formato. Outros formatos não estão errados, no entanto, ter um formato consistente para realizar análise de dados reduz consideravelmente o tempo gasto em manipulação, visualização e modelagem de dados.
Na próxima aula, entraremos em visualização de dados usando ggplot
. Com ggplot ficará bastante evidente as vantagens de manter seus dados no formato tidy
.