artigos2-23

Tidyverse: os pacotes mais usados no R

O tidyverse é uma coleção opinativa de pacotes no R. Eles são utilizados para manipulação, exploração e visualização de dados além de compartilharem uma filosofia de design comum.

Artigo escrito com a colaboração de Joziani Mota Vieira

O tidyverse é uma coleção opinativa de pacotes no R. Eles são utilizados para manipulação, exploração e visualização de dados além de compartilharem uma filosofia de design comum. Foram desenvolvidos principalmente pelo Hadley Wickham, mas agora estão sendo expandidos por vários colaboradores.

workflow de análise de dados

Pacotes

O tidyverse está sempre se atualizado e novos pacotes podem ser adicionados ou modificados. Nesse artigo vamos falar sobre alguns dos mais famosos e que usamos com mais frequência.

pacotes dentro do tidyverse

Instalando o tidyverse teremos o seguinte:

if(!require(tidyverse)){install.packages("tidyverse");require(tidyverse)}

## Loading required package: tidyverse

## -- Attaching packages ------------------------------------------------------------------------- tidyverse 1.2.1 --

## v ggplot2 3.3.1     v purrr   0.3.2
## v tibble  2.1.3     v dplyr   0.8.3
## v tidyr   1.0.0     v stringr 1.4.0
## v readr   1.3.1     v forcats 0.4.0

## -- Conflicts ---------------------------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
tidyverse_packages()

##  [1] "broom"       "cli"         "crayon"      "dplyr"       "dbplyr"     
##  [6] "forcats"     "ggplot2"     "haven"       "hms"         "httr"       
## [11] "jsonlite"    "lubridate"   "magrittr"    "modelr"      "purrr"      
## [16] "readr"       "readxl\n(>=" "reprex"      "rlang"       "rstudioapi" 
## [21] "rvest"       "stringr"     "tibble"      "tidyr"       "xml2"       
## [26] "tidyverse"

Readr

pacote readr

O readr foi desenvolvido para ser um jeito rápido e fácil de importar dados retangulares (dados estruturados, csv, tsv e fwf) das mais diferentes fontes.

Para exemplificar vamos rodar os dados de desmatamento na Amazônia por estado nos anos de 2012 a 2015.

dados <- read_csv2("dados/desmatamento_amazonia_estados_prodes_2012-2015.csv", n_max = 10)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.

## Parsed with column specification:
## cols(
##   Ano = col_character(),
##   Bioma = col_character(),
##   Categoria = col_character(),
##   Estado = col_character(),
##   `Número de registros` = col_double(),
##   Período = col_character(),
##   `Área Desmatada (Ha)` = col_double()
## )
dados
## # A tibble: 10 x 7
##    Ano    Bioma  Categoria Estado `Número de regi~ Período `Área Desmatada~
##    <chr>  <chr>  <chr>     <chr>             <dbl> <chr>              <dbl>
##  1 Até 2~ Amazô~ Desflore~ Acre                  1 31/12/~         2069693.
##  2 Até 2~ Amazô~ Desflore~ Amapá                 1 31/12/~          296397.
##  3 Até 2~ Amazô~ Desflore~ Amazo~                1 31/12/~         3504916.
##  4 Até 2~ Amazô~ Desflore~ Maran~                1 31/12/~         8005248.
##  5 Até 2~ Amazô~ Desflore~ Mato ~                1 31/12/~        18127035.
##  6 Até 2~ Amazô~ Desflore~ Pará                  1 31/12/~        25387874.
##  7 Até 2~ Amazô~ Desflore~ Rondô~                1 31/12/~         8602887.
##  8 Até 2~ Amazô~ Desflore~ Rorai~                1 31/12/~          976429.
##  9 Até 2~ Amazô~ Desflore~ Tocan~                1 31/12/~         2518520.
## 10 2013   Amazô~ Desflore~ Acre                  1 31/12/~           19961.
write_csv2(x = dados, path = "dados/desmatamento_amazonia_estados_prodes_2012-2015_v2.csv")

Leitura

O readr lê sete formatos de arquivo com essas sete funções abaixo:

