Relatórios reprodutíveis com R

Curso de Verão IME-USP 2024

Ministrante: Beatriz Milz

Introdução ao RMarkdown

  • O que vamos aprender:

  • O que é o RMarkdown

  • Como criar um documento reprodutível com RMarkdown usando R

Ciclo da ciência de dados

Fonte: Conceito do ciclo de ciência de dados apresentado por Hadley Wickham no livro R for Data Science, ilustração por Allison Horst.

Pacote R Markdown

  • Criado e mantido pela RStudio

  • Princípio: arquivos onde escrevemos textos e marcamos com markdown, mas também podemos adicionar códigos que são executados.

  • Extensão .Rmd

  • Possibilita a utilização de códigos R, Python, Markdown, HTML, CSS, SQL, e outros em um único arquivo.

  • É um pacote em R, portanto depende do R.

Pacote R Markdown

  • A reprodutibilidade é algo importante para o R Markdown.

  • A comunidade de R, e a equipe da RStudio, desenvolveram outros pacotes que integram bem com R Markdown para gerar diversos produtos de análise de dados diferentes, com arquivos .Rmd.

Começando com o R Markdown

  • Criando um arquivo:

    • File > New File > R Markdown
  • Estrutura do arquivo:

    • YAML - metadados do documento
    • Code chunks - Campos de código (pode receber código em R, SQL, Python, entre outros)
    • Textos marcados com Markdown ou HTML
  • Transformar o .Rmd no arquivo final

    • Botão Knit, ou usando o atalho: Ctrl + Shift + K
    • Boa prática: faça isso com frequência.

Colocar em prática:

  • Dentro do projeto do RStudio criado, crie uma pasta chamada relatorio.

  • Crie um novo arquivo RMarkdown que gera um HTML, e salve ele na pasta relatorio. Dê o nome de primeiro_relatorio.Rmd.

  • O arquivo já vem com alguns conteúdos para servir de exemplo. Observe a estrutura deste arquivo! Tente imaginar o que será gerado.

  • Aperte o botão knit para gerar o resultado final. Veja o resultado: é o que você imaginou?

  • Faça pequenas alterações e aperte o botão knit novamente, para ver como ficou. Sugestões:

    • Altere o título, adicione seu nome, mude a data.
    • Escreva algo diferente no corpo do arquivo.

Markdown

  • O RMarkdown possibilita a utilização da linguagem de marcação simples Markdown. Essa linguagem de marcação foi elaborada para ser fácil de ler e fácil de escrever.

  • Confira as cheatsheets: rmarkdown Cheatsheet 2.0 e rmarkdown Cheatsheet.

  • O RStudio Visual Editor facilita o uso do Markdown no RStudio.

Colocar em prática:

  • No arquivo criado, experimente marcar os textos com Markdown.

  • Experimente o Visual Mode Editor do RStudio.

  • Adicione um link no seu relatório para a página dos cursos de extensão da USP: https://cursosextensao.usp.br/

Chunks de Código em R

  • Os chunks são campos onde podemos inserir código de R (ou Python, SQL, Bash…) em um arquivo RMarkdown.

  • Os chunks podem ter rótulos/nomes, para identificar o conteúdo gerado.

  • Existe um atalho do teclado para criar chunks no RStudio: Ctrl + ALt + I.

  • Também é possível criar um chunk clicando no seguinte botão do RStudio:

Diretório de trabalho em arquivos .Rmd

  • Quando usamos projetos do RStudio, o diretório de trabalho será a pasta principal do projeto.

  • Quando estamos trabalhando com arquivos .Rmd, por padrão o diretório de trabalho DO ARQUIVO será a pasta onde o arquivo está localizado.

  • Isso gera confusão! Atenção pois isso pode causar erros. Uma dica para escrever os caminhos de forma correta é utilizar a funcionalidade do RStudio: escreva aspas, coloque o cursor entre as pastas e aperte TAB.

  • Exemplo prático: comparar o uso de getwd() dentro e fora de um arquivo .Rmd.

  • Para acessar arquivos em pastas que estão em um “nível” anterior ao diretório de trabalho, utilize "../".

