Prefácio

A história deste livro

Este livro surgiu inicialmente, como um material de apoio aos pesquisadores e alunos do Curso Introdutório de R, que foi realizado durante o primeiro semestre de 2020, na Fundação João Pinheiro3 (FJP-MG).

O projeto foi idealizado na época, por um conjunto de três pessoas. Dentre elas, estão os autores da primeira edição desta obra: Pedro Duarte Faria e João Pedro Figueira Amorim Parga. Portanto, esse material é resultado dessa experiência de ensino, onde buscamos compartilhar conhecimentos sobre essa linguagem com outras pessoas.

Eu (Pedro) como professor, aluno e economista, sou muito grato por ter compartilhado essas experiências, com meu querido colega João Pedro Figueira Amorim Parga, que me ajudou a montar a primeira edição deste livro.

Após a primeira edição desta obra, o livro continuou sendo mantido e desenvolvido por Pedro Duarte. Desde então, o livro já passou por várias revisões, buscando sempre ser refletir os padrões mais modernos da Linguagem R. O livro já foi inclusive reescrito do zero, passando por uma reformulação completa durante o ano de 2021.

Pedro Duarte Faria
26/11/2022
Belo Horizonte - MG
Brasil

Qual o objetivo deste livro?

As origens da linguagem R, remetem a um dos mais importantes laboratórios de pesquisa do mundo, a Bell Labs, localizada nos EUA. Por sua origem, a enorme maioria dos materiais de referência a respeito da linguagem, estão em inglês, incluindo as principais fontes de ajuda da linguagem, como o StackOverflow4, ou as páginas e manuais internos do CRAN R5.

Entretanto, a comunidade de R no Brasil, tem se expandido constantemente nos últimos anos. Brasileiros tem desenvolvido importantes pacotes para a linguagem, que trazem grande apoio à produção científica do país. Apenas para citar alguns desses excelentes trabalhos, estão PEREIRA et al. (2020); PETRUZALEK (2016); MCDONNELL; OLIVEIRA; GIANNOTTI (2020); SIQUEIRA (2020); BRAGA; ASSUNCAO; HIDALGO (2020).

Como resultado, bons materiais em português, de referência e apoio à linguagem tem surgido. Exemplos são: os materiais curtos montados pelo Curso R6; os trabalhos realizados pelos capítulos brasileiros do grupo R-Ladies7, como os posts do capítulo de Belo Horizonte8, e os encontros desenvolvidos pelo capítulo de São Paulo9; além de alguns materias produzidos pelo Departamento de Estatística da UFPR, como um site de apoio ao seu curso10, ou este produzido por um dos professores do departamento, o Dr. Walmes Marques Zeviani11.

Porém, mesmo com esse avanço, grande parte desses conteúdos em português geralmente caem em algum desses dois problemas: 1) carecem de profundidade, ou de detalhamento sobre o que está “ocorrendo nos bastidores”. Em outras palavras, esses materiais são muito abstratos, pois tentam abordar muita coisa em um espaço muito curto, sem dar o devido tempo a cada um dos componentes por trás da linguagem; 2) ou são especializados demais. Por exemplo, materiais que ensinam como estimar modelos específicos (ex: regressão linear sobre dados em painel), ou a trabalhar com bases de dados específicas (ex: PNAD contínua). Em outras palavras, esses materiais concedem em geral, uma visão muito restrita sobre a linguagem, e que é de difícil transposição para outros cenários e necessidades práticas.

Esses problemas emergem do próprio objetivo que esses materiais buscam cumprir. Como exemplo, os materiais escritos pelo Curso-R carregam certa abstração, pois em nenhum momento esses materiais pretendem oferecer uma revisão completa e profunda sobre o tema, mas sim, tutoriais rápidos e úteis, que lhe mostram o básico.

Tendo isso em mente, esta obra em específico, representa uma tentativa de combater esses dois problemas. Ao discutir pacotes largamente utilizados nas mais diversas aplicações, além de fornecer uma visão aprofundada sobre os fundamentos (ou a teoria) da linguagem R. Por isso, o público-alvo deste livro são os brasileiros que desejam obter uma base mais sólida e uma visão mais abrangente da linguagem, de forma que eles possam identificar mais facilmente, as possíveis soluções que o R oferece para vários problemas de seu trabalho.

