Introdução à Ciência de Dados

Prof. Washington Santos da Silva

IFMG - Campus Formiga

7 de maio de 2025

Diário de Bordo

O que vimos até hoje?

  • Aula 1 ✅

    • Introdução e Contextualização ✅
    • O que é Ciência de Dados? ✅
    • Papéis Profissionais na Área de Dados ✅
    • Áreas de Aplicações ✅
    • Habilidades Interpessoais e Analíticas ✅
    • Apresentação da Disciplina ✅
  • Aula 2 ✅

    • Metodologia CRISP-DM ✅

    • Tipos de Análise ✅

      • Descritiva ✅
      • Diagnóstica ✅
      • Preditiva ✅
      • Prescritiva ✅
    • Configurações: Git/GitHub ✅

  • Aula 3 ✅

    • Introdução ao RStudio ✅

      • Criação do seu Projeto RStudio da Disciplina ✅
  • Aula 4 ✅

    • Introdução ao Git e GitHub ✅

      • Criação do seu repositório do projeto RStudio da disciplina no GitHub ✅
  • Aula 5 ✅

    • Breve Revisão do IDE RStudio ✅

    • Introdução ao Sistema de Publicação Quarto ✅

    • Sessão Prática Guiada com Relatório 1 ✅

      • Execução dos comandos git essenciais ✅
  • Aula 6 ✅

    • Parte I ✅

      • O Relatório Junglivet e a Metodologia CRISP-DM ✅
      • Primeiro contato com a linguagem R por meio dos códigos do relatório ✅
    • Parte II ✅

      • Para alunos com projetos estruturados ✅
      • Atividade prática ✅
      • Para alunos com dificuldades técnicas ✅
      • Atendimento individualizado para estruturação de projetos ✅
  • Aula 7 ✅

    • Introdução ao sistema Quarto (continuação) ✅

      • Gerar relatório no formato pdf ✅
      • Gerar relatório no formato docx ✅
    • Introdução à Linguagem R (continuação) ✅

      • Conceitos: Variáveis e observações ✅
      • Estrutura tabular organizada de dados ✅
      • Tipos e classes de dados principais em R ✅
      • Estruturas de dados: vetores e data frames ✅
  • Aula 8 ✅

    • Início do estudo do pacote dplyr para manipulação de dados ✅

      • CRISP-DM: Fase 2 (Entendimento dos dados) e Fase 3 (Preparação dos dados) ✅
        de um projeto de análise ou ciência de dados ✅
      • O que é o dplyr? ✅
      • A Filosofia Tidy Data (Dados Organizados) ✅
      • Dados Organizados (Tidy Data) ✅
      • Por que usar o dplyr? ✅
      • Fluxo de trabalho com dplyr ✅
      • Boas Práticas com dplyr ✅
      • Função dplyr::select() ✅
      • Função dplyr::filter() ✅
  • Aula 9 ✅

    • Solução dos exercícios práticos sobre as funções select e filter ✅
    • Função dplyr::mutate() ✅
  • Aula 10 ✅

    • Soluções dos exercícios práticos sobre a função mutate ✅
    • funções dplyr::group_by(), dplyr::summarize() e dplyr::arrange() ✅

Nesta Aula

Tópicos

  • Metodologia CRISP-DM e Pacote dplyr

  • Revisão sobre Dados Organizados (Tidy Data)

  • Exemplos de Dados Desorganizados Comuns em Administração

  • Introdução ao Pacote tidyr: Função pivot_longer

Informações sobre a Avaliação 1

Parte 1 - Informações Gerais

  • A avaliação ocorrerá na aula do dia 14 de maio (quarta-feira)

  • Formato: individual, com permição de colaboração entre colegas para esclarecimento de dúvidas

  • Recursos permitidos: todo o material da disciplina (disponível no site da disciplina) poderá ser consultado durante a avaliação

  • Ferramentas de IA: modelos de linguagem como ChatGPT podem ser utilizados para auxiliar em questões envolvendo código R, sistema Quarto e sintaxe específica

  • Processo de resolução/entrega:

    • Você receberá um template de arquivo Quarto (.qmd)
    • Deverá resolver as questões propostas dentro deste template
    • Ao finalizar, renderize o arquivo para gerar um documento PDF
    • O arquivo PDF gerado constituirá sua solução oficial e deverá ser enviado para avaliação

Informações sobre a Avaliação 1

