Introdução à Ciência de Dados

Mestrado Profissional em Administração

Prof. Washington Santos da Silva

IFMG - Campus Formiga

8 de maio de 2025

Diário de Bordo

O que vimos até aqui?

  • Aula 1 ✅

    • Apresentação da Disciplina ✅
    • Introdução e Contextualização ✅
    • O que é Ciência de Dados? ✅
    • Pesquisa Reproduzível e Ciência de Dados ✅
    • Papéis Profissionais ✅
    • Aplicações ✅
    • Habilidades Interpessoais e Analíticas ✅
    • Apresentação da Disciplina ✅
    • Configurações: Git/GitHub ✅
  • Aula 2 ✅

    • Metodologia CRISP-DM ✅
    • Tipos de Análise de Dados ✅
    • Introdução ao RStudio e criação do seu Projeto da Disciplina ✅
    • Introdução ao Sistema de Publicação Quarto ✅
    • Introdução ao Git e GitHub: controle de versão e criação do seu repositório no GitHub ✅
  • Aula 3 ✅

    • Breve Revisão sobre o RStudio ✅
    • Sistema de Publicação Quarto: (Cont.) ✅
    • Introdução ao Git e GitHub: (Cont.) ✅
    • Sessão Prática: Fluxo de trabalho integrando RStudio/Quarto/R/Git/GitHub ✅
  • Aula 4 ✅

    • Conceitos de Variáveis e Observações em Estatística ✅

    • Conceito de Dados Organizados (Tidy Data) ✅

    • Tipos atômicos e classes principais de dados da linguagem R ✅

    • Tipos de Dados Tradicionais em Finanças: ✅

      • Dados em Secção-Cruzada (ou Transversal) (Cross-Section Data) ✅
      • Dados em Secções-Cruzadas Combinadas (Pooled Cross-Section Data) ✅
      • Dados em Séries Temporais (Time Series Data) ✅
      • Dados em Painel (ou Longitudinais) (Panel Data) ✅
    • Importação e Preparação de Dados Típicos de Finanças com exemplos práticos ✅

Nesta Aula

Tópicos

  • Metodologia CRISP-DM: Fases 2 e 3
  • Revisão sobre Dados Organizados (Tidy Data)
  • Introdução ao Pacote tidyr: função pivot_longer()
  • Introdução ao Pacote dplyr: funções select() e filter()

Diretrizes para Aulas Mais Produtivas

⌨️ Código com método:

95% dos erros são evitáveis com:

  • Atenção na digitação
  • Respeitar a sequência lógica de etapas
  • Revisão antes de pedir ajuda

🤝 Inteligência colaborativa:

  • Compartilhe conhecimento
  • Resolva questões técnicas simples com colegas próximos
  • Reserve ao professor as dúvidas conceituais complexas

💪 Capacidade de Resolver Problemas

Cada erro resolvido é uma evolução da sua habilidade analítica

Metodologia CRISP-DM: Fases 2 e 3

CRISP-DM - Fases 2 e 3

Figura 1: Fase 2 (Compreensão dos Dados) e Fase 3 (Preparação dos dados) consomem entre 60-80% do tempo de um projeto de análise ou ciência de dados

Metapacote tidyverse

Descrição

  • O tidyverse é um ecossistema coerente de pacotes R para ciência de dados que compartilham uma filosofia de design e gramática comuns.

  • Desenvolvido por Hadley Wickham e mantido pela Posit, o tidyverse facilita todo o fluxo de trabalho de análise de dados através de pacotes integrados.

Alguns dos Principais Pacotes do tidyverse:

  • readr/readxl: Importação eficiente de dados retangulares

  • tidyr: Estruturação de dados no formato “tidy” (pivot_longer, pivot_wider)

  • dplyr: Manipulação de dados com verbos intuitivos (filter, select, mutate)

  • ggplot2/gt: Visualização de dados baseada na gramática dos gráficos

  • O tidyverse implementa o princípio de “tidy data”, criando um fluxo de trabalho coeso através do operador pipe (%>% ou |>).

CRISP-DM e tidyverse

Figura 2: Os pacotes do tidyverse implementam cada fase de CRISP-DM, transformando princípios metodológicos abstratos em ferramentas computacionais que agilizam o processo científico de análise de dados

Revisão sobre Dados Organizados (Tidy Data)

Dados Organizados

Conceito de Dados Organizados (Tidy Data)

  • O conceito de Tidy Data (Dados Organizados) foi formalizado por Hadley Wickham.

  • Um arquivo de dados organizado possui a seguinte estrutura:

    • Cada linha representa uma observação individual
    • Cada coluna representa uma variável específica
    • Cada célula contém um valor de uma variável para uma observação específica
  • A Figura 1 ilustra o conceito de dados organizados visualmente.

Figura 3: Dados Organizados

Dados Organizados

Benefícios de Dados Organizados

  • Adequação para Ferramentas: Formato de armazenamento de dados adequado para análise em linguagens (R/Python) e softwares de análise de dados.

  • Consistência: Estrutura uniforme para todos os conjuntos de dados

  • Facilidade para operações comuns:

    • Filtragem de observações
    • Seleção de variáveis
    • Criação de novas variáveis
    • Agregação de dados
    • Junção de múltiplas tabelas

Dados Desorganizados

Dados Financeiros Desorganizados Típicos

Colunas contendo valores: Nomes de colunas contendo valores de uma ou mais variáveis.

  • Ex: Colunas nomeadas com anos (2020, 2021, 2022)
| Empresa   | 2020    | 2021    | 2022    |
|-----------|---------|---------|---------|
| Empresa A | 350.000 | 425.000 | 510.000 |
| Empresa B | 780.000 | 815.000 | 840.000 |
| Empresa C | 540.000 | 490.000 | 620.000 |

Dados Organizados

Versão Organizada dos Dados Anteriores:

| Empresa   | Ano  | Valor   |
|-----------|------|---------|
| Empresa A | 2020 | 350.000 |
| Empresa A | 2021 | 425.000 |
| Empresa A | 2022 | 510.000 |
| Empresa B | 2020 | 780.000 |
| Empresa B | 2021 | 815.000 |
| Empresa B | 2022 | 840.000 |
| Empresa C | 2020 | 540.000 |
| Empresa C | 2021 | 490.000 |
| Empresa C | 2022 | 620.000 |

Características:

  • Cada variável está em uma coluna separada
  • Cada observação está em uma linha
  • Cada célula contém um valor único

Dados Desorganizados

Tipos de “Desorganização” Comuns em Administração

Múltiplas variáveis em uma coluna: Uma coluna contendo mais de uma variável

  • Ex: “Nome_Empresa (Ano)” combinando empresa e ano
| Nome_Empresa (Ano) | Receita       | Despesa       |
|--------------------|---------------|---------------|
| Empresa A (2020)   | R$ 350.000,00 | R$ 290.000,00 |
| Empresa A (2021)   | R$ 425.000,00 | R$ 320.000,00 |
| Empresa B (2020)   | R$ 780.000,00 | R$ 710.000,00 |
| Empresa B (2021)   | R$ 815.000,00 | R$ 735.000,00 |
  • Não se deve usar unidades (R$ no caso) em arquivos para armazenamento de dados para análise.

Dados Organizados

Versão Organizada dos Dados:

| Empresa    | Ano  | Receita  | Despesa  |
|------------|------|----------|----------|
| Empresa A  | 2020 | 350000   | 290000   |
| Empresa A  | 2021 | 425000   | 320000   |
| Empresa B  | 2020 | 780000   | 710000   |
| Empresa B  | 2021 | 815000   | 735000   |

Dados Desorganizados

