Os passos da análise de dados

Projetos com o R
Módulo R1 - INFOSOC - UEL

Ronaldo Baltar, Cláudia Siqueira Baltar

2021

Organizando tudo em um projeto

Normalmente o fluxo de trabalho com R envolve a depuração e seleção dos dados, a aplicação dos modelos e a análise dos resultados, que podem ser em formato de gráficos, tabelas ou um conjunto de valores correspondentes aos parâmetros verificados. Essa sequência de procedimentos é realizada repetidamente, com ajustes, correções ou mudança de alguns valores para testar as possibilidades do estudo.

Ao contrário de que muitos imaginam, analisar dados é uma tarefa reflexiva. Dificilmente os resultados conclusivos surgem em uma única análise. Por isso, quem se propõe a fazer um estudo sério, deve buscar explorar caminhos e se questionar sobre os resultados antes da disseminação final. Na grande maioria das vezes, uma pesquisa é repleta de idas e vindas, com várias revisões dos modelos adotados e diferentes visualizações dos resultados, até que as conclusões se tornem sólidas o suficiente para a divulgação.

Criar e gerenciar projetos

Para organizar todo o material e o fluxo da pesquisa, o RStudio apresenta um recurso chamado de “projetos.” Essa ferramenta foi pensada para auxiliar os desenvolvedores na criação de bibliotecas em R. Mas é simples e bastante útil para qualquer tipo de projeto.

Quando se cria um novo projeto, conforme a Figura 1, o RStudio cria um arquivo com a extensão .Rproje o coloca no diretório raiz do projeto. Esse arquivo contém as informações e preferências do projeto.

Fig. 1 - Criar um novo projeto no RStudio

Um novo projeto começa com uma nova seção do R. O projeto pode ser vinculado ao GitHub1 ou outro sistema de controle de versões para acompanhamento das alterações realizadas nos códigos, recurso útil principalmente para trabalhos em grupo.

Tendo sido criado um novo projeto, é recomendável definir uma estrutura o diretório de arquivos. Sem uma clara organização desde o início, em pouco tempo as pastas se tornam amontoados de documentos irrecuperáveis. Achar um arquivo específico em um diretório desorganizado é uma tarefa quase impossível. Ter uma informação que não se pode recuperar é o mesmo que não tê-la.

Qualquer critério de organização será sempre uma escolha que melhor se adeque à rotina de quem está fazendo o trabalho. Mas, não pode ser algo tão pessoal que se torne um empecilho para que outros possam ter acesso ao conteúdo armazenado. Manter uma estrutura lógica que possa ser intuitivamente compreensível é importante até porque a organização do diretório de arquivos ajuda a reprodutibilidade da pesquisa.

Seguindo essa linha, a experiência nos mostra que organizar as pastas de arquivos na sequência da pesquisa é a melhor prática, conforme se pode observar na Figura 2:

Fig. 2 - Exemplo de estrutura de diretório em um projeto

O primeiro diretório criado no projeto deve ser reservado para os textos com as anotações e apontamentos, tanto aquelas notas iniciais, quanto as ideias que surgirem ao longo da pesquisa. Essas informações serão úteis para estimular a reflexão e também para pesquisas futuras.

Em seguida, pode-se inserir uma pasta que conterá a relação bibliográfica que será usada como referência no projeto. Um arquivo no formato bibtex é a forma mais eficiente de tratamento bibliográfico no R. As referências podem ser organizadas com gerenciadores bibliográficos como Zotero ou Mendeley e importadas automaticamente para os documentos Rmardown ou knitr gerados no R. Para acompanhar o uso do Zotero, exite uma biblioteca em R, criada por Frederik Aust , chamada de citr. Funciona como um complemento adicional ao RStudio (Add-in). Faz uma ligação entre o Zotero e o RStudio para ajudar a pesquisar, atualizar, importar e manter organizada a bibliografia e as citações ao longo do texto.