Colocar em prática:

  1. No arquivo primeiro-relatorio.Rmd, crie um chunk e faça a importação da base de dados de pinguins.
caminho <- "...." 
pinguins <- readr::read_csv(caminho)
dplyr::glimpse(pinguins)
  1. Lembre-se de se atentar aos caminhos!

  2. Aperte knit e observe o resultado. O código e o resultado deverá aparecer no relatório. Configure as opções de chunk para que apareça corretamente.

Código inline

  • É útil para adicionar resultados de código em R dentro de parágrafos.

Exemplo:

A base mtcars possui 32 carros. As colunas presentes na base são mpg, cyl, disp, hp, drat, wt, qsec, vs, am, gear, e carb.

Código Markdown:

A base mtcars possui `r nrow(mtcars)` carros.
As colunas presentes na base são 
`r knitr::combine_words(names(mtcars), and = "e ")`.

Colocar em prática:

1 ) O trecho a seguir apresenta um texto com resultados feitos com inline code. Adicione o seguinte código no seu relatório (o arquivo primeiro_relatorio.Rmd), substituindo os trechos coloridos por inline code:

A base de dados pinguins apresenta dados referente à 344 pinguins, das seguintes espécies: Pinguim-de-adélia, Pinguim-gentoo, e Pinguim-de-barbicha. Os dados foram coletados entre os anos 2007 e 2009, nas seguintes ilhas: Torgersen, Biscoe, e Dream. O peso médio dos pinguins amostrados foi de 42 kg. Os dados foram obtidos através do pacote Palmer Penguins.

Tabelas com R

  • Várias opções: knitr::kable(), DT::datatable() , reactable::reactable(), entre outras.
pinguins |>
  dplyr::count(especie, sort = TRUE) |>
  knitr::kable()
especie n
Pinguim-de-adélia 152
Pinguim-gentoo 124
Pinguim-de-barbicha 68

Colocar em prática:

  1. Adicione a seguinte tabela no seu relatório, usando a função kable():
quantidade_de_especies <- pinguins |>
  dplyr::count(especie, sort = TRUE) |>
  janitor::adorn_totals()

Ela deverá ficar assim:

Espécie Quantidade
Pinguim-de-adélia 152
Pinguim-gentoo 124
Pinguim-de-barbicha 68
Total 344

Adicionando um gráfico

  • Coloque o código usado para criar um gráfico em um chunk. Ex:
library(ggplot2)
pinguins |> 
  dplyr::count(especie) |> 
  ggplot() +
  geom_col(aes(x = n, y = especie, fill = especie), show.legend = FALSE) +
  theme_light() +
  scale_fill_viridis_d() +
  labs(x = "Quantidade de pinguins", y = "Espécies")

Colocar em prática:

  1. Adicione um gráfico no seu relatório, utilizando a base pinguins.

  2. Caso não tenha experiência com ggplot, um gráfico simples pode ser gerado com esse código:

library(ggplot2)
pinguins |> 
  ggplot() +
  geom_point(aes(x = comprimento_bico, y = profundidade_bico, color = especie)) +
  theme_light() +
  scale_color_viridis_d() +
  labs(x = "Comprimento do bico", 
       y = "Profundidade do bico")

Revisão - R Markdown

  • O pacote rmarkdown possibilita adicionar textos e códigos em um único arquivo.

  • Podemos utilizar códigos em R, Python, Markdown, HTML, CSS, SQL, e outros no RMarkdown.

  • O uso do RMarkdown depende do uso do R.

  • O arquivo RMarkdown é estruturado em: YAML (metadados), textos marcados e campos de código (chamados de chunks).

  • Markdown é uma linguagem de marcação que possibilita marcar textos. Essa linguagem é utilizada nos arquivos RMarkdown e em muitos outros lugares.