Múltiplas variáveis em uma coluna:

  • Os números referem-se ao lucro líquido trimestral das empresas em milhões de reais:
| Empresa    | T1 2023 | T2 2023 | T3 2023 | T4 2023 |
|------------|---------|---------|---------|---------|
| TechSoft   | 25.3    | 31.7    | 28.4    | 35.2    |
| VarejoMax  | 12.8    | 15.4    | 19.3    | 22.7    |
| FinGroup   | 41.6    | 38.9    | 45.2    | 51.8    |
  • Problemas:

    • Valores de uma variável (trimestre) estão nas colunas
    • Não segue o princípio “uma coluna, uma variável”
    • Dificulta análises temporais e comparativas

Dados Organizados

Versão Organizada dos Dados:

| Empresa   | Trimestre | Ano  | Lucro_Liquido |
|-----------|-----------|------|---------------|
| TechSoft  | T1        | 2023 | 25.3          |
| TechSoft  | T2        | 2023 | 31.7          |
| TechSoft  | T3        | 2023 | 28.4          |
| TechSoft  | T4        | 2023 | 35.2          |
| VarejoMax | T1        | 2023 | 12.8          |
| VarejoMax | T2        | 2023 | 15.4          |
| VarejoMax | T3        | 2023 | 19.3          |
| VarejoMax | T4        | 2023 | 22.7          |
| FinGroup  | T1        | 2023 | 41.6          |
| FinGroup  | T2        | 2023 | 38.9          |
| FinGroup  | T3        | 2023 | 45.2          |
| FinGroup  | T4        | 2023 | 51.8          |

Dados Desorganizados

Tipos de “Desorganização” Comuns em Administração

Variáveis em linhas e colunas

  • Ex: Planilha de desempenho onde ROE aparece como coluna, mas Lucro Líquido e outras variáveis aparecem nas linhas
| Empresa            | ROE (%)       | Liquidez Corrente |
|--------------------|---------------|-------------------|
| Empresa XYZ        | 15,2          | 1,8               |
| Lucro Líquido      | R$ 2.500.000  | -                 |
| Patrimônio Líquido | R$ 16.400.000 | -                 |
| Ativo Circulante   | -             | R$ 3.600.000      |
| Passivo Circulante | -             | R$ 2.000.000      |

Dados Organizados

Versão Organizada dos Dados:

| Empresa    | Indicador           | Valor       |
|------------|---------------------|-------------|
| Empresa XYZ| ROE                 | 0.152       |
| Empresa XYZ| Liquidez Corrente   | 1.8         |
| Empresa XYZ| Lucro Líquido       | 2500000     |
| Empresa XYZ| Patrimônio Líquido  | 16400000    |
| Empresa XYZ| Ativo Circulante    | 3600000     |
| Empresa XYZ| Passivo Circulante  | 2000000     |

Dados/Planilhas Desorganizados

Por que a absoluta maioria dos arquivos de dados são desorganizados?

  • Por que a maioria das pessoas que trabalham na área de negócios não está familiarizada com os princípios da organização de dados para análise e utilizam planilhas eletrônicas para trabalhar com dados.

  • Planilhas de dados são frequentemente organizadas pensando em apresentar os dados ou para tornar a entrada de dados mais simples, não em um formato adequado para armazenamento e análise.

  • Isso significa que, para a maioria das análises reais, cientistas e analistas de dados dispendem muito tempo e esforço organizando e preparando dados elaborados por terceiros.

  • A primeira etapa é sempre descobrir quais são as observações e as variáveis associadas a cada observação.

Dados Organizados na Pesquisa em Finanças

Benefícios para Dissertações e Artigos Científicos

Dados organizados viabilizam e facilitam a:

  • Reprodutibilidade: Formato padronizado que outros pesquisadores podem entender e utilizar

  • Visualizações avançadas: Estrutura ideal para a criação de diversos tipos de tabelas e gráficos.

  • Análise econométrica: Adequação imediata para estudos e modelos econométricos em (regressão linear, painel, logit, probit etc.)

Planilhas Eletrônicas

Broman e Woo (2018): Riscos para Armazenamento de Dados

  • Planilhas eletrônicas têm alto risco de erros: Em 13 auditorias de planilhas reais, uma média de 88% continham erros (Broman e Woo, 2018).

  • Problemas comuns incluem:

    • Conversão automática de formatos (ex: nomes de genes interpretados como datas)

    • Armazenamento de datas de forma diferente entre sistemas operacionais

    • Cálculos incorporados que podem corromper dados originais

    • A mistura de análise, visualização e armazenamento no mesmo arquivo aumenta o risco de comprometer os dados brutos e os resultados.

  • Mas dada a ubiquidade de planilhas nas organizações, caso precise usar planilhas para armazenar dados, siga as seguintes boas práticas:

Data Organization in Spreadsheets

Recomendações práticas para organizar dados em planilhas.

  • Artigo de Broman e Woo (2018)

  • Crie planilhas organizadas (uma linha = uma observação, uma coluna = uma variável, uma célula = um valor)

  • Seja consistente e escolha bons nomes para as variáveis:

    • use snake_case ou CamelCase
    • Lucro Líquido (R$) 😱
    • lucro_liquido ou LucroLiquido 😃
    • NUNCA use acentos, caracteres especiais e espaços vaziso para nomes ou valores.
  • Escreva datas conforme a Norma ISO 8601:

    • YYYY-MM-DD, exemplo: 2025-05-07

Data Organization in Spreadsheets

Recomendações práticas para organizar dados em planilhas.

  • Sem células vazias: use hífen (-) e no caso de usar R, use NA

  • Crie um dicionário dos dados

  • NUNCA faça cálculos na planilha dos dados originais/brutos

  • NUNCA use unidades de medida (R$), cor ou realce como um dado.

    • R$ 50.000,00 😱
    • 50000 😃
    • 10 % 😱
    • O.1 😃
  • Faça backups

  • Use validação dos dados para evitar erros

  • Salve os dados em arquivos de texto simples (.csv):

    • todas as linguagens (R/Python) e softwares de análises de dados reconhecem facilmente esse formato.

Organizando Dados

Pacote tidyr

Na próxima seção, vamos aprender sobre como o pacote tidyr do tidyverse pode ser usado para tornar alguns tipos de dados desorganizados em dados organizados para análise.

Introdução ao Pacote tidyr

O que é o pacote tidyr?

O pacote tidyr no ecossistema tidyverse

  • O tidyr é um pacote do tidyverse para organizar dados desorganizados

  • Seu nome vem de “tidy” (organizado) + “r” (R)

  • Foi criado para facilitar a transformação de dados desorganizados em dados organizados (tidy data) para análise

  • É muito útil para a preparação de dados na fase 3 do CRISP-DM (Preparação dos Dados)

  • Permite que dados em formatos comuns de planilhas e relatórios sejam transformados em formatos adequados para análise e visualização

Pacote tidyr e CRISP-DM

Pacote tidyr e a Fase 3 da CRISP-DM (Preparação de Dados)

  • Na prática, muitos dados corporativos estão em formatos desorganizados:

    • Relatórios trimestrais com várias colunas para cada período
    • Planilhas otimizadas para visualização humana, não para análise
    • Dados exportados de sistemas legados ou ERP
  • O pacote tidyr permite transformar esses dados desorganizados em dados organizados, essenciais para as fases seguintes do CRISP-DM:

    • Fase 3: Preparação dos Dados ← estamos aqui!

Função principal do tidyr