Como resultado, este material é até certo ponto, prolixo em muitos assuntos aos quais são comumente tratados como simples e rápidos de se compreender (e.g. Objetos). Ao mesmo tempo, este material certamente busca ser descritivo, e não poupa detalhes em assuntos que são complexos e de difícil compreensão (e.g. Funções e Loops). Para mais, fornecemos ao longo da obra, diversos diagramas e representações visuais, que ajudam o leitor, a formar um modelo mental sobre como a linguagem R funciona. A obra também oferece exercícios ao final de cada capítulo, e suas respostas estão disponíveis na página de publicação do livro.

Vários exemplos são fornecidos em cada tópico. Alguns desses exemplos são reais e retirados diretamente de nosso dia-a-dia com a linguagem. Já uma outra parte desses exemplos, buscam evidenciar ou demonstrar problemas práticos que podem emergir de seu trabalho com a linguagem e, portanto, mostrar quais são as possíveis soluções a serem empregadas. Dessa forma, podemos construir um workflow, ou um modelo mental de trabalho com a linguagem, ao longo de diferentes tópicos importantes para a sua aplicação prática em análise de dados.

Você sempre pode encontrar uma versão atualizada desta obra, em sua página de publicação12. O livro foi criado e é até hoje desenvolvido por meio do pacote rmarkdown e do sistema LaTeX. Grande parte do conhecimento exposto aqui, está baseado em diversas referências sobre a linguagem R, em especial os trabalhos de WICKHAM (2015a); PENG (2015); WICKHAM; GROLEMUND (2017); LONG; TEETOR (2019), assim como a documentação oficial da linguagem R (TEAM, 2020a, 2020b).

Novidades desta quarta edição

Esta quarta edição traz algumas melhorias que buscam manter um dos principais objetivos deste livro, que é ser uma referência moderna, introdutória e técnica sobre a Linguagem R.

Primeiro, a seção do capítulo 4 que citava o pacote SAScii foi removida. Pois durante o desenvolvimento desta quarta edição, foi identificado que este pacote não estava funcionando corretamente em versões mais recentes do R13.

Segundo, uma nova seção foi adicionada ao capítulo 5, para introduzir o novo operador pipe do R (|>) - que está disponível desde a versão 4.1 da linguagem, além de explicar as diferenças deste novo operador com o operador pipe do pacote magrittr.

Terceiro, várias melhorias e pequenas correções foram aplicadas sobre o capítulo 8, com o objetivo de melhorar a clareza do conhecimento exposto e da organização do capítulo.

Quarto, a seção Alterando as fontes do seu gráfico no capítulo 9 foi reformulada, com o objetivo de substituir o pacote extrafont (o qual era a solução descrita em edições passadas desta obra) pelo pacote ragg, o qual se tornou uma solução mais moderna e robusta para o uso de fontes em gráficos do R.

Quinto, tivemos algumas melhorias sobre o capítulo 4, especialmente sobre a descrição de endereços absolutos e relativos, assim como a seção A função guess_encoding() como um possível guia que foi atualizada com o objetivo de acompanhar as mudanças recentes sobre a função readr::guess_encoding().

Porque aprender R? Quais são as suas vantagens?

Em resumo, uma parte crescente de nosso trabalho é realizada dentro de um computador, e a linguagem R nos permite comunicar as nossas intenções e necessidades para esse computador de maneira muito mais precisa e eficiente.

Temos dependido cada vez mais de computadores para desenvolver as nossas tarefas. Isso vale tanto para secretários, que precisam enviar e-mails, organizar agendas e reuniões; ou para engenheiros, que precisam desenhar plantas e calcular volumes de materiais; ou para analistas, que precisam construir planilhas, calcular indicadores e construir relatórios; e para várias outras categorias de profissionais.

Como um outro exemplo, praticamente a totalidade da ciência atual é desenvolvida dentro de um computador. Todo cientista precisa (em algum momento) escrever um artigo científico, e, tal atividade geralmente é feita hoje em programas como Microsoft Word, LibreOffice e Latex. Além disso, cientistas usam computadores para desenvolver experimentos nas mais diversas áreas da ciência, seja simulando cenários, ou desenvolvendo modelos computacionais que explicam a realidade que nos cerca.