read_csv() – Arquivos separados por vírgula
read_tsv() – Arquivos separados por tabulação
read_delim() – Arquivos delimitados gerais
read_fwf() – Arquivos de largura fixa
read_table() – Arquivos tabulares em que as colunas são separadas por espaço em branco.
read_log() – Arquivos de log da web

Exportação

E exporta nos seguintes formatos:

write_csv()
write_csv2()
write_delim()
write_excel_csv() – Salva de csv para Excel
write_excel_csv2()
write_tsv()

Outros arquivos

haven Lê arquivos SPSS, Stata , and SAS files.
readxl Lê arquivos excel xls e.xlsx).
DBI , em conjunto junto com um back-end específico do banco de dados (por exemplo, RMySQL , RSQLite , RPostgreSQL etc.) permite executar consultas SQL em um banco
de dados e retornar uma tabela de dados.
Googledrive importa arquivos do Google Drive
jsonlite Lê arquivos json
xml2 Lê arquivos XML
httr Lê arquivos Web APIs
rvest Lê arquivos HTML

Tibble

pacote tibble

Tibbles são data frames que forçam você a lidar com os problemas no início do projeto e desenvolver um código mais limpo e expressivo. Ele não altera o nome ou tipo das variáveis e aponta erros quando a variável não existe. Aqui rodamos um exemplo usando a base de dados Iris.

head(data.frame(iris))
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
as_tibble(iris)
## # A tibble: 150 x 5
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
##           <dbl>       <dbl>        <dbl>       <dbl> <fct>  
##  1          5.1         3.5          1.4         0.2 setosa 
##  2          4.9         3            1.4         0.2 setosa 
##  3          4.7         3.2          1.3         0.2 setosa 
##  4          4.6         3.1          1.5         0.2 setosa 
##  5          5           3.6          1.4         0.2 setosa 
##  6          5.4         3.9          1.7         0.4 setosa 
##  7          4.6         3.4          1.4         0.3 setosa 
##  8          5           3.4          1.5         0.2 setosa 
##  9          4.4         2.9          1.4         0.2 setosa 
## 10          4.9         3.1          1.5         0.1 setosa 
## # ... with 140 more rows

Forcats

pacote forcats

As principais funções do forcats servem para alterar a ordem e modificar os níveis de um fator.

fator <- factor(c("a","a","a","b","b", "c", "d", "e"))

fct_collapse(fator, b2 = c("b", "c"), a2 = c("a", "d"))
## [1] a2 a2 a2 b2 b2 b2 a2 e 
## Levels: a2 b2 e
fct_recode(fator, b2 = "b", b2 = "c", a2 = "a", a2 = "d")
## [1] a2 a2 a2 b2 b2 b2 a2 e 
## Levels: a2 b2 e
# Transforma os níveis menos frequentes de um fator em um nível “Outros”.

fct_lump(fator, 2, other_level = "Outros")
## [1] a      a      a      b      b      Outros Outros Outros
## Levels: a b Outros

Broom

pacote broom

Broom sumariza informações-chave sobre os modelos em tibbles usando três funções: tidy, glance e augment.

if(!require(broom)){install.packages("broom");require(broom)}

fit <- lm(Sepal.Width ~ Petal.Length + Petal.Width, iris)

tidy(fit)
## # A tibble: 3 x 5
##   term         estimate std.error statistic  p.value
##   <chr>           <dbl>     <dbl>     <dbl>    <dbl>
## 1 (Intercept)     3.59     0.0937     38.3  2.51e-78
## 2 Petal.Length   -0.257    0.0669     -3.84 1.80e- 4
## 3 Petal.Width     0.364    0.155       2.35 2.01e- 2

tidy produz um tibble onde cada linha contém informações sobre um componente importante do modelo. Para modelos de regressão, isso geralmente corresponde a coeficientes de regressão. Isso pode ser útil se você deseja inspecionar um modelo ou criar visualizações personalizadas.

glance(fit)
## # A tibble: 1 x 11
##   r.squared adj.r.squared sigma statistic p.value    df logLik   AIC   BIC
##       <dbl>         <dbl> <dbl>     <dbl>   <dbl> <int>  <dbl> <dbl> <dbl>
## 1     0.213         0.202 0.389      19.9 2.24e-8     3  -69.8  148.  160.
## # ... with 2 more variables: deviance <dbl>, df.residual <int>