A Principal função do pacote tidyr para nós

  • pivot_longer(): Converte dados do formato amplo (onde valores de uma ou mais variáveis são espalhadas por colunas) em um formato longo (onde cada variável está em uma única coluna).

    • Útil quando você precisa de de dados para análise ou visualização

    • Ex: Transformar colunas de trimestres (Q1, Q2, Q3, Q4) em uma única coluna “trimestre”

  • Iremos estudar somente a função pivot_longer(), porque o foco deste módulo é a preparação de dados para análise.

  • Mas há diversas outras funções úteis para a organização de dados:

Quando usar o tidyr?

Situações comuns em Administração

  • Quando você tem planilhas financeiras com colunas para diferentes períodos (meses, trimestres, anos)

  • Quando você recebe planilhas Excel organizadas para visualização humana, mas não para análise de dados.

  • Quando precisa combinar dados de diferentes fontes que estão em formatos incompatíveis.

  • Quando precisa preparar dados para visualizações específicas com ggplot2 (gráficos de linhas, facetas, etc.)

  • Quando realiza análises temporais e precisa converter entre formatos de data/hora.

A Função tidyr::pivot_longer

Objetivos de Aprendizagem: pivot_longer()

Ao final desta seção, você será capaz de:

  • Aplicar a função pivot_longer() com seus parâmetros essenciais: cols, names_to e values_to

  • Organizar/Transformar dados complexos extraindo múltiplas informações de colunas

  • Integrar pivot_longer() em pipelines de análise com dplyr

  • Implementar soluções para casos reais de análise de dados administrativos

O que é a função pivot_longer()?

Transformando dados de formato amplo para longo

  • A função pivot_longer() converte dados do formato amplo (wide) para o formato longo (long)

  • É muito útil quando as colunas contêm valores em vez de variáveis

  • Geralmente, é o primeiro passo para transformar planilhas de negócios em dados organizados para análise (tidy data)

  • A Figura 4 ilustra o uso desta função

Função pivot_longer()

Figura 4: Aplicando a função pivot_longer()

Sintaxe da função pivot_longer()

Como usar pivot_longer() na prática

# Formato básico
dados %>%
  pivot_longer(
    cols = "valores_de_uma_nova_coluna",
    names_to = "nome_nova_coluna",
    values_to = "nome_outra_nova_coluna"
  )
  • valores_de_uma_nova_coluna: as colunas que contêm valores de uma variável e serão transformadas.

  • nome_nova_coluna: nome da nova coluna/variável que conterá os nomes das colunas originais.

  • nome_outra_nova_coluna: nome da nova coluna/variável que conterá os valores originais.

Função pivot_longer

Descrição

Característica pivot_longer()
Transforma Colunas → Linhas
Formato resultante Longo (mais linhas)
Quando usar Para análise e visualização
Exemplo típico Transformar colunas de anos em uma variável “ano”

A Função tribble()

Descrição

A função tribble() (abreviação de “transposed tibble”) é uma forma elegante de criar pequenas tibbles/data frames para exemplos ou testes:

# Criando uma data frame com tribble() - "tibble transposta"
produtos <- tribble(
  ~codigo, ~produto, ~preco, # Nomes das colunas começam com ~
  "A123", "Notebook", 3500, # Cada linha é um registro
  "B456", "Smartphone", 1800, # Os valores são separados por vírgulas
  "C789", "Monitor", 950 # A formatação facilita a leitura
)

# Visualizando a data frame criada
produtos
# A tibble: 3 × 3
  codigo produto    preco
  <chr>  <chr>      <dbl>
1 A123   Notebook    3500
2 B456   Smartphone  1800
3 C789   Monitor      950

Vantagens da função tribble():

  • Layout Visual: Cada linha do código corresponde a uma linha da data frame, tornando o código mais legível

  • Especificação direta: Os nomes das colunas são definidos com ~ (til)

  • Flexibilidade de tipos: Cada coluna pode conter diferentes tipos de dados

  • Ideal para exemplos: Perfeita para criar pequenas data frames para demonstrações ou testes.

Esta função faz parte do pacote tibble, que é carregado automaticamente quando você carrega o tidyverse.

Exemplo Básico de pivot_longer()

Dados de receita trimestral (formato amplo/wide)

# Criando a data frame de exemplo
receitas <- tribble(
  ~produto, ~T1, ~T2, ~T3, ~T4,
  "Produto A", 50000, 55000, 60000, 65000,
  "Produto B", 30000, 32000, 35000, 37000,
  "Produto C", 20000, 22000, 25000, 27000
)

# Visualizando a data frame original (formato amplo/wide)
receitas
# A tibble: 3 × 5
  produto      T1    T2    T3    T4
  <chr>     <dbl> <dbl> <dbl> <dbl>
1 Produto A 50000 55000 60000 65000
2 Produto B 30000 32000 35000 37000
3 Produto C 20000 22000 25000 27000

Este formato é para apresentação, não para armazenamento e análise.

Exemplo Básico de pivot_longer()

Transformando para o formato longo

# Transformando para o formato longo usando pivot_longer
receitas_longas <- receitas %>%
  pivot_longer(
    cols = c("T1", "T2", "T3", "T4"), # colunas que serão valores da nova coluna
    names_to = "trimestre", # nome da nova coluna
    values_to = "receita" # nome de outra nova coluna
  )

# Visualizando o resultado (formato longo/long)
receitas_longas
# A tibble: 12 × 3
   produto   trimestre receita
   <chr>     <chr>       <dbl>
 1 Produto A T1          50000
 2 Produto A T2          55000
 3 Produto A T3          60000
 4 Produto A T4          65000
 5 Produto B T1          30000
 6 Produto B T2          32000
 7 Produto B T3          35000
 8 Produto B T4          37000
 9 Produto C T1          20000
10 Produto C T2          22000
11 Produto C T3          25000
12 Produto C T4          27000

Agora os dados estão organizados:

  • Cada linha é uma observação (um produto em um trimestre)
  • Cada coluna é uma variável (produto, trimestre, receita)
  • Cada célula contém um único valor

Exemplo Intermediário: Várias Colunas

Dados de desempenho financeiro

# Criando a data frame com múltiplas métricas por trimestre
desempenho <- tribble(
  ~empresa, ~receita_T1, ~receita_T2, ~despesa_T1, ~despesa_T2,
  "Empresa A", 150000, 175000, 120000, 130000,
  "Empresa B", 250000, 270000, 200000, 220000,
  "Empresa C", 100000, 115000, 80000, 95000
)

# Visualizando a data frame original
desempenho
# A tibble: 3 × 5
  empresa   receita_T1 receita_T2 despesa_T1 despesa_T2
  <chr>          <dbl>      <dbl>      <dbl>      <dbl>
1 Empresa A     150000     175000     120000     130000
2 Empresa B     250000     270000     200000     220000
3 Empresa C     100000     115000      80000      95000

Este formato é ainda mais desorganizado, pois mistura três variáveis (receita, despesa e trimestre) nos nomes das colunas.

Exemplo Intermediário: Várias Colunas

Transformando para o formato longo com dois níveis

# Transformando para o formato longo usando pivot_longer com nomes separados
desempenho_longo <- desempenho %>%
  pivot_longer(
    cols = -empresa, # todas as colunas exceto "empresa"
    names_to = c("indicador", "trimestre"), # nomes das duas novas colunas
    names_sep = "_", # separador nos nomes das colunas
    values_to = "valor" # nome de nova coluna para receber os valores
  )

# Visualizando o resultado
desempenho_longo
# A tibble: 12 × 4
   empresa   indicador trimestre  valor
   <chr>     <chr>     <chr>      <dbl>
 1 Empresa A receita   T1        150000
 2 Empresa A receita   T2        175000
 3 Empresa A despesa   T1        120000
 4 Empresa A despesa   T2        130000
 5 Empresa B receita   T1        250000
 6 Empresa B receita   T2        270000
 7 Empresa B despesa   T1        200000
 8 Empresa B despesa   T2        220000
 9 Empresa C receita   T1        100000