Seguindo o fluxo de trabalho da pesquisa, a terceira pasta seria utilizada para armazenar as fontes de dados. Geralmente nessa pasta ficam os dados (ou referências de acesso aos dados) que serão importados para o R, tais como os arquivos com extensão .csv (arquivo de dados em formato texto), xlsx (Excel), .spv (SPSS) entre outros. É importante separar os arquivos fontes, dos arquivos de dados reorganizados e preparados para análises. Pensando-se na reprodutibilidade do trabalho, ficará mais fácil para outras equipes acompanharem as mudanças e possíveis erros no tratamento de dados, se puderem ter acesso diretamente às fontes utilizadas. Também, em caso de necessidade de revisão dos resultados durante a pesquisa, não haverá confusão entre as informações originais e àquelas que foram depuradas ou reordenadas de acordo com os objetivos do trabalho.

Após a pasta que contém as fontes de dados, deve-se criar o diretório em que ficarão propriamente os scripts do R. Pode haver duas subpastas, uma para os dados trabalhados pelos scripts e outra para as figuras geradas pelas análises. Será mais ágil se esses arquivos de entrada e saída estiverem abaixo do diretório onde estão os scripts.

Por fim, pode se estabelecer uma pasta para o resultado final do trabalho, tal como um relatório ou artigo. Geralmente nesse diretório haverá um ou mais documentos dinâmicos (Rmarkdown ou RNotebook), consolidando as análises e conclusões alcançadas na pesquisa, mas já formatada para ser acessada pelo público de interesse, como relatório, artigo, livro impresso, e-book ou página da Web em HTML, pdf, latex, ou aplicativo interativo no formato Shiny2.

Os passos da análise de dados

Normalmente o fluxo de trabalho com R envolve a depuração e seleção dos dados, a aplicação dos modelos e a análise dos resultados, que podem ser em formato de gráficos, tabelas ou um conjunto de valores correspondentes aos parâmetros verificados. Essa sequência de procedimentos é realizada repetidamente, com ajustes, correções ou mudança de alguns valores para testar as possibilidades do estudo. 

Ao contrário de que muitos imaginam, analisar dados é uma tarefa reflexiva. Dificilmente os resultados conclusivos surgem em uma única análise. Por isso, quem se propõe a fazer um estudo sério, deve buscar explorar caminhos e se questionar sobre os resultados antes da disseminação final. Na grande maioria das vezes, uma pesquisa é repleta de idas e vindas, com várias revisões dos modelos adotados e diferentes visualizações dos resultados, até que as conclusões se tornem sólidas o suficiente para a divulgação. 

Um processo de análise de dados quase sempre segue as seguintes etapas:

1º) fazer as configurações necessárias no software, com a inicialização e ajuste do ambiente que irá rodar os dados;

2º) abrir e selecionar os dados, o que normalmente requer a importação, conversão, correção, tratamento, agrupamento, seleção de variáveis e filtragem de casos;

3º) proceder uma análise para responder alguma pergunta ou fazer alguma predição;

4º) disseminar os resultados e dispor o material analisado para replicação, comparação e aprofundamento dos estudos.

Um script para o Titanic

Vamos criar um script que gera um gráfico sobre os passageiros do RMS Titanic, que era considerado o maior e mais seguro transatlântico construído até então. O Titanic afundou em sua primeira viagem, em abril de 1912. Levava a bordo 2.206 pessoas, sendo 1.318 passageiros e 898 tripulantes. Na noite de 14 de abril, o Titanic bateu em um iceberg e afundou algumas horas depois, já na madrugada do dia 15. Sobreviveram 703 pessoas, sendo 493 passageiros e 210 membros da tripulação.

Fig. 3 - O Titanic naufragou em 1912 com 2.206 pessoas a bordo, 703 sobreviveram.

A base de dados sobre as pessoas que estavam no Titanic tem sido bastante usada como treinamento e aprendizagem de recursos computacionais para inteligência artificial e aprendizagem de máquina (machine learning)3. Existem mais de 15 pacotes no R que trazem os dados do Titanic como exemplo. Vamos usar os dados titanic_test, incluídos no pacote {titanic}4, que trazem uma amostra dos registros oficinais com informações sobre os falecidos e sobreviventes por sexo, idade, classe em que estava no navio (1ª, 2ª ou 3ª classe), além de outras informações5.

Vamos escrever o Script 1 seguindo a sequência de quatro etapas.