Parte 2 - Tópicos da Avaliação

  1. Aplicação das Fases 1-3 do CRISP-DM

    • Entendimento do negócio e dos dados
    • Entendimento dos dados: estrutura, variáveis e observações
  2. Importação de arquivo de dados (.csv)

    • Uso do pacote here para definir caminhos relativos de arquivos de dados
    • Uso do pacote readr para importar arquivos .csv
  3. Organização de Dados com tidyr

    • Identificação de estrutura desorganizada
    • Transformação para formato adequado com pivot_longer()
  4. Manipulação de Dados com dplyr

    • Filtragem, seleção e ordenação de dados
    • Criação de novas variáveis e categorias
    • Agrupamento e cálculo de estatísticas
    • Construção de pipelines com o operador pipe (%>%)
  5. Comunicação de Resultados

    • Apresentação de resultados com tabelas kableExtra
    • Uso do sistema Quarto para geração de relatórios de análise de dados no formato pdf ou html.

Informações sobre a Avaliação 1

Parte 3 - Dicas

  • Revise e estude os relatórios: Eles contém exemplos de todos os tópicos que serão abordados

  • Revise os principais slides das aulas

  • Entenda o significado das funções: Mais importante que decorar sintaxe é entender quando e por que usar cada função

  • Use LLMs estrategicamente: Para ajudar com sintaxe R, para entender funções e possíveis erros, não para resolver problemas conceituais

  • Leia atentamente: Muitos erros vêm de uma leitura superficial e apressada das questões

Arquivo para esta Aula

Instruções

  • Abra o RStudio e o seu Projeto da Disciplina

  • Crie a subpasta 05-relatorio dentro da pasta relatorios.

  • Acesse o site da disciplina e baixe o arquivo 05-relatorio.zip

  • Descompacte o arquivo, copie/recorte o arquivo 05-relatorio.qmd e cole dentro da subpasta 05-relatorio.

Diretrizes para Aulas Mais Produtivas

🔊 Mantenha conversas em volume baixo

⌨️ 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 e Pacote dplyr

Metodologia 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

CRISP-DM: Fase 3 - Preparação dos dados

As 6 Funções Principais do dplyr que Estudamos:

Função Propósito
dplyr::filter() Seleciona variáveis (linhas) baseadas em condições
dplyr::select() Seleciona observações (colunas) específicas
dplyr::mutate() Cria novas variáveis (colunas)
dplyr::group_by() Agrupa dados por categorias
dplyr::summarize() Calcula estatísticas resumidas
dplyr::arrange() Ordena linhas

CRISP-DM e Pacote dplyr

Pacote dplyr para a Fase 3 (Preparação dos Dados)

  • O pacote dplyr fornece funções críticas para a Fase 3 da CRISP-DM, permitindo transformar dados brutos organizados em um formato analítico de qualidade:

  • filter(): permite filtrar apenas as observações (linhas) relevantes para análise, por exemplo, períodos específicos de tempo.

  • select(): permite selecionar apenas as variáveis (colunas) relevantes para um determinado problema.

  • mutate(): permite criar novas variáveis usando as existentes, por exemplo, KPIs ou categorias, que agregam valor analítico.

  • group_by() + summarize(): perimitem transformar dados brutos em resumos estatísticos por categorias.

  • arrange(): permite ordenar as observações (linhas) de uma data frame com base nos valores de uma ou mais variáveis (colunas), gerando uma sequência lógica que facilita a interpretação humana.

  • Unidas pelo operador pipe (%>%), estas funções criam um pipeline (fluxo de operações) limpo e compreensível

Um Pipeline Completo com dplyr

# inicia com a df (gapminder) e salva o resultado final
relatorio_expectativa <- gapminder %>%
  # Filtra apenas os dados de 2007
  filter(year == 2007) %>%
  # Agrupa por continente
  group_by(continent) %>%
  # Calcula estatísticas por continente
  summarize(
    expectativa_media = mean(lifeExp),
    expectativa_minima = min(lifeExp),
    expectativa_maxima = max(lifeExp),
  ) %>%
  # Ordena do maior para o menor
  arrange(desc(expectativa_media))

# Visualiza o resultado final
relatorio_expectativa
# A tibble: 5 × 4
  continent expectativa_media expectativa_minima expectativa_maxima
  <fct>                 <dbl>              <dbl>              <dbl>
1 Oceania                80.7               80.2               81.2
2 Europe                 77.6               71.8               81.8
3 Americas               73.6               60.9               80.7
4 Asia                   70.7               43.8               82.6
5 Africa                 54.8               39.6               76.4

Tabelas Profissionais