10 Empresa C receita   T2        115000
11 Empresa C despesa   T1         80000
12 Empresa C despesa   T2         95000

Observação importante:

  • Os nomes das colunas originais (receita_T1, receita_T2, etc.) são divididos pelo separador “_” em exatamente duas partes.

  • A primeira parte (“receita” ou “despesa”) vai para a coluna “indicador” e a segunda parte (“T1” ou “T2”) vai para a coluna “trimestre”.

  • Este é um padrão comum em dados financeiros: quando os nomes de colunas seguem um formato consistente com separadores, podemos extrair as informações contidas neles para criar novas variáveis.

Exemplo Avançado

Indicadores financeiros por trimestre

# Exemplo mais gerenciável para slides
receita_trimestral <- tribble(
  ~empresa, ~`2022_T1_Receita`, ~`2022_T2_Receita`, ~`2023_T1_Receita`, ~`2023_T2_Receita`,
  "ABC Ltda", 1200000, 1350000, 1500000, 1620000,
  "XYZ S.A.", 2500000, 2700000, 2900000, 3100000
)

# Visualizando a data frame original
receita_trimestral
# A tibble: 2 × 5
  empresa  `2022_T1_Receita` `2022_T2_Receita` `2023_T1_Receita`
  <chr>                <dbl>             <dbl>             <dbl>
1 ABC Ltda           1200000           1350000           1500000
2 XYZ S.A.           2500000           2700000           2900000
# ℹ 1 more variable: `2023_T2_Receita` <dbl>
  • Temos informações de ano e trimestre nos nomes das colunas

Exemplo Avançado

Organizando dados financeiros complexos

# Transformando para o formato longo usando pivot_longer com três níveis
receita_trimestral_organizada <- receita_trimestral %>%
  pivot_longer(
    cols = -empresa, # todas as colunas exceto "empresa"
    names_to = c("ano", "trimestre"), # nomes de duas novas colunas
    names_sep = "_", # separador nos nomes das colunas
    values_to = "receita" # nome de nova coluna para receber os valores da receita
  )

# Visualizando o resultado
receita_trimestral_organizada
# A tibble: 8 × 4
  empresa  ano   trimestre receita
  <chr>    <chr> <chr>       <dbl>
1 ABC Ltda 2022  T1        1200000
2 ABC Ltda 2022  T2        1350000
3 ABC Ltda 2023  T1        1500000
4 ABC Ltda 2023  T2        1620000
5 XYZ S.A. 2022  T1        2500000
6 XYZ S.A. 2022  T2        2700000
7 XYZ S.A. 2023  T1        2900000
8 XYZ S.A. 2023  T2        3100000

Resumo: Função pivot_longer()

O que você precisa lembrar

  1. Finalidade: Transformar dados do formato amplo (wide) para o formato longo (long), organizando-os conforme o princípio tidy data

  2. Sintaxe básica:

dados %>%
  pivot_longer(
    cols = colunas_a_transformar,
    names_to = "nome_nova_coluna_para_nomes",
    values_to = "nome_nova_coluna_para_valores"
  )
  1. Parâmetros principais:
  • cols: Quais colunas serão transformadas em pares nome-valor
  • names_to: Nome da nova coluna que receberá os nomes das colunas originais
  • values_to: Nome da nova coluna que receberá os valores


4. Caso avançado:

  • Quando os nomes de colunas contêm múltiplas informações, use:

    • names_to = c("variavel1", "variavel2", ...)
    • names_sep = "_" (ou outro separador presente nos nomes)


5. Benefícios:

  • Padroniza o formato de dados conforme princípios da ciência de dados
  • Facilita análises com dplyr (group_by, summarize, etc.)
  • Prepara dados para visualizações eficientes

Sua Vez: Aplicando o Conhecimento

Organizando dados na prática

  • A seguir, aplicaremos os conceitos aprendidos em exercícios práticos que simulam situações reais na área de Administração.

  • Tente resolver os exercícios usando o que aprendemos sobre:

    • Identificação de dados desorganizados
    • Aplicação da função pivot_longer()
    • Criação de estruturas organizadas para análise
  • Ao resolver estes exercícios, imagine como você poderia aplicar estas técnicas em:

    • Análises de desempenho de vendas
    • Avaliação de eficácia de estratégias de marketing
    • Planejamento financeiro e orçamentário
  • Lembre-se: No mundo real do trabalho, a capacidade de reorganizar dados rapidamente para extrair insights é uma habilidade crítica para administradores

Exercícios com pivot_longer()

Nível Básico

  1. Você trabalha no departamento de vendas de uma rede de lojas e recebeu os dados trimestrais das vendas de cada loja em 2024. Os dados estão no formato “amplo” conforme abaixo:
vendas_lojas <- tribble(
  ~loja, ~T1, ~T2, ~T3, ~T4,
  "Shopping Central", 185000, 162000, 198000, 230000,
  "Centro Comercial", 145000, 152000, 138000, 176000,
  "Mall Express", 92000, 98000, 103000, 125000,
  "Galeria Norte", 78000, 83000, 89000, 110000
)

# Visualizando os dados originais
vendas_lojas
# A tibble: 4 × 5
  loja                 T1     T2     T3     T4
  <chr>             <dbl>  <dbl>  <dbl>  <dbl>
1 Shopping Central 185000 162000 198000 230000
2 Centro Comercial 145000 152000 138000 176000
3 Mall Express      92000  98000 103000 125000
4 Galeria Norte     78000  83000  89000 110000

Transforme estes dados para o formato “longo” (tidy), criando as variáveis “trimestre” e “vendas”.

Exercícios com pivot_longer()

Nível Intermediário 1

  1. Você é analista financeiro e recebeu dados sobre os investimentos da empresa em marketing digital por plataforma nos últimos 3 meses. Os dados estão no seguinte formato:
investimentos_marketing <- tribble(
  ~plataforma, ~Jan, ~Fev, ~Mar,
  "Google Ads", 12500, 13200, 15000,
  "Facebook", 8700, 9300, 10500,
  "Instagram", 7200, 8500, 9800,
  "LinkedIn", 5400, 5800, 6500
)

# Visualizando os dados originais
investimentos_marketing
# A tibble: 4 × 4
  plataforma   Jan   Fev   Mar
  <chr>      <dbl> <dbl> <dbl>
1 Google Ads 12500 13200 15000
2 Facebook    8700  9300 10500
3 Instagram   7200  8500  9800
4 LinkedIn    5400  5800  6500

Seu gestor pediu para você transformar estes dados em um formato que permita:

  • Realizar análises por plataforma
  • Comparar investimentos mês a mês
  • Identificar a plataforma com maior crescimento

Transforme estes dados para o formato adequado para estas análises.

Exercícios com pivot_longer()

Nível Intermediário 2

  1. A diretoria solicitou uma análise detalhada de despesas e receitas mensais por departamento no primeiro semestre de 2024. Os dados foram enviados no seguinte formato:
incidadores_dptos <- tribble(
  ~departamento, ~Jan_receita, ~Jan_despesa, ~Fev_receita, ~Fev_despesa, ~Mar_receita, ~Mar_despesa, ~Abr_receita, ~Abr_despesa, ~Mai_receita, ~Mai_despesa, ~Jun_receita, ~Jun_despesa,
  "Vendas", 120000, 85000, 125000, 82000, 135000, 90000, 122000, 88000, 140000, 91000, 145000, 94000,
  "Marketing", 45000, 38000, 52000, 46000, 48000, 42000, 55000, 49000, 58000, 52000, 62000, 54000,
  "Produção", 180000, 152000, 185000, 158000, 192000, 160000, 195000, 162000, 210000, 170000, 215000, 175000,
  "RH", 28000, 25000, 28000, 25000, 30000, 26000, 29000, 26000, 31000, 27000, 32000, 28000
)