#Script 1 - Análise dos dados do Titanic
# 1º passo: carregar pacotes ................. 
library(tidyverse) 
library(colorspace) 
# 2º Passo: Abrir a base de dados ................ 
#   Base: titanic 
#   Nota: dados dos passareiros, sem a tripulação 
tb_titanic <- read_csv("http://www.populacoes.info/df/titanic.csv") 
# 3º passo: Modificar os dados ................... 
tb_titanic %<>%       
 mutate(Sex = as.factor(recode(Sex, 
        female = 'feminino', 
        male   = 'masculino'))) %>% 
 mutate(Pclass = as.factor(recode(Pclass,   
        `1` = '1ª classe',  
        `2` = '2ª classe', 
        `3` = '3ª classe'))) %>% 
 mutate(Survived = as.factor(recode(Survived, 
        `0` = 'faleceram', 
        `1` = 'sobreviveram'))) %>% 
 rename(Sexo = Sex) %>% 
 rename(Classe = Pclass) %>%  
 rename(Sobreviventes = Survived) 
# 4º passo: Análise exploratória visual ...........   
# Diferença total de sobreviventes por classe  
spineplot(Sobreviventes ~ Classe, 
          data = tb_titanic, 
          main = 
          "Registros de naufrágio do Navio Titanic, 1912:
          passageiros sobreviventes por classe de embarque", 
          col = qualitative_hcl(2, palette = "Harmonic")
          ) 

No Script 1, no primeiro passo (linhas 3 e 4) são incluídos os pacotes necessários para a análise dos dados sobre o naufrágio do Titanic:

  • {tidyverse}6, que na verdade é um conjunto (ou ecossistema) de outros pacotes para facilitar a manipulação dos dados com o R; e

  • {colorspace} para gerar cores para os gráficos dentro de padrões já testados de usabilidade.

O segundo passo, linha 8, consiste na inserção dos dados7 sobre o Titanic. No terceiro passo, linhas 10 a 23, são feitas algumas modificações8 nas legendas da base de dados, traduzindo a informações que estavam originalmente em inglês para o português. No quarto e último passo, linha 26, é gerado o gráfico que se parece com um gráfico de barras, chamado de spine plot9.

No gráfico, que aparece como resultado do Script 1, é possível ver que o número de sobreviventes é bem menor na terceira classe em comparação com a primeira e a segunda classe. A quantidade de pessoas na terceira classe é maior do que na primeira, como se pode observar pela largura do retângulo que representa os dados.

Essa sequência será utilizada daqui em diante em quase todos os exercícios:

