Tutorial R – Organizando dados com Dplyr e Tidyr

R – Organizando bases de dados com Dplyr e Tidyr

Para aqueles que camelaram por muitos anos para trabalhar com dados no Excel, migrar para o R é certamente um choque e nós vamos falar muito sobre esse assunto ao longo dos textos publicados nesse blog.

Por enquanto, como é que trataríamos o problema proposto pelos posts anteriores no R?

https://dadosdadosdados.wordpress.com/2015/06/19/organizando-os-dados/

Como calcular a soma do volume de AAA e BBB com tag YYY em Fevereiro?

As bibliotecas Dplyr e Tidyr

Quase sempre que trabalhamos com algum dado no R vamos utilizar alguma função dessas duas bibliotecas. Ambas foram desenvolvidas para facilitar o trabalho com dados e transforma-lo em um problema 'gramatical', ou seja, trabalhar com dados envolve uma sequência de verbos que são aplicados em cima dos mesmos de forma a chegarmos no resultado esperado.

Funciona mais ou menos da seguinte maneira:

  • De posse dos DADOS ORIGINAIS, ORGANIZE as colunas de DATA (isso nos dá a base 'long')

  • AGRUPE por PRODUTO e TAG1, FILTRE DATAs que sejam FEVEREIRO e TAG1 que seja YYY e por fim faça um RESUMO com a média dos valores

Formular o problema é fácil, agora precisamos transformar essas intenções em código R.

  • DADOS ORIGINAIS é o objeto R onde você carregou seus dados
  • ORGANIZAR = gather()
  • AGRUPAR = group_by()
  • RESUMIR = summarise()
  • FILTRAR = Filter()
  • Pontos e vírgulas = %>%

De uma forma bem resumida, só precisamos encadear vários verbos com o 'Pipe operator' (%>%) que vai juntando os pedaços de código em algo legível e fácil de ser escrito pelo analista.

Passo a passo

Carregando as bibliotecas e a base original

library(dplyr)
library(tidyr)

Digamos que temos um arquivo .csv com os dados abaixo, utilizamos o comando read.table(header = TRUE, text=Dados, sep=“;”), onde header=TRUE faz com que a primeira linha dos dados originais seja o nome das colunas e sep=“;” é o tipo de separador usado. Geralmente, arquivos aqui no Brasil usam utilizam ponto e vírgula ';' como separador.

Dados <-
"PRODUTO;TAG1;TAMANHO;Jan/2015;Fev/2015;Mar/2015
AAA;YYY;1000;10;11;12
AAA;III;500;12;14;15
AAA;YYY;100;8;6;7
BBB;III;1000;5;4;3
BBB;YYY;500;10;11;12
BBB;III;100;6;6;7"

Originais <- read.table(header = TRUE, text=Dados, sep=";") 

A partir de agora temos um objeto chamado 'Originais' que é um 'data.frame'. Note que (e isso é de extrema importância) o R possui diversos tipos de objetos. vetores, matrizes, tabelas, data.frames, listas e etc cada um tem sua função e utilização esperada.

Para usar o Dplyr e o Tidyr temos que alimentar as funções com data.frames, então está tudo certo por enquanto.

Organizando os dados

Aqui uma das grandes vantagens de se trabalhar com o R, com alguns comandos podemos organizar dados bagunçados para começar nossa análise.

O que vamos fazer aqui é mais ou menos isso:

Criar um objeto 'Organizados' que é igual ao resultado da seguinte operação:
– De posse dos DADOS ORIGINAIS, ORGANIZE as colunas 4 a 6, o nome das colunas vai virar uma variável chamada DATA e os valores vão virar uma coluna chamada VAL

Organizados <- Originais %>% gather("DATA","VAL",4:6)
head(Organizados)
##   PRODUTO TAG1 TAMANHO     DATA VAL
## 1     AAA  YYY    1000 Jan.2015  10
## 2     AAA  III     500 Jan.2015  12
## 3     AAA  YYY     100 Jan.2015   8
## 4     BBB  III    1000 Jan.2015   5
## 5     BBB  YYY     500 Jan.2015  10
## 6     BBB  III     100 Jan.2015   6

Agora que os dados estão Organizados – Variáveis nas colunas, Observações nas linhas podemos começar os cálculos.

Cálculos

Primeiro vamos mostrar todo o comando, depois explicamos por partes, assim dá para ver que é bem simples

        Organizados %>%
        group_by(PRODUTO, TAG1) %>%
        filter(DATA=="Fev.2015", TAG1=="YYY") %>%
        summarise(soma=sum(VAL))
## Source: local data frame [2 x 3]
## Groups: PRODUTO
## 
##   PRODUTO TAG1 soma
## 1     AAA  YYY   17
## 2     BBB  YYY   11

Depois de organizarmos os dados, 04 linhas de código resolvem nosso problema.

Passo a passo

  1. CARREGUE os dados organizados E;
    'Organizados %>%'

  2. AGRUPE por produto e tag1 E;
    'group_by(PRODUTO, TAG1) %>%'

  3. FILTRE DATA igual a 'Fev.2015' e TAG1 igual a 'YYY' E;
    'filter(DATA==“Fev.2015”, TAG1==“YYY”) %>%'

  4. RESUMA tudo em uma variável chamada 'soma' que é a soma de VAL
    'summarise(soma=sum(VAL))'

Trabalhar com dados de forma organizada e consistente torna o processo muito mais fácil e rápido, e esse é um dos temas que vamos explorar neste blog…

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s