# Visualizando os dados originais
incidadores_dptos
# A tibble: 4 × 13
  departamento Jan_receita Jan_despesa Fev_receita Fev_despesa Mar_receita
  <chr>              <dbl>       <dbl>       <dbl>       <dbl>       <dbl>
1 Vendas            120000       85000      125000       82000      135000
2 Marketing          45000       38000       52000       46000       48000
3 Produção          180000      152000      185000      158000      192000
4 RH                 28000       25000       28000       25000       30000
# ℹ 7 more variables: Mar_despesa <dbl>, Abr_receita <dbl>, Abr_despesa <dbl>,
#   Mai_receita <dbl>, Mai_despesa <dbl>, Jun_receita <dbl>, Jun_despesa <dbl>

Reorganize estes dados para o formato longo, separando corretamente as informações de mês, indicador (receita/despesa) e valor.

Dicas para Trabalhar com tidyr

Recomendações práticas

  1. Identifique as variáveis: Antes de transformar, identifique claramente quais são as observações e variáveis reais nos seus dados

  2. Comece com subconjuntos: Para dados complexos, comece testando com um pequeno subconjunto de dados

  3. Use nomes descritivos: Escolha bons nomes para as novas colunas criadas por pivot_longer()

  4. Combine com dplyr: As transformações com tidyr geralmente são seguidas por operações com dplyr para análise

  5. Verifique os resultados: Sempre confira se os dados transformados mantêm as mesmas informações dos dados originais

Resumo: Pacote tidyr

O que você precisa lembrar

  1. O que faz: O pacote tidyr transforma dados entre os formatos amplo (wide) e longo (long)

  2. Principal função:

    • pivot_longer(): Converte de amplo (wide) para longo (long) (colunas para linhas)
  3. Quando usar:

    • Use pivot_longer() quando colunas contiverem valores em vez de variáveis
  4. Importância na análise de dados:

    • É essencial para a preparação de dados (fase 3 do CRISP-DM)

    • Permite transformar dados comuns de negócios em formatos adequados para análise

    • Facilita a aplicação de funções do dplyr e criação de visualizações

  5. Lembre-se sempre:

    • Dados organizados (tidy) têm uma variável por coluna, uma observação por linha.

Pacote tidyr: Bibliografia Recomendada

Introdução ao Pacote dplyr

O que é o dplyr?

O pacote dplyr no ecossistema tidyverse

  • O dplyr é um dos pacotes principais do tidyverse, criado por Hadley Wickham

  • Seu nome vem de “data plier” (alicate para dados) - uma ferramenta para manipular dados

  • Foi projetado seguindo a filosofia “tidy data” (dados organizados) - cada variável é uma coluna, cada observação é uma linha

  • É escrito em C++ para performance otimizada

  • Permite manipulação de dados de forma consistente, clara e encadeada

O dplyr no Ecossistema R

Contexto do dplyr

  • O pacote dplyr é parte do tidyverse

  • Enquanto os pacotes readr e readxl ajudam na importação de dados, o dplyr é especializado na manipulação de dados

  • O dplyr foi otimizado para manipular sobre dados organizados, longos ou tidy data

  • O dplyr trabalha com uma estrutura de dados de R que já conhecemos: data frames/tibbles

  • As funções do dplyr foram projetadas para serem usadas com o operador pipe (%>%), que já vimos brevemente no relatório Junglivet

Uma Analogia para o dplyr

O dplyr como uma “linha de produção”

Imagine o processo de análise de dados como uma linha de produção:

  • Os dados brutos são sua “matéria-prima”

  • Cada função do dplyr é uma “estação de trabalho” que realiza uma operação específica:

    • filter() seleciona apenas os materiais que atendem a certos critérios
    • select() separa apenas as partes que você precisa
    • mutate() transforma ou cria novos componentes
    • group_by() + summarize() agrupam e calculam estatísticas
    • arrange() organiza o resultado final
  • O operador pipe (%>%) é a “esteira” que move os dados de uma estação para outra

Operações Comuns em Análise de Dados

Operações rotineiras

  • Muitas vezes precisamos filtrar somente certas linhas (observações ) de uma data frame.

  • Muitas vezes precisamos selecionar somente certas colunas (variáveis) de uma data frame.

  • Muitas vezes precisamos agrupar os dados por uma determinada(s) variável(s) categórica.

  • Muitas vezes precisamos calcular estatísticas descritivas para esses subconjuntos de dados (função summarize).

Por que usar o dplyr?

  • Usando R base:
# pib per capita médio dos países do continente americano
mean(gapminder$gdpPercap[gapminder$continent == "Americas"])
[1] 7136.11
  • Usando o pacote dplyr
# pib per capita médio dos países do continente americano
gapminder %>%
  filter(continent == "Americas") %>%
  summarize(mean(gdpPercap))
# A tibble: 1 × 1
  `mean(gdpPercap)`
              <dbl>
1             7136.

Por que usar o dplyr?

R base (aninhado):

# Calcular a média de PIB per capita para 
# países asiáticos com população > 50 milhões 
# em 2007
mean(gapminder$gdpPercap[
  gapminder$continent == "Asia" & 
  gapminder$pop > 50000000 & 
  gapminder$year == 2007
])
  • Difícil de ler e entender
  • Propenso a erros
  • Difícil de modificar

Com dplyr e pipe:

# O mesmo cálculo com dplyr
gapminder %>%
  filter(
    continent == "Asia",
    pop > 50000000,
    year == 2007
  ) %>%
  summarize(mean(gdpPercap))
  • Leitura sequencial, mais natural
  • Cada etapa claramente separada
  • Fácil de modificar ou expandir

Comparando Abordagens

Vantagens e Desvantagens

Base R: Funções aninhadas

  • Vantagens: Não requer pacotes adicionais, disponível em qualquer instalação do R

  • Desvantagens:

    • Código difícil de ler com funções aninhadas
    • Difícil de depurar quando há erros
    • Funções com sintaxes inconsistentes

dplyr: Gramática da manipulação de dados

  • Vantagens:

    • Código mais legível e expressivo
    • Funções com nomes intuitivos e consistentes
    • Ideal para análises sequenciais com pipes
  • Desvantagens:

    • Requer aprender uma nova sintaxe (para usuários experientes)
    • Dependência de pacotes externos
    • Algumas operações podem ser mais lentas que o R base em casos específicos

Fluxo de trabalho com tidyvese

Gramática da manipulação de dados

O fluxo típico de uma análise de dados com tidyverse segue este padrão:

  1. Importar dados (com pacotes here, readr, readxl,…)
  2. Organizar dados para análise (pacote tidyr)
  3. Unir arquivos/tabelas se necessário (funções para joins)
  4. Filtrar observações (função filter)
  5. Selecionar variáveis (função select)
  6. Transformar dados (função mutate)
  7. Agrupar dados (função group_by)
  8. Resumir informações (função summarize)
  9. Ordenar resultados (função arrange)

Um Pipeline de Análise com dplyr

Informações sobre expectativa de vida por continente

# Um pipeline de análise com dplyr
relatorio_expectativa <- gapminder %>%
  # Filtra apenas os dados de 2007
  filter(year == 2007) %>%
  # Agrupa por continente
  group_by(continent) %>%
  # Calcula estatísticas resumidas
  summarize(
    expectativa_media = mean(lifeExp),
    expectativa_minima = min(lifeExp),
    expectativa_maxima = max(lifeExp),
    num_paises = n()
  ) %>%
  # Ordena do maior para o menor
  arrange(desc(expectativa_media))