Saber como se comunicar com o seu computador nunca foi tão importante como nos dias de hoje. Se você possui esse tipo de conhecimento, você é capaz de dizer ao seu computador, exatamente o que você precisa que ele faça, e, com isso, você pode deixar o trabalho duro com ele. Ou seja, você é capaz de delegar e automatizar tarefas, pois o seu computador passa a realizar esse trabalho por você. Consequentemente, você consegue realizar mais trabalho, em menos tempo.

Computadores e linguagens de programação

Computadores falam um único idioma, que é o código binário (ou machine code). Entretanto, este idioma é extremamente complicado para nós seres humanos. Por esse conflito, programadores e cientistas criaram o que chamamos de linguagens de programação. A linguagem R é uma dessas várias linguagens existentes.

Uma linguagem de programação é uma espécie de idioma intermediário, que utilizamos para criar um programa. Um programa é um conjunto de instruções que podem ser seguidas e executadas por um computador com o objetivo de desempenhar uma atividade específica.

Sendo assim, nós utilizamos uma linguagem de programação (como a linguagem R) para dizer aos nossos computadores, o que eles devem fazer, quais são os elementos envolvidos nessa atividade, com quem ou o quê o computador deve se comunicar, de onde ele deve extrair os recursos, e como ele vai combinar esses recursos e calcular o resultado que desejamos obter ao final dessa atividade.

Essa atividade pode ser qualquer coisa, desde enviar um e-mail todos os dias para a diretoria, contendo o último relatório gerado, ou, estimar um modelo com os dados mais recentes do Yahoo Finance, até reorganizar um conjunto de planilhas do Excel no formato adequado para serem inseridas em uma base de dados.

Como uma parte cada vez maior do trabalho humano está sendo realizada através de computadores, existe um conjunto crescente de atividades, problemas e desafios que você pode solucionar ao construir um programa através de uma linguagem como o R.

Como exemplo, programas como Adobe Photoshop e Figma foram desenvolvidos a partir do momento em que designers precisavam desenhar sites, materiais, artes e documentos para o mundo digital da web. Logo, antes desse período, ou, antes dessas necessidades surgirem, não existiam grandes motivos para desenharmos artes e documentos através de computadores.

Ou seja, uma necessidade surgiu, e por essa necessidade, certas pessoas utilizaram uma linguagem de programação para construir um programa que permitisse que os designers desenvolvessem o seu trabalho dentro de um computador. Como exemplo, tanto o Figma quanto o Adobe Photoshop são programas construídos a partir da linguagem C++.

Imagine por exemplo, criar um programa capaz de controlar um robô que está a milhares de quilômetros de distância. Na verdade, esse programa já existe. A NASA (agência espacial americana) possui diversos projetos focados em robótica e automação, e tem desenvolvido vários programas para controlar (à distância) os seus robôs espaciais. Você pode saber mais desses programas, ao navegar pelo site do programa de transferência tecnológica da agência14 (NASA’S TECHNOLOGY TRANSFER PROGRAM).

Velocidade e capacidade de processamento

Em resumo, linguagens como Python e R possuem um nível de abstração mínimo, que facilita muito a sua compreensão e o seu trabalho com elas. Devido a essas escolhas, essas linguagens (Python e R) não são particularmente rápidas se comparadas com outras linguagens de programação que lhe obrigam a especificar cada componente de sua análise, como as linguagens C e C++. Pois o computador tem de reservar um tempo para calcular e compilar essas especificações por você.

Porém, mesmo com essas características, essas linguagens são muito mais rápidas do que programas tradicionais como Excel, e lidam muito melhor com grandes volumes de dados. Por exemplo, se você usa o Excel em seu trabalho, você provavelmente sabe que as suas versões mais recentes são capazes de abrir arquivos com mais de 1 milhão de linhas. Mas se você já tentou, por exemplo, adicionar uma nova coluna calculada a este arquivo, você rapidamente percebeu que o Excel não foi feito para lidar eficientemente com arquivos desta magnitude.