glance devolve um tibble com exatamente uma linha de qualidade de medidas de condicionamento físico e estatísticas relacionadas. Isso é útil para verificar a especificação incorreta do modelo e comparar muitos modelos.

augment(fit, data = iris)
## # A tibble: 150 x 12
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species .fitted
##           <dbl>       <dbl>        <dbl>       <dbl> <fct>     <dbl>
##  1          5.1         3.5          1.4         0.2 setosa     3.30
##  2          4.9         3            1.4         0.2 setosa     3.30
##  3          4.7         3.2          1.3         0.2 setosa     3.33
##  4          4.6         3.1          1.5         0.2 setosa     3.27
##  5          5           3.6          1.4         0.2 setosa     3.30
##  6          5.4         3.9          1.7         0.4 setosa     3.30
##  7          4.6         3.4          1.4         0.3 setosa     3.34
##  8          5           3.4          1.5         0.2 setosa     3.27
##  9          4.4         2.9          1.4         0.2 setosa     3.30
## 10          4.9         3.1          1.5         0.1 setosa     3.24
## # ... with 140 more rows, and 6 more variables: .se.fit <dbl>,
## #   .resid <dbl>, .hat <dbl>, .sigma <dbl>, .cooksd <dbl>,
## #   .std.resid <dbl>

augment adiciona colunas a um conjunto de dados, contendo informações como valores ajustados, resíduos ou atribuições de cluster. Todas as colunas adicionadas a um conjunto de dados têm “.prefixo” para impedir que as colunas existentes sejam substituídas.

Purrr

pacote purrr

Purr contribui para a programação funcional com um consistente conjunto de ferramentas que facilitam o trabalho com vetores e funções.

name <- c("Jon Snow", "Asha Greyjoy", "Daenerys Targaryen", "Eddard Stark", "Brienne of Tarth","Melisandre",
         "Kevan Lannister", "Davos Seaworth", "Victarion Greyjoy","Sansa Stark")

# Usando imap_chr o nome (.x) e o índice do nome (.y)

imap_chr(name, ~ paste0(.y, ": ", .x))
##  [1] "1: Jon Snow"           "2: Asha Greyjoy"      
##  [3] "3: Daenerys Targaryen" "4: Eddard Stark"      
##  [5] "5: Brienne of Tarth"   "6: Melisandre"        
##  [7] "7: Kevan Lannister"    "8: Davos Seaworth"    
##  [9] "9: Victarion Greyjoy"  "10: Sansa Stark"
imap_chr(name, ~ paste0("Got : ", .x))
##  [1] "Got : Jon Snow"           "Got : Asha Greyjoy"      
##  [3] "Got : Daenerys Targaryen" "Got : Eddard Stark"      
##  [5] "Got : Brienne of Tarth"   "Got : Melisandre"        
##  [7] "Got : Kevan Lannister"    "Got : Davos Seaworth"    
##  [9] "Got : Victarion Greyjoy"  "Got : Sansa Stark"

Outras Funções

map(.x, .f, …)

map_if(.x, .p, .f, …)

map_at(.x, .at, .f, …)

map_lgl(.x, .f, …)

map_chr(.x, .f, …)

map_int(.x, .f, …)

map_dbl(.x, .f, …)

map_dfr(.x, .f, …, .id = NULL)

map_dfc(.x, .f, …)

walk(.x, .f, …)

Existem ainda muitos outros pacotes dentro do tidyverse, como o ggplot2 para visualização e criação de gráficos, o dplyr para a manipulação de dados e o tidyr para organizar a base de dados de forma coesa. Mas cada um deles é muito vasto e preferimos quebrar esse assunto em diferentes artigos.

Siga a Oper nas redes sociais! Assim você recebe notificações sobre as novas postagens. Estamos no Instagram, LinkedIn e Facebook.

Share the Post:

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Related Posts

Pesquisa Operacional

Artigo feito em colaboração com Valéria Nicéria A Pesquisa Operacional, ou PO, ganhou destaque durante a Segunda Guerra Mundial. Devido

Read More