# Visualiza o resultado final
relatorio_expectativa

Este exemplo demonstra como um conjunto de funções do dplyr pode ser combinado para transformar dados brutos organizados em um relatório informativo com apenas algumas linhas de código.

Conexão com o Relatório Junglivet

O que já vimos na prática

No relatório Junglivet, já utilizamos algumas funções do dplyr:

# Trecho do relatório Junglivet
dados_destilaria_limpos <- dados_destilaria %>%
  # Remove a coluna MONTH
  select(-MONTH) %>%
  # Renomeia as colunas
  rename(
    dia = DAY,
    mestre_responsavel = MANUFACTURER,
    # ... outras colunas renomeadas
  ) %>%
  # Converte cada variável para seu tipo adequado
  mutate(
    dia = as.numeric(dia),
    # ... outras conversões
  ) %>%
  # Remove linhas com valores ausentes
  drop_na()

Agora vamos entender em detalhes cada uma dessas funções e como aplicá-las em diferentes contextos de análise de dados.

Pacote dplyr

Pacote dplyr: Vantagens

O pacote dplyr fornece uma série de funções muito úteis para manipular data frames de uma maneira que:

  • reduz a probabilidade de cometer erros
  • economiza digitação
  • o código é mais legível e compreensível

Pacote dplyr

Objetivos de Aprendizagem

Vamos aprender 5 das funções mais usadas do pacote dplyr,

Função Descrição
dplyr::filter() para filtrar linhas (observações)
dplyr::select() para selecionar colunas (variáveis )
dplyr::mutate() para criar novas variáveis
dplyr::group_by() para operações “por grupo”
dplyr::summarize() para calcular estatísticas
dplyr::arrange() para ordenar resultados

Além disso, veremos como como usar o operador pipe (%>%) para combiná-las.

Boas Práticas com dplyr

Recomendações para código eficiente e legível

  1. Indentação consistente:

    • Um nível de identação para cada função
    • Parâmetros adicionais alinhados
  2. Nomeie seu código:

    • Use nomes descritivos para variáveis intermediárias e finais
    • Ex: dados_filtrados, relatorio_vendas_por_regiao
  3. Comente seu código:

    • Explique o “por quê”, não apenas o “o quê”
    • Útil para você mesmo no futuro e para colegas
  4. Dividir análises complexas em etapas:

    • Para análises muito complexas, divida em objetos intermediários
    • Facilita a depuração e compreensão
  5. Consistência de estilo:

    • Seja consistente com o estilo de nomeação (snake_case ou CamelCase)
    • Seja consistente com o uso de aspas (simples ou duplas)

Dados dos Exemplos com dplyr

Pacote gapminder

Descrição

  • O pacote gapminder da linguagem R contém uma data frame também chamada gapminder.

  • A df gapminder fornece informações detalhadas sobre indicadores socioeconômicos reais de vários países ao longo do tempo.

  • Este conjunto de dados é muito utilizado no ensino da linguagem R e de métodos estatísticos.

  • Vamos utilizar a df gapminder para ilustrar as funções do pacote dplyr.

Pacote gapminder

Após instalar, carregue o pacote

  • Para acessar os dados gapminder, basta instalar e carregar o pacote gapminder:
# carrega os pacotes
library(tidyverse)
library(gapminder)

Data Frame gapminder

Fase 1 (CRISP-DM): Entendimento dos Dados

Para obter uma visão geral da estrutura da df gapminder, podemos usar a função glimpse do pacote dplyr:

# visualizando a estrutura dos dados
dplyr::glimpse(gapminder)
Rows: 1,704
Columns: 6
$ country   <fct> "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", …
$ continent <fct> Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, …
$ year      <int> 1952, 1957, 1962, 1967, 1972, 1977, 1982, 1987, 1992, 1997, …
$ lifeExp   <dbl> 28.801, 30.332, 31.997, 34.020, 36.088, 38.438, 39.854, 40.8…
$ pop       <int> 8425333, 9240934, 10267083, 11537966, 13079460, 14880372, 12…
$ gdpPercap <dbl> 779.4453, 820.8530, 853.1007, 836.1971, 739.9811, 786.1134, …

Podemos também inspecionar as primeiras 6 linhas da data frame com a função head:

head(gapminder)
# A tibble: 6 × 6
  country     continent  year lifeExp      pop gdpPercap
  <fct>       <fct>     <int>   <dbl>    <int>     <dbl>
1 Afghanistan Asia       1952    28.8  8425333      779.
2 Afghanistan Asia       1957    30.3  9240934      821.
3 Afghanistan Asia       1962    32.0 10267083      853.
4 Afghanistan Asia       1967    34.0 11537966      836.
5 Afghanistan Asia       1972    36.1 13079460      740.
6 Afghanistan Asia       1977    38.4 14880372      786.

Boa Prática

Dicionário dos dados

A data frame gapminder contida no pacote de mesmo nome, possui 1704 linhas (observações) e 6 colunas (variáveis).

Variável Classe/Tipo Descrição
country factor Nome do país (142 níveis/países)
continent factor Continente ao qual o país pertence (5 níveis/continentes)
year integer Ano da observação (1952 a 2007 em incrementos de 5 anos)
lifeExp double Expectativa de vida ao nascer, em anos
pop integer População total do país
gdpPercap double PIB per capita em US$, ajustado pela inflação

Função dplyr::select()

O que é a função select()?

Selecionando variáveis (colunas) de uma data frame

  • A função select() permite escolher quais variáveis (colunas) você quer manter ou remover de uma data frame

  • Enquanto select() trabalha com colunas (variáveis), filter() trabalha com linhas (observações),

  • É essencial para simplificar seus dados, focando apenas nas variáveis relevantes para sua análise

Função select()

Sintaxe da função select()

Sintaxe básica

# Estrutura básica
select(df, var1, var2, var3)

# Com operador pipe
df %>% select(var1, var2, var3)
  • df: A data frame da qual você quer selecionar variáveis
  • var1, var2, var3: Nomes das variáveis que você quer manter
  • Todas as variáveis não listadas serão removidas do resultado

Exemplo: Análise Financeira Simplificada

Cenário: Análise financeira de países

Imagine que você é um analista financeiro internacional e precisa preparar um relatório sobre PIB:

# Seleciona apenas as variáveis relevantes para análise financeira
dados_financeiros <- gapminder %>%
  select(country, year, gdpPercap)

# Visualiza as primeiras linhas do resultado
head(dados_financeiros)
# A tibble: 6 × 3
  country      year gdpPercap
  <fct>       <int>     <dbl>
1 Afghanistan  1952      779.
2 Afghanistan  1957      821.
3 Afghanistan  1962      853.
4 Afghanistan  1967      836.
5 Afghanistan  1972      740.
6 Afghanistan  1977      786.

Interpretação: Este código seria equivalente a extrair apenas os dados financeiros relevantes (país, ano e PIB per capita) de uma grande base de dados para uma análise específica de desempenho econômico.

Técnicas de Seleção Avançadas

Diversas formas de selecionar variáveis

# Selecionar variáveis por inclusão
gapminder %>% select(country, year, gdpPercap)

# Selecionar variáveis por exclusão (com sinal de menos)
gapminder %>% select(-continent, -lifeExp)

# Selecionar variáveis em sequência
gapminder %>% select(country:pop)

# Selecionar variáveis que começam com determinado texto
gapminder %>% select(starts_with("c"))

# Selecionar variáveis que terminam com determinado texto
gapminder %>% select(ends_with("p"))

