2 Princípios

2.1 O tidyverse

O tidyverse é um pacote do R, cuja única função é carregar outros pacotes do R. O conjunto desses pacotes forma o tidyverse. É considerado um “universo” a parte do R pois todas suas ferramentas possuem formas de uso consistentes e funcionam muito bem em conjunto.

Os princípios do tidyverse seguem abaixo.

  1. Eficiência algorítmica vs eficiência de trabalho. Suposição: o tempo que o estatísco gasta pensando em como realizar uma operação é mais importante do que o tempo que o computador gasta para realizar um cálculo.
  2. Tidy data. Princípio para arrumação de base de dados que resolve 90% dos problemas reais. O objetivo em arrumação de dados é extrair e transformar uma base de dados até que ela esteja em formato tidy. Essa é uma boa prática de análise de dados que economiza muito tempo em qualquer trabalho. Uma base de dados é considerada “tidy” se
    • Cada observação é uma linha do bd.
    • Cada variável é uma coluna do bd.
    • Cada dado está numa célula do bd.
  3. Utilização do operador %>% (pipe).

    “No matter how complex and polished the individual operations are, it is often the quality of the glue that most directly determines the power of the system.”
    – Hal Abelson

  4. Aparato mnemônico. Pacotes baseados em teoria e API consistentes.
  5. Minimalidade e funções puras. Funções sem side-effects. Interagem com o mundo através de inputs e outputs. Encaixa perfeitamente com o princípio do pipe
  6. workflow para ciência de dados

2.2 RStudio

O RStudio é a melhor IDE para usar o R. O programa possui diversas vantagens e praticamente nenhuma desvantagem. Caso tenha interesse em se ambientar e entender as características do RStudio, veja essa página.

Uma importante funcionalidade do RStudio é a possibilidade de criar projetos. Uma estrutura recomendada para organização de pacotes segue abaixo.

project/
  - README.Rmd   # Descrição do pacote
  - set-up.R     # Pacotes etc
  - R/           # Código R, organizado com 0-load.R, 1-tidy.R, 2-vis.R, ...
  - data/        # Dados (estruturados ou não)
  - figures/     # gráficos (pode ficar dentro de output/)
  - output/      # Relatórios em .Rmd, .tex etc
  - project.Rproj

Outra possível forma de estruturar um projeto é organizando-o como um pacote do R:

project/
  - README.md    # Descrição do pacote
  - DESCRIPTION  # Metadados estruturados do pacote e dependências
  - NAMESPACE    # importações e exportações do pacote
  - vignettes/   # Relatórios em .Rmd
  - R/           # Funções do R
  - data/        # Dados estruturados (tidy data)
  - data-raw/    # Dados não estruturados e arqs 0-load.R, 1-tidy.R, 2-vis.R, ...
  - project.Rproj

Para detalhes de como criar pacotes no R de forma eficiente, leia o r-pkgs. Recomendo a adoção de um critério consistente para organização de projetos. O estatístico não pode perder tempo com a estruturação das pastas, então é melhor forçar uma estrutura pré-fixada do que planejar a melhor forma de organização para cada projeto.

2.3 RMarkdown

O RMarkdown é um tipo de documento especial que contém tanto textos (em markdown) quanto códigos em R (em chunks). O markdown nada mais é do que um documento de texto com alguns padrões básicos de formatação, como negrito, itálico, títulos, subtítulos, itemização e referências cruzadas. Já os chunks são pedaços de códigos em R encapsulados por três crases “```”. Os códigos são executados sempre que o documento é processado para algum formato específico.

A utilização do RMarkdown para produção de relatórios é essencial para o estatístico pragmático. O RMarkdown possui diversas vantagens:

  1. Simplicidade e foco. Obriga o usuário a focar na análise e não na formatação do documento.
  2. Versátil. Pode ser utilizado para gerar documentos em LaTeX, Word, HTML e apresentações em beamer, pptx e HTML (de vários tipos). Pode ainda gerar sites, livros, dissertações de mestrado e até mesmo dashboards interativos.
  3. Reprodutível. O RMarkdown nada mais é que um arquivo de texto. Além disso, ele tenta te obrigar a fazer o documento mais autocontido possível. Assim, um documento .Rmd é fácil de compartilhar e de ser utilizado pelo receptor. Lembre-se, o receptor pode ser o futuro você! Vale enfatizar que a reprodutibilidade é considerada como um dos princípios fundamentais para a ciência. Então só de usar RMarkdown, você já está colaborando com a ciência :)
  4. Eficiente. É possível configurar e criar templates de análises para quaisquer tipos de aplicações e clientes.

Para detalhes sobre como utilizar o RMarkdown, leia aqui e aqui.

2.4 GitHub

O GitHub é uma plataforma online para compartilhar códigos. Projetos do GitHub são baseados no git, uma ferramenta de versionamento de software.

Utilizar o GitHub é uma boa prática de organizar projetos pois é uma forma de manter os códigos organizados e atualizados na web, sem o perigo de perder tudo acidentalmente. Esse site também é essencial para projetos colaborativos, pois aumenta a produtividade e permite que pessoas de todo lugar ajudem nos projetos. O tidyverse só é o que é hoje por conta do social coding.

Para detalhes, faça o data science toolbox.

2.5 Pipe

O operador pipe foi uma das grandes revoluções recentes do R, tornando a leitura de códigos mais lógica, fácil e compreensível. Este operador foi introduzido por Stefan Milton Bache no pacote magrittr e já existem diversos pacotes construidos para facilitar a sua utilização.

Basicamente, o operador %>% usa o resultado do seu lado esquerdo como primeiro argumento da função do lado direito. Só isso!

Para usar o operador %>%, primeiramente instale o pacote magrittr.

install.packages("magrittr")

e carregá-lo com a função library()

library(magrittr)

Feito isso, vamos testar o operador calculando a raiz quadrada da soma de alguns números.

x <- c(1, 2, 3, 4)
x %>% sum %>% sqrt
## [1] 3.162278

O caminho que o código acima seguiu foi enviar o objeto x como argumento da função sum() e, em seguida, enviar a saida da expressão sum(x) como argumento da função sqrt(). Observe que não é necessário colocar os parênteses após o nome das funções.

Se escrevermos esse cálculo na forma usual, temos o seguinte código:

sqrt(sum(x))
## [1] 3.162278

A princípio, a utilização do %>% não parece trazer grandes vantagens, pois a expressão sqrt(sum(x)) é facilmente compreendida. No entanto, se tivermos um grande número de funções aninhadas, a utilização do pipe transforma um código confuso e difícil de ser lido em algo simples e intuitivo. Como exemplo, imagine que você precise escrever uma receita de um bolo usando o R, e cada passo da receita é uma função:

esfrie(asse(coloque(bata(acrescente(recipiente(rep("farinha", 2), "água", "fermento", "leite", "óleo"), "farinha", até = "macio"), duração = "3min"), lugar = "forma", tipo = "grande", untada = T), duração = "50min"), "geladeira", "20min")

Tente entender o que é preciso fazer. Nada fácil, correto? Agora escrevemos usando o operador %>%:

recipiente(rep("farinha", 2), "água", "fermento", "leite", "óleo") %>%
  acrescente("farinha", até = "macio") %>%
  bata(duração = "3min") %>%
  coloque(lugar = "forma", tipo = "grande", untada = T) %>%
  asse(duração = "50min") %>%
  esfrie("geladeira", "20min")

Agora o código realmente parece uma receita de bolo.

Para mais informações sobre o pipe e exemplos de utilização, visite a página Ceci n’est pas un pipe.