Com linguagens como o R, você possui uma capacidade de processamento muito maior, e os seus problemas geralmente se limitam a quantidade de memória que você possui em seu computador. Se você possui memória suficiente para alocar uma tabela com mais de 1 milhão de linhas, o seu trabalho com esses dados será muito mais rápido e eficiente no R. E como os componentes de computadores tem ficado cada vez mais baratos, essa vantagem tende a aumentar com o tempo. Hoje, um cartucho de 16GB de RAM (que já é uma quantidade muito boa de memória) é muito mais barato, do que ele era a 10 anos atrás.

Reprodutibilidade: automatizando processos e reduzindo riscos

Vamos a um exemplo prático! Eu comecei a aplicar a linguagem R, quando ainda trabalhava na Diretoria de Estatística e Informações da Fundação João Pinheiro (FJP) como estagiário. A FJP é uma instituição de pesquisa ligada à Secretaria de Estado de Planejamento e Gestão de Minas Gerais, e é responsável pela produção e divulgação das principais estatísticas econômicas e demográficas do estado de Minas Gerais.

Na época, uma de minhas responsabilidades era a produção de mapas temáticos para os informativos mensais de PIB das regiões intermediárias do estado. Eu poderia fabricar esses mapas, utilizando programas especializados como o QGis. Porém, utilizar o QGis, tornava a atividade repetitiva e manual.

Para mais, cada uma das etapas do processo (importar os dados de PIB, importar os shapefiles, escolher as cores do mapa, escolher os títulos e rótulos, criar uma legenda, etc.) não eram salvas em algum lugar. Consequentemente, o mapa criado no QGis, não era reproduzível!

Essas considerações são muito importantes, pois quase sempre eu tinha que reconstruir o mapa. Seja porque o editorial sugeria o uso de novas cores, ou porque o tamanho da fonte estava pequeno, ou principalmente, porque erros podem surgir no processo! Se o mapa gerado pelo QGis possui um erro, seja por falha humana ou do computador, eu tenho que recomeçar o trabalho do zero, pois as etapas do processo não foram salvas de alguma forma.

É tendo essas preocupações em mente, que eu construí na época, um script no R (isto é, um programa), que guarda todos os comandos necessários para produzir esses mapas. Dessa maneira, não apenas cada etapa do processo é contida e salva em cada comando do R utilizado, mas eu também posso reproduzir cada uma dessas etapas (ou comandos), com muita facilidade, ao longo de vários pontos diferentes.

Isso significa, por exemplo, que eu posso criar um mapa com as mesmas especificações, para cada uma das 13 regiões intermediárias, em questão de segundos, e utilizando apenas 1 comando. Caso eu precise, também posso expandir esse programa, para gerar um mapa com as mesmas especificações, para todas as regiões intermediárias do país. Novamente, esses mapas são gerados em questão de segundos, pois computadores são extremamente rápidos em seus cálculos.

A figura abaixo, é uma representação deste script, onde delimito cada uma das etapas que o R realiza para construir esses mapas por mim. Se a nossa equipe descobre um erro no mapa, eu posso voltar ao script, e executá-lo parte por parte, e descobrir em qual delas o erro surge. Será que eu errei ao filtrar os dados? Ou o R não conseguiu gerar o gráfico corretamente? Ou será que o erro aparece antes mesmo de eu importar os dados para o R?

Um exemplo de script contendo comandos do R

Figura 0.1: Um exemplo de script contendo comandos do R

A partir do momento em que eu descubro em qual parte de meu script o erro ocorre, eu posso corrigir o erro naquele local em específico, e após me assegurar de que tudo está ok, eu posso executar todo o script novamente, e assim, o novo mapa contendo as correções aplicadas é gerado em questão de segundos. Dessa forma, eu estou automatizando as etapas repetitivas que possuo em meu trabalho, e não preciso começar do zero caso algum erro ocorra durante o processo.

Neste caso, eu posso inclusive criar alguns processos automatizados que conferem a robustez dos dados, para evitar que erros humanos gerem mais dor de cabeça do que o necessário. Por exemplo, se na minha base de dados, cada linha representa um município de Minas Gerais, eu posso criar um sistema que confere se esta base possui 853 linhas (número total de municípios no estado de Minas Gerais). Como os mapas são geralmente produzidos para cada região intermediária do estado, eu posso também, me certificar que o número de linhas (ou o número de municípios) que compõe cada região intermediária dessa base, estão corretos.

Conexões e API’s