# Selecionar variáveis que contêm determinado texto
gapminder %>% select(contains("exp"))

Técnicas de Seleção Avançadas

Aplicações práticas em negócios

Estas técnicas são muito úteis quando você trabalha com:

  • Grandes conjuntos de dados com dezenas ou centenas de variáveis
  • Planilhas de dados financeiros onde precisa focar em determinadas métricas
  • Relatórios onde precisa apresentar apenas informações específicas

Erros Comuns e Como Evitá-los

Os erros mais comuns com select()

Erro Errado Correto
Nomes de variáveis com aspas select(gapminder, "country") select(gapminder, country)
Tentar condições como em filter select(gapminder, gdpPercap > 1000) Use filter() para isso, não select()
Não salvar o resultado gapminder %>% select(country, year) dados_novos <- gapminder %>% select(country, year)
Remover variáveis necessárias select(country) e depois tentar usar continent Verifique se manteve todas as variáveis necessárias

Dica importante:

Lembre-se: select() é para escolher colunas (variáveis) e filter() é para escolher linhas (observações)!

Exemplo: Salvando o resultado

Seleção por Exclusão

  • Se quisermos remover apenas a variável continent, podemos usar a sintáxe abaixo e salvar o resultado em outro objeto:
variaveis_selecionadas <- select(gapminder, -continent)
variaveis_selecionadas
# A tibble: 1,704 × 5
   country      year lifeExp      pop gdpPercap
   <fct>       <int>   <dbl>    <int>     <dbl>
 1 Afghanistan  1952    28.8  8425333      779.
 2 Afghanistan  1957    30.3  9240934      821.
 3 Afghanistan  1962    32.0 10267083      853.
 4 Afghanistan  1967    34.0 11537966      836.
 5 Afghanistan  1972    36.1 13079460      740.
 6 Afghanistan  1977    38.4 14880372      786.
 7 Afghanistan  1982    39.9 12881816      978.
 8 Afghanistan  1987    40.8 13867957      852.
 9 Afghanistan  1992    41.7 16317921      649.
10 Afghanistan  1997    41.8 22227415      635.
# ℹ 1,694 more rows

Pacote dplyr e o operador %>%

Combinação de Operações com %>%

  • Nos slides anteriores, usamos a sintáxe ‘normal’ da linguagem R.

  • Mas o ponto forte do dplyr está na combinação de várias funções usando o operador pipe %>%.

  • Vamos analisar a gramática do uso de funções do dplyr combinadas com o operador %>%.

  • Atalho para inserir o operador pipe: Ctrl + shift + M

Operador Pipe: A “cola” da gramática dplyr

Significado conceitual do pipe %>%

  • O operador pipe pode ser lido como “então” ou “em seguida”

  • Fluxo da esquerda para a direita, similar à leitura natural

  • Transforma:

funcao(dados, arg1, arg2)

em

dados %>% funcao(arg1, arg2)

Operador Pipe

Analogia

Uma linha de montagem onde cada função faz uma operação nos dados

gapminder %>% # Pegue os dados gapminder, então...
  filter(year == 2007) %>% # Filtre para apenas o ano 2007, então...
  group_by(continent) %>% # Agrupe por continente, então...
  summarize( # Calcule resumos:
    mean(lifeExp), # expectativa de vida média
    sum(pop) # população total 
  )

Dica

Nomeie os resumos calculados com summarize

gapminder %>% # Pegue os dados gapminder, então...
  filter(year == 2007) %>% # Filtre para apenas o ano 2007, então...
  group_by(continent) %>% # Agrupe por continente, então...
  summarize( # Calcule resumos:
    exp_vida_media = mean(lifeExp), # expectativa de vida média
    populacao_total = sum(pop) # população total
  )

Função select() e o Operador Pipe

Dica

variaveis_selecionadas <- gapminder %>%
  dplyr::select(year, country, gdpPercap)

Vamos entender o código:

  1. Primeiro invocamos a df gapminder e a passamos, usando o operador pipe %>%, para a próxima etapa, que é a função select().

  2. Neste caso, não especificamos qual df usamos na função select(), porque que ela obtém essa informação do pipe anterior.

  3. Salvamos o resultado no objeto variaveis_selecionadas

Resumo: Função select()

O que você precisa lembrar

  1. Para que serve: Selecionar apenas as colunas (variáveis) que você deseja manter ou remover

  2. Sintaxe básica:

dados %>% select(var1, var2, var3)  # Mantém apenas var1, var2 e var3
dados %>% select(-var4, -var5)      # Remove var4 e var5, mantém o resto
  1. Técnicas úteis:
    • Seleção por inclusão: select(país, ano, vendas)
    • Seleção po exclusão: select(-observações, -notas)
    • Seleção por padrão de texto: select(starts_with("venda"))
  2. Lembre-se sempre:
    • select() trabalha com COLUNAS
    • filter() trabalha com LINHAS
    • Sempre salve o resultado em um novo objeto!
novo_df <- dados %>% select(...)

Sua vez

Exercícios Práticos com select()

Nível 1: Primeiros Passos

  1. Complete o código abaixo para selecionar apenas o país, o ano e a expectativa de vida:
dados_expectativa <- gapminder %>%
  select(___, ___, ___)
  1. Escreva o código para selecionar todas as variáveis EXCETO população e PIB per capita.

Nível 2: Técnicas Avançadas com select()

  1. Complete o código abaixo para selecionar apenas as variáveis que começam com a letra “c”:
variaveis_com_c <- gapminder %>%
  select(___(___))
  1. Escreva o código para selecionar todas as variáveis desde “country” até “pop” (em sequência na tabela).

Desafio: Crie um código que selecione variáveis usando dois métodos diferentes na mesma instrução:

  • Todas as variáveis que contêm a letra “p” OU
  • Todas as variáveis que terminam com “p”

Dica: Lembre-se que você pode combinar seleções com vírgulas e use o atalho Ctrl+Shift+M para inserir o operador pipe (%>%).

Função dplyr::filter()

O que é a função filter()?

Filtrando observações (linhas) de uma data frame

  • A função filter() permite filtrar subconjuntos de observações (linhas) que atendem determinadas condições ou critérios.

  • É uma das funções mais utilizadas na análise de dados para criar subconjuntos específicos dos dados

  • Pense nela como um “filtro” que deixa passar apenas as observações que atendem aos critérios que você definir

O que é a função filter()?

Neste caso, duas linhas atendem às condições

O que é a função filter()?

Filtrando observações (linhas) de uma data frame

  • Imagine que você tem uma planilha de vendas e quer analisar apenas as vendas:

    • de um produto específico
    • acima de determinado valor
    • em uma região específica
    • em um período específico
  • A função filter() permite fazer essa filtragem de forma rápida e precisa

Sintaxe da função filter()

Sintaxe básica

# Estrutura básica
filter(df, condição)

# Com operador pipe
df %>% filter(condição)
  • df: A data frame a ser filtrada
  • condição: Expressão lógica que retorna TRUE/FALSE para cada linha
  • Somente as linhas que resultam em TRUE são mantidas no resultado

Operadores para construir condições

Operadores na linguagem dos negócios

Operador Exemplo em Linguagem Natural Código em R
== Apenas os países europeus continent == “Europe”
!= Todos, exceto os países europeus continent != “Europe”
> Países com PIB per capita maior que 10.000 gdpPercap > 10000
< Países com menos de 1 milhão de habitantes pop < 1000000
>= Países a partir do ano 2000 year >= 2000
& Países europeus a partir de 2000 continent == “Europe” & year >= 2000
| Países da Europa ou da Ásia continent == “Europe” | continent == “Asia”