Limitações das Data Frames Brutas em Relatórios Profissionais

  • As data frames produzidas pelos pipelines do dplyr são excelentes para análise, mas não são adequadas para apresentação em relatórios profissionais.

  • A linguagem R oferece várias soluções para esta limitação:

    • O pacote kableExtra (que veremos a seguir) para relatórios HTML e PDF
    • O pacote gt para tabelas altamente personalizáveis
  • Estes pacotes permitem transformar dados analíticos em tabelas com qualidade profissional, incluindo:

    • título, nomes das colunas e notas formatadas
    • destaque visual para informações importantes
    • personalização de cores, bordas e estilos de texto
    • entre outras.

O Pacote kableExtra

Transformando tabelas básicas em apresentações profissionais

  • O pacote kableExtra estende as funcionalidades da função básica kable do R, permitindo a criação de tabelas com qualidade de publicação.

  • Foi desenvolvido para trabalhar com tabelas em documentos HTML e PDF (LaTeX).

  • Permite formatar tabelas para relatórios profissionais, artigos acadêmicos e apresentações.

  • É extremamente útil na Fase 6 do CRISP-DM (Implantação), quando precisamos comunicar resultados de forma clara e atrativa.

Sintaxe Básica do kableExtra

Fluxo básico com kableExtra

#  inicie com uma data frame
tabela_formatada <- dados %>%
  # Transforme a data frame em tabela básica
  kable(
    caption = "Título da Tabela",
    col.names = c("Nome1", "Nome2"), # Renomear colunas
    digits = 2,                      # Casas decimais
    format.args = list(decimal.mark = ",", big.mark = ".") # Define vírgula como separador decimal e ponto como separador de milhares
  ) %>%
  # Adicionar estilos
  kable_styling(
    bootstrap_options = c("striped", "hover"),
    full_width = FALSE,
    position = "center"
  )
  • kable(): Converte a data frame em tabela básica
  • kable_styling(): Aplica estilos visuais à tabela
  • Outros elementos podem ser adicionados em sequência com o pipe (%>%)

Integrando kableExtra com dplyr

Pipeline para relatórios profissionais

Em projetos de análise de dados completos, o fluxo geralmente é:

  1. Preparar dados com tidyr e dplyr
  2. Analisar dados com dplyr (filter, select, group_by, etc.)
  3. Visualizar resultados com ggplot2 (gráficos) e kableExtra (tabelas)

Um pipeline completo pode é similar com:

# Pipeline completo de análise até apresentação
dados_brutos %>%
  # Fase de limpeza e preparação
  filter(...) %>%
  select(...) %>%
  mutate(...) %>%
  
  # Fase de análise e agregação
  group_by(...) %>%
  summarize(...) %>%
  
  # Fase de apresentação em tabela
  kable(...) %>%
  kable_styling(...) %>%
  column_spec(...)

Este fluxo integrado representa as fases 3, 4 e 6 do CRISP-DM.

Resumo

Pacote kableExtra

  1. Para que serve: Transformar tabelas de dados simples em tabelas profissionais para relatórios, apresentações e publicações.

  2. Sintaxe básica:

dados %>%
  kable(...) %>%
  kable_styling(...) %>%
  ... outras personalizações ...
  1. Funções principais:

    • kable(): Converte data frame em tabela base
    • kable_styling(): Aplica estilos gerais à tabela
    • column_spec() e row_spec(): Personalizações específicas
    • footnote(): Adiciona notas de rodapé
  2. Integrações estratégicas:

    • Ideal no final de pipelines dplyr para apresentar resultados
    • Complementar aos gráficos do ggplot2 em relatórios
  3. Benefícios em Administração:

    • Eleva a qualidade visual de relatórios gerenciais
    • Facilita a comunicação de insights de dados para gestores
    • Permite destacar KPIs e métricas críticas para tomada de decisão

Tabela com o Pacote KableExtra