A linguagem R possui vários pacotes e interfaces que facilitam a sua conexão com servidores e outras linguagens. Exemplos são os pacotes DBI e odbc, que são muito utilizados para a conexão de sua sessão do R, com servidores SQL (Structured Query Language). Com essa conexão, você pode puxar resultados de queries direto do servidor para a sua sessão do R.

Outro exemplo, é o pacote Rcpp que provê uma boa interface entre o R e a linguagem C++. Com este pacote, você pode misturar comandos em C++ com os seus comandos em R, com o objetivo de utilizar uma linguagem mais rápida (C++) em processos que são, por natureza, muito trabalhosos para o seu computador.

Além disso, tanto o Python quanto o R, possuem interfaces para se comunicar entre si. Isto é uma ferramenta muito poderosa! Pois você pode se aproveitar do melhor que as duas principais linguagens utilizadas em análise de dados oferecem. O R possui um arsenal estatístico melhor do que o Python, porém, ele não possui a conectividade e amplitude de aplicações que o Python oferece. No caso do R, o pacote reticulate fornece tal interface para o interpretador do Python.

Para mais, grandes esforços tem sido empregado no desenvolvimento de pacotes voltados para serviços web. Uma área que até pouco tempo, possuía pouco suporte dentro da linguagem R. Hoje, você já pode criar sites (pacote blogdown), dashboards interativos em HTML (pacote shiny), além de REST APIs (pacote plumber) com os recursos disponíveis. Também há pacotes como httr e rvest, que possibilitam a realização de atividades de web scrapping. Além dos pacotes xml2 e jsonlite, que permitem a leitura de dados em XML e JSON, respectivamente. Para esse tópico, você pode descobrir mais pacotes na seção de Web Technologies do CRAN R15.

Por último, o time da Microsoft, também tem desenvolvido interfaces em seus serviços da Azure Cloud Computing, permitindo que você utilize R em seus projetos na plataforma. Caso esteja interessado nisso, você pode consultar a página da empresa sobre este serviço16.

Comunidade

O R é uma linguagem gratuita e open source e, por isso, o seu crescimento como linguagem depende não apenas da fundação que a mantém e a atualiza (R Foundation), mas também depende de sua comunidade que está o tempo todo discutindo, inovando e abrindo novos caminhos, tudo isso de forma aberta e gratuita. Esta obra é uma contribuição a essa comunidade e um convite a você. Venha para a comunidade de R!

Portanto, a comunidade é um dos principais ativos da linguagem R (e também do Python). Grande parte dessa comunidade, está concentrada no Twitter. Mas essa comunidade também está muito presente em blogs, comentando novas soluções e recursos para a linguagem (sendo o Tidyverse blog17, Rweekly18 e ROpensci19 os principais exemplos) e, com isso, você pode se manter atualizado sobre o que a linguagem oferece. Por outro lado, parte desses blogs, possuem um foco maior em tutoriais, e representam assim, um local em que você sempre pode aprender mais sobre o R (o principal exemplo dessa categoria se trata do R-Bloggers20).

Recentemente, um novo e excelente centro de discussão foi criado pela comunidade, denominado R4DS Online Learning Community21, um nome que claramente se refere a obra de WICKHAM; GROLEMUND (2017). Esse é um ótimo local para criar conversas com membros da comunidade, e pedir por ajuda em algum problema que você esteja enfrentando.

Além disso, a comunidade de R também possui forte presença no StackOverflow22, que é comumente caracterizado como o principal canal de dúvidas e de ajuda em diversas linguagens de programação. Logo, se você não sabe como realizar um processo, ou não consegue descobrir de onde um erro está surgindo em seu script, você pode pedir por ajuda da comunidade ao postar uma pergunta, ou encontrar uma pergunta parecida com o seu problema que já foi respondida no StackOverflow.

No caso do Brasil, a principal força motriz de nossa comunidade provavelmente se encontra nos capítulos brasileiros do R-Ladies global, além do blog Curso-R. Por exemplo, temos os encontros mensais online realizados pelo capítulo de São Paulo, além dos bons tutoriais escritos pelo capítulo de Belo Horizonte. Existem também, outros capítulos no Brasil23, que também realizam alguns encontros.

Code Hero por Allison Horst

Figura 0.2: Code Hero por Allison Horst