Operadores para construir condições

Dica

Dica para memorizar:

  • Use == para igualdade (lembre-se: dois sinais de igual, não apenas um)
  • Use & para “E” (quero este critério E aquele também)
  • Use | para “OU” (quero este critério OU aquele)

Exemplo básico

Cenário: Análise de vendas por continente

Imagine que a data frame gapminder representa dados de filiais de uma empresa multinacional:

# Filtra apenas países das Américas
# como se fossem filiais da região Américas

filiais_americas <- gapminder %>%
  filter(continent == "Americas")

# Visualiza as primeiras 6 linhas do resultado
head(filiais_americas)
# A tibble: 6 × 6
  country   continent  year lifeExp      pop gdpPercap
  <fct>     <fct>     <int>   <dbl>    <int>     <dbl>
1 Argentina Americas   1952    62.5 17876956     5911.
2 Argentina Americas   1957    64.4 19610538     6857.
3 Argentina Americas   1962    65.1 21283783     7133.
4 Argentina Americas   1967    65.6 22934225     8053.
5 Argentina Americas   1972    67.1 24779799     9443.
6 Argentina Americas   1977    68.5 26983828    10079.

Interpretação: Este filtro seria equivalente a selecionar apenas dados de filiais localizadas nas Américas para uma análise regional de desempenho.

Pensando como um Analista de Negócios

Perguntas de negócios traduzidas para filter()

Pergunta de Negócio Código com filter()
Quais países tiveram PIB per capita acima de $20.000 em 2007? filter(year == 2007 & gdpPercap > 20000)
Quais países da Ásia tiveram expectativa de vida acima de 75 anos? filter(continent == “Asia” & lifeExp > 75)
Quais países tiveram população superior a 100 milhões em 2007? filter(year == 2007 & pop > 100000000)
Quais países não são da Europa nem da América? filter(continent != “Europe” & continent != “Americas”)

Dica prática: Comece sempre pensando na pergunta de negócio, depois traduza para o código

Múltiplas condições com filter()

Combinando condições

Há duas maneiras principais de combinar condições:

# Método 1: Usando o operador & (E lógico) - equivalente ao método 1
europeus_2007_alt <- gapminder %>%
  filter(continent == "Europe" & year == 2007)

# Método 2: Usando o operador | (OU lógico)
europa_ou_asia <- gapminder %>%
  filter(continent == "Europe" | continent == "Asia")

Dica importante:

  • Com & (“E” lógico) ambas as condições precisam ser TRUE para que a linha seja mantida

  • Com | (“OU” lógico), apenas uma das condições precisa ser TRUE

Filtrando com operadores relacionais

Exemplos com diferentes operadores

# Países com alta expectativa de vida (maior que 80 anos)
alta_exp_vida <- gapminder %>%
  filter(lifeExp > 80)

# Países com PIB per capita abaixo de 500 dólares
baixo_pib <- gapminder %>%
  filter(gdpPercap < 500)

# Anos diferentes de 2002
nao_2002 <- gapminder %>%
  filter(year != 2002)

Utilize operadores relacionais para:

  • Encontrar valores acima/abaixo de limites importantes
  • Excluir períodos ou categorias específicas
  • Identificar casos extremos ou outliers

Combinando filter() com outras funções

A importância da ordem das operações

# Países europeus em 2007, mostrando apenas país e expectativa de vida
europeus_lifeExp_2007 <- gapminder %>%
  filter(continent == "Europe" & year == 2007) %>%
  select(country, lifeExp)

# Ordenando o resultado por expectativa de vida (decrescente)
europeus_lifeExp_2007_ordenado <- gapminder %>%
  filter(continent == "Europe" & year == 2007) %>%
  select(country, lifeExp) %>%
  arrange(desc(lifeExp))

head(europeus_lifeExp_2007_ordenado)

Ordem correta das operações:

  1. Comece com filter()
  2. Use select() depois de filter
  3. Se inverter a ordem, a função filter() pode falhar se você removeu colunas necessárias

Lembre-se: primeiro filter(), depois select()!

Erros Comuns e Como Evitá-los

Os 4 erros mais comuns com filter()

Erro Errado Correto
Usar = em vez de == filter(continent = “Europe”) filter(continent == “Europe”)
Esquecer as aspas em nomes filter(continent == Europe) filter(continent == “Europe”)
Não salvar o resultado gapminder %>% filter(year == 2007) dados_2007 <- gapminder %>% filter(year == 2007)

Exemplo Completo Comum

Países europeus com alta expectativa de vida em 2007?

# Países europeus com expectativa de vida acima de 78 anos em 2007
resultado_final <- gapminder %>%
  # Filtrar por continente, ano e expectativa de vida
  filter(continent == "Europe" & year == 2007 & lifeExp > 78) %>%
  # Selecionar variáveis de interesse
  select(country, lifeExp, gdpPercap) %>%
  # Ordenar por expectativa de vida (decrescente)
  arrange(desc(lifeExp))

# Mostrar resultados
resultado_final

Observe o fluxo de análise:

  1. Filtramos os dados com critérios específicos
  2. Selecionamos apenas as variáveis de interesse
  3. Ordenamos os resultados para facilitar a interpretação
  4. Todo o processo forma um “pipeline” de análise limpo e legível

Resumo: Função filter()

O que você precisa lembrar

  1. Para que serve: Selecionar apenas as linhas (observações) que atendem a determinadas condições

  2. Sintaxe básica:

dados %>% filter(condição1, condição2, ...)
  1. Comparações mais usadas:

    • Igual: == (dois sinais de igual!)
    • Diferente: !=
    • Maior/Menor: >, <, >=, <=
  2. Múltiplas condições:

    • Todas as condições (E): filter(condição1 & condição2)
    • Qualquer condição (OU): filter(condição1 | condição2)
  3. Lembre-se sempre de salvar o resultado:

nova_df <- dados %>% filter(...)

Sua vez

Exercícios Práticos

Nível 1: Primeiros Passos com filter()

  1. Complete o código abaixo para filtrar apenas os países das Americas no ano de 2007.
paises_america_2007 <- gapminder %>%
  filter(continent == "___" & year == ___)
  1. Filtre a data frame gapminder para mostrar apenas os dados do Brasil.

Nível 2: Combinando Condições

  1. Crie um filtro para encontrar países que atendam a TODAS estas condições:

    • Pertencem à Ásia
    • Têm população acima de 50 milhões
    • Dados do ano 2007
  2. Desafio: Encontre países com expectativa de vida acima de 75 anos, mas PIB per capita abaixo de 10.000 dólares em 2007.

Dica: Comece com um filtro simples e depois adicione condições gradualmente

Atualizando os Repositórios

Instruções

  1. No terminal do RStudio, verifique quais arquivos/pastas foram modificados ou criados com:
git status
  1. Você pode adicionar todos os arquivos de uma vez com:
git add .
  1. Execute git status novamente para confirmar que todos os arquivos foram adicionados (aparecerão em verde sob “Changes to be committed”):
git status
  1. Se tudo estiver em verde, faça um commit com uma mensagem descritiva:
git commit -m "atualizacoes aula 5"
  1. Se algum arquivo ou pasta ainda aparecer em vermelho após o segundo git status, adicione as pastas/arquivos um por um:
git add relatorios/05-relatorio/05-relatorio.qmd
  1. Execute git status novamente e faça o commit quando todos os arquivos estiverem em verde:
git commit -m "atualizacoes aula 5"
  1. Envie o repositório local atualizado para o GitHub:
git push origin main

Referências

BROMAN, K. W.; WOO, K. H. Data Organization in Spreadsheets. The American Statistician, v. 72, n. 1, p. 2–10, 2018.