1º) Carregar os pacotes necessários
2º) Importar os dados
3º) Organizar, modificar e selecionar os dados
4º) Analisar os dados e gerar algum resultado em formato de gráficos ou tabelas.


  1. Git é um sistema de controle de versões de arquivos, criado por Linus Torvalds, o desenvolvedor do sistema operacional Linux. Quando várias pessoas estão escrevendo um programa de forma colaborativa, é importante ter-se o registro das alterações realizadas. Torvalds criou o Git para facilitar e aprimorar o trabalho de desenvolvimento do Linux, com muita gente trabalhando no código fonte ao mesmo tempo e em várias partes do mundo. O GitHub é um repositório criado para o uso do Git, que rapidamente ganhou popularidade por oferecer vários serviços gratuitos. Por agora, vamos criar os projetos no RStudio sem a preocupação com controle de versão. Vamos tratar do GitHub na etapa sobre reprodutibilidade da pesquisa. Mas, se quiser já conhecer mais e ver uma introdução sobre como usar o GitHub com o RStudio, confira a apresentação de Beatriz Milz, Primeiros passos utilizando o Git e GitHub no RStudio.↩︎

  2. Veremos mais sobre a formatação e esses diferentes tips documentos que podem ser criados com o RStudio na etapa sobre disseminação dos resultados.↩︎

  3. Aprenderemos sobre o uso machine learning em módulos futuros do Programa de Formação Complementar de Graduação em Ciência Social Computacional - Infosoc. Nesse módulo R1, vamos nos concentrar em recursos básicos de utilização do R e RStudio para análise de dados. Mas, se você quiser já saber o que é inteligência artificial e aprendizagem de máquina, assista ao vídeo Mix - Programação Dinâmica de Kizzy Terra. Os exemplos utilizados no canal estão em Python, não em R. Mas as definições e explicações ajudam a ter uma boa compreensão sobre esses conceitos.↩︎

  4. Esses dados são utilizado para os desafios para iniciantes em aprendizagem de máquina (machine learning), na plataforma de competições de ciências dos dados Kaggle. O conteúdo disponível na plataforma Kaggle está em inglês. Se você quiser já começar a aprender machine learning, além do canal Mix - Programação Dinâmica, citado anteriormente, você pode acompanhar o conteúdo organizado por Italo José, disponível em https://github.com/italojs/awesome-machine-learning-portugues. Esse material contém textos e vídeos em português, com exemplos na linguagem de programação em Python outros em R. Mas, independente da linguagem de programação, trata-se de um material acessível para ajudar na compreensão e aplicação dos conceitos básico de aprendizagem de máquina em português.↩︎

  5. Para conhecer mais sobre como foi feita a compilação e os usos dos dados sobre o Titanic, leia o texto 100+ Years of Graphs of the Titanic Data, de Michael Friendly, Juergen Symanzik e Ortac Onder, publicado na Internet em 2013.↩︎

  6. Podemos fazer uma analogia do R com uma linguagem de programação com vários “dialetos.” O R base é estendido com vários pacotes, cada qual possui formas próprias de se executar alguns procedimentos. Entre esses “dialetos,” vamos utilizar com frequência nesse módulo o {tidyverse} (lê-se táid-vers), que é um conjunto de pacotes, desenvolvidos pelo estatístico Hadley Wickham (cientista hefe da equipe do RStudio), que tem por característica, entre outras, favorecer a programação funcional, a construção de gráficos com o método de camadas, e o uso de palavras (filter, select, mutate, recode) no lugar de símbolos ( [ [[ $) para a execução das funções de extração e manipulação de dados no R. Com o uso do “dialeto” {tidyverse} os scripts se tornam mais facilmente compreensíveis. O uso do R base torna mais rápida a digitação no console interpretativo. Ou seja, para documentar o código escrito, o dialeto {tidyverse} é mais indicado. Para usar o R de forma mais interativa, digita-se menos com o uso do R base. Em módulos mais avançados do Programa de Formação de Graduação em Ciência Social Computacional, aprenderemos outro “dialeto,” baseado no pacote {data.table}, criado originalmente por Matt Dowle, que traz eficiente e rapidez para a manipulação de grandes quantidades de dados no R.↩︎

  7. Os dados estão em formato csv (comma separated values ou valores separados por vírgulas), por isso, utiliza-se a função read_csv(). Para saber mais sobre os arquivos csv leia: Leitura de dados csv no R | Estatística é com R! (uff.br)

    .↩︎

  8. Veremos em detalhes na próxima etapa as funções de manipulação de bases de dados com {tidyverse} e R base. Para uma primeira noção sobre os recursos do {tidyverse}, sugiro a leitura de Introdução ao dplyr | Dados Aleatórios (dadosaleatorios.com.br).↩︎

  9. Um Spine plot é um tipo de gráfico de mosaico. Um gráfico mosaico é um gráfico de barras que tem como característica que tanto o eixo \(x\), quanto o o eixo \(y\) variam proporcionalmente ao total de cada coluna. Em um gráfico de barras comum, apenas um eixo varia: o eixo \(y\), ou seja a altura, em um gráfico vertical; ou eixo \(x\), a largura em um gráfico com barras horizontais. Em um gráfico mosaico os dois eixos variam. Um gráfico Spine plot é um mosaico com duas variáveis, no qual as categorias de um dos eixos são dispostas empilhadas. Esses tipo de gráfico é bem antigo. Do que se tem registro, foi utilizado pela primeira vez por Fancis Amasa Walker, no “Statistical Atlas of the United States Based on the Results of the Ninth Census 1870,” p. PI XX, Census Office: New York, NY. Acessível na biblioteca digital do museu Smithsonian.↩︎