Tabela 1: Expectativa de Vida (em anos) por Continente (2007)
# inicia com a df contendo o resultado do pipeline
relatorio_expectativa %>%
  # Converte a df em uma tabela kable (tabela básica HTML/LaTeX)
  kable(
    # Renomeia as colunas para português
    col.names = c(
      "Continente", "Expectativa Média", "Expectativa Mínima", "Expectativa Máxima"
    ),
    # Formata os números com 1 casa decimal
    digits = 1,
    # vírgula como separador decimal
    format.args = list(decimal.mark = ",")
  ) %>%
  # Adiciona estilo à tabela para melhorar o visual
  kable_classic(
    # tamanho da fonte
    font_size = 25,
    # Impede que a tabela ocupe toda a largura disponível
    full_width = FALSE,
    # # Centraliza a tabela
    position = "center"
  ) %>%
  # Aplica formatação específica à coluna da expectativa média
  column_spec(
    # Aplica a formatação à segunda coluna (Expectativa Média)
    2,
    # Coloca o texto em negrito para melhor destaque
    bold = TRUE,
    # Define a cor dos números como branco
    color = "white",
    # Aplica um gradiente de cores ao fundo das células
    background = spec_color(
      # A expectativa_media determinar a intensidade das cores
      relatorio_expectativa$expectativa_media,
      # início do gradiente com intensidade alta
      begin = 0.9,
      # fim do gradiente com intensidade baixa
      end = 0.1,
      # paleta de cores "viridis" (azul-verde-amarelo)
      option = "viridis",
      # 1 = valores mais altos recebem cores mais intensas
      direction = 1
    )
  )

Tabela: Código sem Comentários

Tabela 2: Expectativa de Vida (em anos) por Continente (2007)
relatorio_expectativa %>%
  kable(
    col.names = c("Continente", "Expectativa Média", "Expectativa Mínima", "Expectativa Máxima"),
    digits = 1,
    format.args = list(decimal.mark = ",")
  ) %>%
  kable_classic(
    font_size = 25,
    full_width = FALSE,
    position = "center"
  ) %>%
  column_spec(
    2,
    bold = TRUE,
    color = "white",
    background = spec_color(
      relatorio_expectativa$expectativa_media,
      begin = 0.9,
      end = 0.1,
      option = "viridis",
      direction = 1
    )
  )

Tabela 3: Expectativa de Vida (em anos) por Continente (2007)
Continente Expectativa Média Expectativa Mínima Expectativa Máxima
Oceania 80,7 80,2 81,2
Europe 77,6 71,8 81,8
Americas 73,6 60,9 80,7
Asia 70,7 43,8 82,6
Africa 54,8 39,6 76,4

Dados Desorganizados para Análise

Dados Desorganizados em Administração:

  • Entretanto, o pacote dplyr foi desenvolvido para trabalhar com dados organizados (tidy data).

  • Considere os seguintes dados desorganizados (Por que?):

| 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    |
  • Nesses casos, precisamos do pacote tidyr do tidyverse para torná-los organizados antes de utilizar as funções do pacote dplyr.

  • Antes, vamos revisar o conceito de dados organizados (tidy data) para análise.

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 Fig. 1 ilustra o conceito de dados organizados visualmente.

Figura 2: 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

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

  1. 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 Desorganizados

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

  1. 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 |

Dados Desorganizados

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

  1. Variáveis em linhas e colunas: Inconsistência na localização das variáveis

    • Ex: Planilha de desempenho onde ROE aparece como coluna, mas Lucro Líquido aparece 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      |

Outro Exemplo do Caso 2

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          |
  • 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

Planilhas Eletrônicas

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.

Planilhas Eletrônicas

Como Minimizar Riscos ao Usar Planilhas

  • Dada a ubiquidade das planilhas nas organizações…

  • Se precisar usar planilhas para dados, siga estas boas práticas:

    • Separe armazenamento e análise: Mantenha o arquivo original apenas para armazenamento (nunca modifique)

    • Crie cópias para análises e visualizações

    • Exporte para CSV quando for analisar em R ou Python

    • Siga as diretrizes de Broman e Woo (2018) que veremos a seguir

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.

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.

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)

  • Nas aulas anteriores, aprendemos a usar o pacote dplyr para manipular dados que já estavam no formato correto (tidy data)

  • 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

Função pivot_longer

  • 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).

    • Ou seja, é muito útil para organizar dados para análise

    • Ex: Transformar colunas de trimestres (T1, T2, T3, T4) 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 o pacote tidyr oferece diversas outras funções úteis para a organização de dados para análise

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 com tabelas ou gráficos…

Fluxo de Trabalho

Figura 3: Fluxo para organizar dados para anális.

A Função tidyr::pivot_longer

Objetivos de Aprendizagem

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 eletrônicas em dados organizados para análise (tidy data)

  • A Fig. 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

Organizando dados na prática

  • A seguir, vocês aplicarão os conceitos apresentados em exercícios que simulam situações reais de análise de dados

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

    • Identificação de dados desorganizados
    • Aplicação da função pivot_longer()
    • Criação de estruturas organizadas para análise
  • 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.

Bibliografia Recomendada e Referências

Bibliografia Recomendada

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 11"
  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 11"
  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.