Introdução à Ciência de Dados

Análise Exploratória de Dados - Gráfica

Prof. Washington Santos da Silva

IFMG - Campus Formiga

11 de junho 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() ✅
  • Aula 11 ✅

    • Metodologia CRISP-DM e Pacote dplyr ✅
    • Revisão sobre Dados Organizados (Tidy Data) ✅
    • Exemplos de Dados Desorganizados Comuns em Administração ✅
    • Pacote tidyr: Função pivot_longer ✅
  • Aula 12 ✅

    • Metodologia CRISP-DM e o tidyverse ✅
    • Dados Organizados: Potencializando Análises ✅
  • Aula 13 ✅

    • Avaliação 1 ✅
  • Aula 14 ✅

    • Tipos Básicos de joins do pacote dplyr ✅
  • Aula 15 ✅

    • Variáveis Aleatórias em Finanças ✅
    • Distribuições de Probabilidade ✅
    • Início: Distribuição Normal (ou Gaussiana) ✅
  • Aula 16 ✅

    • Distribuição Normal (ou Gaussiana) - Parte 2 ✅
    • Características da Distribuição de uma VA ✅
      • Valor Esperado (Média) ✅
  • Aula 17 ✅

    • Características da Distribuição de uma VA ✅

      • Variância e Desvio-Padrão ✅
      • Variância: Propriedades Básicas ✅
      • Aplicação: Valor-em-Risco (VaR) ✅
      • Assimetria e Curtose ✅
  • Aula 18 ✅

    • Características da Distribuição de uma VA ✅

      • Covariância e Correlação ✅
      • Fundamentos de Simulação de Monte Carlo ✅
  • Aula 19 ✅

    • Teoria da Probabilidade e Análise Estatística de Dados ✅

    • CRISP-DM e Análise Exploratória de Dados ✅

    • Análise Exploratória Numérica ✅

      • Medidas de Posição (ou de Tendência Central) ✅
      • Medidas de Variabilidade ✅
      • Medidas de Correlação ✅
  • Aula 20 ✅

    • Análise Exploratória Gráfica ✅

      • Visualização de Dados e o Pacote ggplot2 ✅

      • Gráficos para Visualizar a Distribuição de Variáveis Numéricas ✅

        • Histograma ✅
        • Densidade Empírica (ou Kernel da Densidade) ✅
        • Boxplot ✅
        • Boxplot Comparativo ✅

Na Última Aula

Tópicos Vistos

  • Visualização de Dados e o Pacote ggplot2

  • Gráficos Univariados para Variáveis Numéricas:

    • Histograma
    • Densidade Empírica (ou Kernel da Densidade)
    • Boxplot
  • Gráfico Bivariado:

    • Boxplot Comparativo - Variável Numérica vs Variável Categórica

Nesta Aula

Tópicos

  • Gráfico Univariado para Variáveis Categóricas:

    • Gráfico de Barras (Barplot)
  • Gráficos Bivariados:

    • Gráficos de Barras Agrupadas e Empilhadas - Variáveis Categóricas
    • Gráfico de Dispersão - Variáveis Numéricas
  • Gráfico para Séries Temporais:

    • Gráfico de Linha Univariado (1 Série Temporal)
    • Gráfico de Linha Bivariado (2 Séries Temporais)

Arquivo para esta Aula (21)

Instruções

  • Abra o RStudio e o seu Projeto da Disciplina

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

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

  • Descompacte o arquivo, copie/recorte o arquivo 13-relatorio.qmd e cole dentro da subpasta 13-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

Gráficos para Visualizar a Distribuição de Variáveis Categóricas

Variáveis Categóricas

Relembrando

Variáveis categóricas, também conhecidas como variáveis qualitativas, são variáveis que representam categorias ou níveis que podem ser usadas para rotular diferentes atributos da variável.

Tipos de Variáveis Categóricas:

  • Nominais: Não existe uma ordem inerente entre as categorias. Exemplos incluem marcas de empresas, cor de um carro, ou gênero.

  • Ordinais: Existe uma ordem ou ranking claro entre as categorias, mas os intervalos entre as categorias não são necessariamente iguais ou conhecidos. Exemplos são níveis de educação (fundamental, médio, superior), satisfação do cliente (satisfeito, neutro, insatisfeito), etc.

Elas são essenciais para muitos tipos de pesquisa científica, social e de mercado, onde a classificação ou categorização desempenha um papel muito importante na análise dos dados coletados.

Gráfico de Barras

Definição

  • Um gráfico de barras utiliza barras retangulares para representar a distribuição dos valores de uma variável categórica, com a altura de cada barra proporcional à frequência absoluta ou relativa de cada categoria.

  • Estas barras podem ser organizadas verticalmente ou horizontalmente.

  • É comumente aplicado em análises que envolvem variáveis categóricas ou discretas, facilitando a interpretação e comparação dos valores representados.

Gráfico de Barras - Exemplo Real

Matéria do Nexo Jornal

Sintaxe Básica do ggplot2

Relembrando - Construção de Gráficos por Camadas

# 1. Sistema de coordenadas vazio e mapeamento de variáveis para os eixos
ggplot(data = diamonds, 
       mapping = aes(x = price))

# 2. Adiciona geometria/tipo de gráfico (histograma)
ggplot(data = diamonds, 
       mapping = aes(x = price)) +
  geom_histogram(bins = 30)

# 3. Adiciona títulos e rótulos dos eixos
ggplot(data = diamonds, 
       mapping = aes(x = price)) +
  geom_histogram(bins = 30) +
  labs(x = "Preço (US$)", 
       y = "Frequência", 
       title = "Distribuição de Preços")

# 4. Define um tema
ggplot(data = diamonds, 
       mapping = aes(x = price)) +
  geom_histogram(bins = 30) +
  labs(x = "Preço (US$)", 
       y = "Frequência", 
       title = "Distribuição de Preços") +
  theme_minimal()

Dados dos Exemplos

Data Frame Marriage do Pacote mosaicData

  • Vamos utilizar variáveis categóricas da data frame Marriage do pacote mosaicData para criar gráficos de barras.

  • A data frame Marriage contém dados reais de uma pesquisa sobre casamentos realizada pelo National Center for Family & Marriage Research (NCFMR) dos EUA.

  • Inclui informações sobre 1.000 casamentos, incluindo a raça dos cônjuges, variável race, que possui quatro categorias: “White”, “Black”, “Hispanic” e “American Indian”.

  • Inclui ainda outras variáveis como marital_status (estado civil), sign (signo astrológico), education (nível de escolaridade), entre outras.

Gráfico de Barras Exploratório

# gráfico de barras simples da distribuição de race
ggplot(Marriage, aes(x = race)) + 
  geom_bar()

Gráfico de Barras Exploratório

Gráfico de Barras Exploratório

# salva o gráfico no objeto grafico_barras_exploratorio
grafico_barras_simples <-
# gráfico de barras simples da distribuição de raça
ggplot(Marriage, aes(x = race)) + 
  geom_bar() + 
  # inverte os eixos
  coord_flip()

# exibe o gráfico
grafico_barras_simples

Inverter os Eixos

  • É uma boa prática inverter os eixos de um gráfico de barras para facilitar a leitura, especialmente quando há muitas categorias.

Gráfico de Barras Exploratório

Tabelas de Frequência

Descrição

  • Tabelas de frequência são úteis para resumir a distribuição de uma variável categórica, por exemplo, seja a variável categórica ordinal “nível de escolaridade dos respondentes de uma pesquisa” que entrevistou 200 pessoas.

  • Uma tabela de frequência para tabular os resultados da pesquisa sobre a variável “nível de escolaridade dos respondentes” poderia ser:

Tab. de Frequência do Nível de Escolaridade dos Respondentes
Categoria Frequência Absoluta (\(fi\)) Frequência Relativa Frequência Percentual (%)
Ensino Fundamental 45 0,225 22,5%
Ensino Médio 78 0,390 39,0%
Ensino Superior 62 0,310 31,0%
Pós-graduação 15 0,075 7,5%
Total 200 1,000 100,0%
  • Frequência Relativa: \(fi / n\)
  • Frequência Percentual: \((fi / n) \times 100\)

Onde:

  • \(fi\) = frequência absoluta da categoria i

  • \(n\) = total de observações

  • Essas tabelas foram muito usadas para apresentar os resultados de pesquisas antes da popularização dos gráficos de barras, mas ainda são úteis para apresentar resultados de pesquisas com envolvendo variáveis categóricas.

Tabelas de Frequência Exploratória em R

Função table

  • A função interna table() é usada para criar tabelas de frequência exploratórias de uma variável categórica.

  • A função table() conta o número de ocorrências de cada valor (nível) da variável categórica e retorna uma tabela com as frequências absolutas.

  • Sua sintaxe básica é:

table(data_frame$variavel_categorica)
  • Útil para explorar numericamente a distribuição de uma variável categórica.

Tabelas de Frequência Exploratória em R

# tabela de frequencia com table
table(Marriage$race)

American Indian           Black        Hispanic           White 
              1              22               1              74 

Tabelas de Frequência em R com dplyr

Descrição

  • Também podemos usar o pacote dplyr para criar tabelas de frequência em R.

  • A função dplyr::count() conta o número de ocorrências de cada valor (nível) da variável categórica e retorna uma data frame com duas colunas:

    • a coluna com os níveis da variável categórica e
    • a coluna com as frequências absolutas de cada nível.
  • E a função dplyr::arrange() pode ser usada para ordenar os resultados por frequência absoluta, relativa ou percentual.

  • Podemos usar a função dplyr::mutate() para calcular a frequência relativa e a frequência percentual de cada nível da variável categórica.

Tabela de Frequência com dplyr

# Preparação dos dados para o gráfico

# Calcula o número de participantes em cada nível de raça
tabela_raca_frequencia <- Marriage %>% 
  # conta o número de participantes por raça
  count(race) %>% 
  # ordena os dados pela frequência em ordem CRESCENTE (menor para maior)
  # vamos usar ordem crescente para compensar o efeito do coord_flip()
  arrange(n) %>%
  # sincroniza os niveis do factor com a ordem atual das linhas
  mutate(race = factor(race, levels = race))

# exibe a tabela (dados em ordem crescente)
tabela_raca_frequencia
             race  n
1 American Indian  1
2        Hispanic  1
3           Black 22
4           White 74

Gráfico de Barras com Rótulos nas Barras - Frequência Absoluta

# Salva o gráfico em objeto
grafico_barras_freq <- 
# Cria um sistema de coordenadas para o gráfico com x sendo a raça e y sendo a frequência
ggplot(tabela_raca_frequencia, aes(x = race, y = n)) + 
  # Cria o gráfico de barras
  # stat="identity" usa os valores exatos de x = 'n' (frequência)
  geom_bar(stat="identity") +
  # Inverte os eixos
  coord_flip() +
  # geom_text() adiciona rótulos (frequência) às barras
  # hjust = -0.5: posiciona o texto um pouco à direita das barras horizontais
  geom_text(aes(label = n), hjust = -1) + 
  # Adiciona rótulos aos eixos e título do gráfico
  labs(x = "Raça", 
       y = "Número de Participantes", 
       title  = "Distribuição dos Participantes por Raça") + 
  # Define um tema minimalista para o gráfico
  theme_minimal()

# Exibe o gráfico
grafico_barras_freq

Gráfico de Barras com Rótulos nas Barras - Frequência Absoluta

Gráfico de Barras com Rótulos nas Barras - Porcentagem

# Preparação dos dados para o gráfico

# Calcula o número e a porcentagem de participantes em cada nível de raça
tabela_raca_porcentagem <- Marriage %>% 
  # conta o número de participantes por raça
  count(race) %>% 
  # calcula a porcentagem de cada categoria
  # divide cada frequência (n) pelo total de observações
  mutate(porcentagem = n / sum(n)) %>%
  # ordena os dados pela frequência em ordem CRESCENTE (menor para maior)
  # vamos usar ordem crescente para compensar o efeito do coord_flip()
  arrange(n) %>%
  # sincroniza os niveis do factor com a ordem atual das linhas
  mutate(race = factor(race, levels = race))

# exibe a tabela (agora com frequência e porcentagem)
tabela_raca_porcentagem
             race  n porcentagem
1 American Indian  1    0.010204
2        Hispanic  1    0.010204
3           Black 22    0.224490
4           White 74    0.755102

Gráfico de Barras com Rótulos nas Barras - Porcentagem

# Salva o gráfico em objeto
grafico_barras_pct <- 
# Cria um sistema de coordenadas para o gráfico com x sendo a raça e y sendo a % 
ggplot(tabela_raca_porcentagem, 
       aes(x = race, y = porcentagem)) + 
  # Cria o gráfico de barras
  # stat="identity" usa os valores exatos de x = 'porcentagem'
  geom_bar(stat = "identity") +
  # inverte os eixos para barras horizontais (e ordem decrescente visual)
  coord_flip() +
   # geom_text() adiciona rótulos às barras
   # hjust = -0.3 posiciona o texto à direita das barras horizontais
   # scales::percent converte para porcentagem 0.25 → 25%
   geom_text(aes(label = scales::percent(porcentagem)), 
            hjust = -0.3) +
  # scale_y_continuous() define a formatação do eixo y
  # scales::percent converte os valores do eixo y para porcentagens
  scale_y_continuous(labels = scales::percent) + 
  # Adiciona rótulos aos eixos e título do gráfico
  labs(x = "Raça", 
       y = "% de Participantes", 
       title  = "Porcentagem de Participantes por raça") + 
  # Define um tema minimalista para o gráfico
  theme_minimal()


# exibe o gráfico
grafico_barras_pct

Gráfico de Barras com Rótulos nas Barras - Porcentagem

Gráfico de Barras para Publicação - Frequência

# Salva o gráfico em objeto
grafico_barras_freq_pub <- 
# Cria sistema de coordenadas: x = raça, y = frequência, fill = cores por categoria
ggplot(tabela_raca_frequencia, aes(x = race, y = n, fill = race)) + 
  # Cria barras usando geom_bar com stat="identity"
  geom_bar(stat = "identity") +
  # Inverte os eixos (barras horizontais)
  coord_flip() +
  # Adiciona rótulos de frequência nas barras
  # hjust = -0.1: posiciona o texto DO LADO DIREITO das barras (parte superior)
  # size = 6 e fontface = "bold" para melhor legibilidade
  geom_text(aes(label = n), 
            hjust = -0.3, 
            size = 6, 
            fontface = "bold") + 
  # Define cores personalizadas para cada categoria de raça
  scale_fill_manual(
    values = c(
      "White" = "coral2",
      "Black" = "coral2", 
      "Hispanic" = "grey70",
      "American Indian" = "grey70"
    )
  ) +
  # Aplica tema clássico (fundo branco, bordas pretas)
  theme_classic() +
  # Personaliza elementos visuais para qualidade de publicação
  theme(
    legend.position = "none",              # remove legenda (cores já identificam)
    plot.title = element_text(size = 15),  # título com fonte 15
    axis.text.y = element_text(size = 18), # rótulos eixo Y (raças) fonte 18
    axis.text.x = element_text(size = 16), # rótulos eixo X (números) fonte 16
    axis.title.x = element_blank(),        # remove título do eixo X
    axis.title.y = element_blank()         # remove título do eixo Y
  ) +
  # Define título e fonte
  labs(title = "Distribuição dos Participantes por Raça",
       caption = "Fonte: Pacote ggplot2")

# Exibe o gráfico
grafico_barras_freq_pub

Gráfico de Barras para Publicação - Frequência

Gráfico de Barras para Publicação - Porcentagem

# Salva o gráfico em objeto
grafico_barras_pct_pub <- 
# Cria sistema de coordenadas: x = raça, y = porcentagem, fill = cores por categoria
ggplot(tabela_raca_porcentagem, 
       aes(x = race, y = porcentagem, fill = race)) + 
  # Cria barras usando geom_bar com stat="identity"
  geom_bar(stat = "identity") +
  # Inverte os eixos para barras horizontais (e ordem decrescente visual)
  coord_flip() +
  # Adiciona rótulos de porcentagem nas barras
  # hjust = -0.1: posiciona o texto DO LADO DIREITO das barras (parte superior)
  # size = 6 e fontface = "bold" para melhor legibilidade
  # scales::percent() formata como porcentagem (0.25 → 25%)
  geom_text(aes(label = scales::percent(porcentagem)), 
            hjust = -0.1, 
            size = 6, 
            fontface = "bold") +
  # Define cores específicas para cada categoria de raça
  scale_fill_manual(
    values = c(
      "White" = "coral2",
      "Black" = "coral2", 
      "Hispanic" = "grey70",
      "American Indian" = "grey70"
    )
  ) +
  # Formata o eixo y como porcentagem E amplia o limite para acomodar os rótulos
  # expand = expansion(mult = c(0, 0.1)) adiciona 10% de espaço extra no limite superior
  scale_y_continuous(labels = scales::percent, 
                     expand = expansion(mult = c(0, 0.1))) + 
  # Aplica tema clássico (fundo branco, bordas pretas)
  theme_classic() +
  # Personaliza elementos visuais para qualidade de publicação
  theme(
    legend.position = "none",              # remove legenda (cores já identificam)
    plot.title = element_text(size = 15),  # título com fonte 15
    axis.text.y = element_text(size = 18), # rótulos eixo Y (raças) fonte 18
    axis.text.x = element_text(size = 16), # rótulos eixo X (%) fonte 16
    axis.title.x = element_blank(),        # remove título do eixo X
    axis.title.y = element_blank()         # remove título do eixo Y
  ) +
  # Define título e fonte
  labs(title = "Porcentagem de Participantes por Raça",
       caption = "Fonte: Pacote ggplot2")

# Exibe o gráfico
grafico_barras_pct_pub

Gráfico de Barras para Publicação - Porcentagem

Gráficos Bivariados

Variável Categórica vs Variável Categórica

Gráficos de Barras Agrupadas

Gráficos de Barras Agrupadas

  • Os gráficos de barras agrupadas são úteis para comparar a distribuição de uma variável categórica em relação a outra variável categórica.

  • No entanto, eles possuem algumas desvantagens que podem impactar sua eficácia e interpretação.

  • Por exemplo: Se uma ou ambas as variáiveis contém muitos valores possíveis (níveis), isso pode tornar o gráfico difícil de ler e interpretar.

  • Recomendado apenas em casos com poucos valores possíveis (níveis) para cada variável categórica.

  • Gráficos condicionais (facetas), são melhores do que gráficos de barras agrupadas.

Tabelas de Contingência

Descrição

  • Tabelas de contingência resumem a distribuição conjunta de duas variáveis categóricas, mostrando como as categorias de uma variável se relacionam com as categorias da outra.

  • Exemplo simplificado entre “Gênero” e “Preferência de Produto” (235 consumidores):

Tabela de Contingência
Gênero/Produto Produto A Produto B Total
Feminino 45 60 105
Masculino 80 50 130
Total 125 110 235
  • Frequência conjunta: \(n_{ij}\) = observações na categoria \(i\) (linha) e \(j\) (coluna)

  • Totais marginais:

    • Linha: \(n_{i \cdot} = \sum_j n_{ij}\)
    • Coluna: \(n_{\cdot j} = \sum_i n_{ij}\)
  • Utilidade: Identificar associações entre variáveis categóricas, base para gráficos bivariados entre duas variáveis categóricas e para testes de associação.

Tabela de Contingência com table()

# Cria tabela de contingência exploratória entre raça e signo astrológico
tabela_contingencia <- table(Marriage$race, Marriage$sign)
tabela_contingencia 
                 
                  Aquarius Aries Cancer Capricorn Gemini Leo Libra Pisces
  American Indian        0     0      0         0      0   0     0      0
  Black                  1     2      1         0      4   3     4      2
  Hispanic               0     0      0         0      0   0     0      1
  White                  6     8      7         2      5   4     3     13
                 
                  Saggitarius Scorpio Taurus Virgo
  American Indian           1       0      0     0
  Black                     3       0      2     0
  Hispanic                  0       0      0     0
  White                     5       7      4    10
# Adiciona os totais marginais
addmargins(tabela_contingencia)
                 
                  Aquarius Aries Cancer Capricorn Gemini Leo Libra Pisces
  American Indian        0     0      0         0      0   0     0      0
  Black                  1     2      1         0      4   3     4      2
  Hispanic               0     0      0         0      0   0     0      1
  White                  6     8      7         2      5   4     3     13
  Sum                    7    10      8         2      9   7     7     16
                 
                  Saggitarius Scorpio Taurus Virgo Sum
  American Indian           1       0      0     0   1
  Black                     3       0      2     0  22
  Hispanic                  0       0      0     0   1
  White                     5       7      4    10  74
  Sum                       9       7      6    10  98

Tabela de Contingência com dplyr

# Preparação dos dados para gráfico de barras agrupadas e empilhadas

# Cria tabela de contingencia entre raça e signo astrológico
tabela_bivariada <- Marriage %>% 
  # count() conta as combinações únicas de race e sign
  # sort = TRUE ordena pela frequência em ordem decrescente
  count(race, sign, sort = TRUE) 

# exibe a tabela de contingência
tabela_bivariada
              race        sign  n
1            White      Pisces 13
2            White       Virgo 10
3            White       Aries  8
4            White      Cancer  7
5            White     Scorpio  7
6            White    Aquarius  6
7            White      Gemini  5
8            White Saggitarius  5
9            Black      Gemini  4
10           Black       Libra  4
11           White         Leo  4
12           White      Taurus  4
13           Black         Leo  3
14           Black Saggitarius  3
15           White       Libra  3
16           Black       Aries  2
17           Black      Pisces  2
18           Black      Taurus  2
19           White   Capricorn  2
20 American Indian Saggitarius  1
21           Black    Aquarius  1
22           Black      Cancer  1
23        Hispanic      Pisces  1

Gráficos de Barras Agrupadas Exploratório - Frequência

# Criação do gráfico de barras agrupadas
grafico_barras_agrupadas <- 
ggplot(tabela_bivariada, aes(x = sign, y = n, fill = race)) +
  # geom_bar() cria o gráfico de barras agrupadas
  # stat = "identity": usa os valores exatos da coluna 'n' (frequências)
  # position = "dodge": agrupa as barras lado a lado
  geom_bar(stat = "identity", position = "dodge") + 
  # Adiciona rótulos com os valores de frequência nas barras
  geom_text(
    aes(label = n),              # exibe os valores da coluna 'n'
    colour = "white",            # cor do texto em branco
    size = 4,                    # tamanho da fonte
    vjust = 1.5,                 # posiciona o texto para baixo (dentro das barras)
    position = position_dodge(.9) # alinha o texto com as barras agrupadas
                                  # .9 corresponde à largura padrão do dodge
  ) +
  # Paleta de cores acessível para daltônicos
  scale_fill_brewer(
    name = "Raça", 
    type = "qual",
    palette = "Set1"
  )

# Exibe o gráfico
grafico_barras_agrupadas

Gráficos de Barras Agrupadas Exploratório - Frequência

Posicionamento de Texto com geom_text()

Parâmetros principais

  • position_dodge(): alinha com barras agrupadas
  • position_stack(): alinha com barras empilhadas

Gráficos de Barras Empilhadas Exploratório

Gráficos de Barras Empilhadas

  • Os gráficos de barras empilhadas também são úteis para comparar a distribuição de uma variável categórica em relação a outra variável categórica.

  • Possui a mesma limitação dos gráficos de barras agrupadas: se uma ou ambas as variáveis contêm muitos valores possíveis (níveis), isso pode tornar o gráfico difícil de ler e interpretar.

  • Recomendado apenas em casos com poucos valores possíveis (níveis) para cada variável categórica.

  • Gráficos condicionais (facetas), que veremos adiante, são melhores do que gráficos de barras empilhadas.

Gráficos de Barras Empilhadas Exploratório - Frequência

# Criação do gráfico de barras empilhadas
grafico_barras_empilhadas <-
  ggplot(tabela_bivariada, aes(x = sign, y = n, fill = race)) + 
  # geom_bar() cria as barras empilhadas
  # stat = "identity": usa os valores exatos da coluna 'n' (frequências)
  # position = "stack": empilha as barras umas sobre as outras (padrão)
  # Diferença do "dodge": em vez de lado a lado, as barras ficam sobrepostas
  geom_bar(stat = "identity", position = "stack") + 
  # Adiciona rótulos com os valores de frequência dentro de cada segmento
  geom_text(
    aes(label = n),                # exibe os valores da coluna 'n'
    colour = "white",              # cor do texto em branco (contraste)
    size = 4,                      # tamanho da fonte
    vjust = 1.2,                   # posiciona o texto ligeiramente para baixo
    position = position_stack(.9)  # alinha o texto de cada segmento empilhado
                                  # .9 = posiciona a 90% da altura de cada segmento
  ) +
  # Paleta de cores acessível para daltônicos
  # ColorBrewer "Set1": cores distintas e com bom contraste para texto branco
  scale_fill_brewer(
    name = "Raça",               # título da legenda
    type = "qual",               # qualitative: para variáveis categóricas
    palette = "Set1"             # paleta colorblind-friendly com cores escuras
  )

# Exibe o gráfico
grafico_barras_empilhadas

Gráficos de Barras Empilhadas Exploratório - Frequência

Não faça Isso! 😱

Nunca use gráficos de barras tridimensionais

Por que não?

Por que não usar Gráficos de Barras 3D?

Gráficos de barras tridimensionais (3D) podem parecer visualmente atraentes e modernos, mas são considerados uma má prática:

  • Distorção da Percepção

Gráficos de barras 3D tendem a distorcer a percepção visual dos valores que estão sendo representados. Isso ocorre porque a perspectiva tridimensional pode alterar visualmente o tamanho aparente das barras, fazendo com que algumas barras pareçam maiores ou menores do que realmente são, dependendo de sua posição no gráfico.

  • Dificuldade de Comparação

Comparar as alturas das barras em um gráfico 3D é mais difícil do que em um gráfico de barras 2D. Isso se deve à perspectiva tridimensional, que pode obscurecer partes do gráfico ou criar um alinhamento que dificulta a comparação direta dos valores.

  • Oclusão de Dados

Em gráficos 3D, barras que estão posicionadas na frente podem bloquear parcial ou totalmente a visão de barras atrás delas, especialmente em gráficos densos com muitas categorias. Isso pode ocultar dados importantes, levando a interpretações errôneas ou incompletas da informação apresentada.

  • Complexidade Desnecessária

A terceira dimensão em um gráfico de barras raramente adiciona informações úteis. Geralmente, essa dimensão é estética e não funcional, aumentando a complexidade visual do gráfico sem oferecer benefícios claros para a compreensão dos dados.

  • Gráficos Recomendados

  • Gráficos de barras 2D simples para comparações diretas

  • Gráficos de barras agrupadas para múltiplas variáveis

  • Gráficos Condicionais (Faceting) para várias categorias

Variável Numérica vs Variável Numérica

Gráfico de Dispersão

Definição

  • Um gráfico de dispersão, também conhecido como gráfico de pontos, é uma representação gráfica utilizada para exibir a correlação entre duas variáveis numéricas.

  • Ele é composto por um eixo horizontal (eixo x) e um eixo vertical (eixo y), cada um representando uma das variáveis. Os dados são representados como pontos no gráfico, onde a posição de cada ponto é determinada pelos valores das variáveis (x, y).

  • Este tipo de gráfico é particularmente útil:

  • para identificar padrões de correlação entre as variáveis — se é positiva (ambas as variáveis aumentam juntas), negativa (uma variável aumenta enquanto a outra diminui), ou nula (sem relação aparente).

  • permite a visualização de agrupamentos de dados e a presença de valores atípicos (outliers) que podem indicar erros de medição ou peculiaridades no conjunto de dados.

Gráficos de Dispersão

Padrões Identificáveis em Gráficos de Dispersão

Gráficos de Dispersão

Variabilidade/Dispersão da Nuvem vs Força da Correlação:

Covariância e Correlação

Descrição

  • Covariância: mede a direção da relação linear entre duas variáveis aleatórias. Pode ser positiva (ambas aumentam juntas), negativa (uma aumenta enquanto a outra diminui) ou nula (sem relação linear). Difícil de interpretar, pois depende das unidades de medida das variáveis e não é limitada a um intervalo específico.

\[ \begin{aligned} Cov(X,Y) &= E[(X - \mu_X)(Y - \mu_Y)], \\ &= E[XY] - \mu_X \mu_Y \end{aligned} \]

  • Correlação: é a covariância normalizada, e mede a direção e a força da relação linear entre duas variáveis. É adimensional e varia de -1 a +1,

\[ Cor(X,Y) = \rho_{xy} = \frac{Cov(X,Y)}{\sigma_X \sigma_Y} \,\, (-1 \leq \rho_{xy} \leq +1) \]

Coeficiente de Correlação

Coeficiente de Correlação de Pearson

  • O coeficiente de correlação de Pearson é um estimador do coeficiente de correlação populacional (\(\rho_{xy}\)), e é calculado como:

\[ r_{xy} = r = \frac{\sum_{i=1}^{n} (x_i - \bar{x}) (y_i - \bar{y})}{\sqrt{\sum_{i=1}^{n} (x_i - \bar{x})^2} \sqrt{\sum_{i=1}^{n} (y_i - \bar{y})^2} } \]

Sendo \(x_i\) e \(y_i\) os dados ou observações.

  • O coeficiente de correlação de Pearson é uma medida adimensional que varia de -1 a +1, e se :

  • \(r \approx +1\) indica uma correlação positiva muito forte (se uma variável aumenta, a outra tende a aumentar, e vice-versa)

  • \(r \approx -1\) indica uma correlação negativa muito fornte (se uma variável aumenta enquanto a outra tende a diminuir, e vice-versa)

  • \(r \approx 0\) indica que não há correlação linear entre as variáveis.

Método paramétrico: É adequado se os dados seguem uma distribuição aproximadamente normal.

Níveis de Correlação: Interpretação

Critérios de Cohen (1988)

r Magnitude
\(r \geq 0.5\) correlação forte
\(0.3 \leq r \leq 0.5\) correlação moderada
\(0.1 \leq r \leq 0.3\) correlação fraca
\(r < 0.1\) correlação muito fraca
  • Esses limiares ajudam os pesquisadores a entender a intensidade da associação entre as variáveis, indicando, por exemplo, se uma variação em uma variável poderia estar associada a mudanças previsíveis na outra variável.

  • A classificação de Cohen é amplamente utilizada em Estatística e Ciência de Dados para avaliar a relevância dos resultados de uma análise de correlação.

Análise de Correlação em R

Função cor

  • Podemos obter a estimativa de r (Pearson) usando a função interna cor():
r_pearson <- cor(marketing$sales, 
                 marketing$youtube,
                 method = "pearson")
round(r_pearson, digits = 2)
[1] 0.78
  • Podemos obter um tamanho de efeito, segundo Cohen (1988), usando a função interpret_r do pacote effectsize
effectsize::interpret_r(r_pearson, rules = "cohen1988")
[1] "large"
(Rules: cohen1988)

Gráfico de Dispersão Exploratório

# Salva o gráfico em um objeto
grafico_dispersao_simples <- 
# mapeia o orçamento de marketing no YouTube para o eixo x e 
# as vendas para o eixo y
ggplot(marketing, aes(x = youtube, y = sales)) +
  # Adicona um gráfico de dispersão de sales vs youtube
  geom_point()

# exibe o gráfico
grafico_dispersao_simples

Gráfico de Dispersão Exploratório

Gráfico de Dispersão com Reta de Regressão

# Salva o gráfico em um objeto
grafico_dispersao_reta <- 
# mapeia o orçamento de marketing no YouTube para o eixo x e 
# as vendas para o eixo y
ggplot(marketing, aes(x = youtube, y = sales)) +
  # Adiciona o gráfico de dispersão de sales vs youtube
  geom_point() + 
  # Adiciona a reta de regressão linear
  # se = FALSE desativa o intervalo de confiança
  geom_smooth(method = "lm", se = FALSE)

# exibe o gráfico
grafico_dispersao_reta

Reta de Regressão em um Gráfico de Dispersão

Adicionar uma reta (modelo) de regressão linear a um gráfico de dispersão é uma prática comum e tem como objetivo ajudar a visualizar se a relação entre as variáveis é linear e qual é a sua força. Esta reta é útil por várias razões:

  • Interpretação Visual da Relação

A reta de regressão fornece uma representação visual clara se a relação entre as duas variáveis é linear. Ao modelar dados, cientistas e analistas de dados usualmente testam se um modelo linear é adequado, pois trata-se do modelo mais simples entre duas variáveis.

  • Força e Direção da Relação

A inclinação da reta indica a força e a direção da relação entre as variáveis. Uma inclinação mais acentuada sugere uma relação mais forte, enquanto uma inclinação suave ou quase horizontal sugere uma relação fraca ou inexistente.

Da mesma forma, a dispersão dos pontos em torno da reta indica a força da relação: pontos mais próximos da reta indicam uma relação mais forte, enquanto pontos mais dispersos indicam uma relação mais fraca.

  • Valores Extremos (outliers)

A reta de regressão também ajuda a identificar valores extremos (outliers) que podem influenciar a relação entre as variáveis. Se alguns pontos estão muito longe da reta em relação à maioria, isso pode indicar que a relação não é linear ou que há outliers que estão distorcendo a relação.

Gráfico de Dispersão com Reta de Regressão

Gráfico de Dispersão Para Publicação

ggplot(marketing, aes(x = youtube, y = sales)) +
  geom_point() + 
  geom_smooth(method = "lm", se = FALSE) + 
  labs(
    title = "Relação entre Orçamento de Markenting no YouTube e Vendas",
    x = "Orçamento de Markenting no YouTube (milhares de US$)", 
    y = "Vendas (milhares de US$) "
  )  + 
  theme_minimal() 

Gráfico de Dispersão Para Publicação

Gráficos para Séries Temporais

Dados de Séries Temporais

Definição

  • Dados de séries temporais referem-se a dados coletados ao longo do tempo, em geral, em intervalos regulares (anos, meses, dias…) sobre uma variável (série univariada) ou mais de uma variável (série multivariada) de uma entidade.

  • Este tipo de dados é amplamente produzido em diversas áreas, economia, administração e em muitas outras áreas onde a dimensão temporal é fundamental.

  • A norma ISO 8601 define um padrão internacional para a representação de dados numéricos de séries temporais, o padrão é YYYY-MM-DD (Ano-Mês-Dia). Exemplo: 2023-07-18

Exemplo: Arquivo de dados para uma série temporal mensal multivariada:

data preco volume
2020-01-01 100 1500
2020-02-01 105 1600
2020-03-01 102 1550
2020-04-01 108 1650

Gráficos para Séries Temporais

Tipos

  • Um gráfico pode ser um veículo poderoso para exibir mudanças de um processo aleatório ao longo do tempo, e para identificar padrões, tendências e sazonalidades.

  • O gráfico mais comum para séries temporais é o gráfico de linha. Outras opções incluem grráficos dumbbell, gráficos de área, entre outros.

Gráfico de Linha Exploratório

# Salva o gráfico em um objeto
grafico_linha <-
# Mapeia variáveis para os eixos x e y
ggplot(economics, aes(x = date, y = psavert)) +
  # Adiciona um gráfico de linha
  geom_line() +
  # Adiciona título e rótulos aos eixos
  labs(title = "Taxa de Poupança Pessoal",
       x = "Mês",
       y = "Taxa de Poupança Pessoal")

# Exibe o gráfico
grafico_linha

Gráfico de Linha Exploratório

Gráfico de Linha para Publicação 1

Melhorias 1

  • Vamos usar função scale_x_date para alterar como as datas são exibidas no eixo x para que reflitam a periodicidade mensal, vamos estabelecer marcas a cada 5 anos e as datas serão apresentadas no formato MM-AA.

  • Além disso, vamos atribuir um tom de vermelho para a linha e aumentar sua espessuara.

  • E, como sempre, vamos adotar um tema minimalista para o gráfico.

Formatação de Datas em Gráficos

scale_x_date() - Opções principais

# Opções de date_breaks
scale_x_date(date_breaks = "1 day")    # diário (cada dia)
scale_x_date(date_breaks = "1 month")  # mensal
scale_x_date(date_breaks = "3 months") # trimestral
scale_x_date(date_breaks = "1 year")   # anual

Formatos comuns de data:

# Formatos de data
date_format("%d/%m/%Y")  # 31/12/2024
date_format("%b-%y")     # Dez-24
date_format("%B %Y")     # Dezembro 2024
date_format("%Y")        # 2024

Gráfico de Linha para Publicação 1

# Salva o gráfico em um objeto
grafico_linha_pub <-
# Mapeia variáveis para os eixos x e y
ggplot(economics, aes(x = date, y = psavert)) +
  # Adiciona um gráfico de linha
  # color = "indianred3" define a cor da linha
  # size = 1 define a espessura da linha
  geom_line(color = "indianred3", 
            size= 1 ) +
  # NOVA: Formata o eixo x para exibir datas a cada 5 anos
  # date_breaks = '5 years' define os intervalos de 5 anos 
  # labels = date_format("%b-%y") formata as datas como mês-ano 
  scale_x_date(date_breaks = '5 years', 
               labels = date_format("%b-%y")) +
  # Adiciona título e rótulos aos eixos
  labs(title = "Evolução da Taxa de Poupança Pessoal (em %) nos EUA",
       subtitle = "Período: Julho/1967 - Abril/2015",
       x = NULL,
       y = "Taxa de Poupança Pessoal (%)", 
       caption = "Fonte: Federal Reserve Bank of St. Louis") +
  # Define um tema minimalista para o gráfico
  theme_minimal()

# Exibe o gráfico
grafico_linha_pub

Gráfico de Linha para Publicação 1

Gráfico de Linha para Publicação 2

Melhoria Final

  • Por fim, vamos adicionar uma curva (modelo) não paramétrica para facilitar a visualização de tendências de longo prazo.

  • A curva não paramétrica é uma linha suavizada que ajuda a identificar tendências gerais nos dados, independentemente de flutuações sazonais ou ruídos de curto prazo.

Gráfico de Linha para Publicação 2

# Salva o gráfico em um objeto
grafico_linha_pub <-
# Mapeia variáveis para os eixos x e y
ggplot(economics, aes(x = date, y = psavert)) +
  # Adiciona um gráfico de linha
  # color = "indianred3" define a cor da linha
  # size = 1 define a espessura da linha
  geom_line(color = "indianred3", 
            size= 1 ) +
  # NOVA: Adiciona uma curva não paramétrica 
  geom_smooth() +
  # Formata o eixo x para exibir datas a cada 5 anos
  # date_breaks = '5 years' define os intervalos de 5 anos 
  # labels = date_format("%b-%y") formata as datas como mês-ano 
  scale_x_date(date_breaks = '5 years', 
               labels = date_format("%b-%y")) +
  # Adiciona título e rótulos aos eixos
  labs(title = "Evolução da Taxa de Poupança Pessoal (em %) nos EUA",
       subtitle = "Período: Julho/1967 - Abril/2015",
       x = NULL,
       y = "Taxa de Poupança Pessoal (%)", 
       caption = "Fonte: Federal Reserve Bank of St. Louis") +
  # Define um tema minimalista para o gráfico
  theme_minimal()

# Exibe o gráfico
grafico_linha_pub

Gráfico de Linha para Publicação 2

Gráficos de Linha para 2 Séries Temporais

Quando Usar?

  • Gráficos de linhas para duas, três ou mais séries podem ser eficazes quando as séries têm a mesma periodicidade (e.g., mensal, trimestral) e são medidas na mesma escala ou unidade de medida.

  • É importante garantir que as séries sejam comparáveis e que não haja diferenças significativas em suas escalas, pois isso pode distorcer a interpretação dos dados.

Pacote tidyquant

Pacote tidyquant

  • O pacote tidyquant integra os melhores pacotes da linguagem R para coletar, manipular e analisar dados financeiros com o tidyverse.

  • Como o tidyquant é possível realizar análises financeiras completas usando a sintaxe do tidyverse.

  • A função tq_get() do pacote tidyquant é uma muito útil para coletar dados financeiros de diversas fontes, como Yahoo Finance, FRED, entre outras.

Função tq_get()

Função tq_get()

  • A sintaxe básica da função tq_get() é:
tq_get(x, from = NULL, to = NULL, ...)

Onde:

  • x: é um vetor de tickers das ações ou o nome do índice que você deseja obter os dados.

  • from: é a data de início para a coleta dos dados (formato “YYYY-MM-DD”).

  • to: é a data de término para a coleta dos dados (formato “YYYY-MM-DD”).

A função retorna um data frame com as colunas:

  • symbol: é o ticker da ação ou do índice.
  • date: é a data da observação.
  • open: é o preço de abertura da ação no dia.
  • high: é o preço mais alto da ação no dia.
  • low: é o preço mais baixo da ação no dia.
  • close: é o preço de fechamento da ação no dia.
  • volume: é o volume de ações negociadas no dia.

Gráficos de Linha para 2 Séries

# carrega o pacote tidyquant
library(tidyquant)

# salva as séries importadas no objeto serie_bivariada
serie_bivariada <- c("AAPL", "META") %>% 
  # obtem os dados de fechamento das ações
  tq_get(from = "2024-01-01") %>%
  # seleciona as colunas relevantes
  select(symbol, date, close) %>%
  # renomeia as colunas para facilitar a leitura
  rename(
    Compania = symbol,
    Dia = date,
    Fechamento = close
  )

# Exibe as 6 primeiras linhas da data frame
head(serie_bivariada)
# A tibble: 6 × 3
  Compania Dia        Fechamento
  <chr>    <date>          <dbl>
1 AAPL     2024-01-02       186.
2 AAPL     2024-01-03       184.
3 AAPL     2024-01-04       182.
4 AAPL     2024-01-05       181.
5 AAPL     2024-01-08       186.
6 AAPL     2024-01-09       185.
# Exibe as 6 últimas linhas da data frame
tail(serie_bivariada)
# A tibble: 6 × 3
  Compania Dia        Fechamento
  <chr>    <date>          <dbl>
1 META     2025-06-03       667.
2 META     2025-06-04       688.
3 META     2025-06-05       685.
4 META     2025-06-06       698.
5 META     2025-06-09       694.
6 META     2025-06-10       702.

Gráficos de Linha para 2 Séries

# salva o gráfico em um objeto
grafico_linha_multiseries <-
# mapeia as variáveis para os eixos x e y, e define a cor por empresa
ggplot(serie_bivariada, 
       aes(x = Dia, y = Fechamento, color = Compania)) + 
  # Adiciona um gráfico de linha
  # size=1 define a espessura da linha
  geom_line(size=1) +
  # Formata o eixo x para exibir datas a cada mês-ano
  scale_x_date(date_breaks = '1 month', 
               labels = scales::date_format("%b-%y")) +
  # Formata o eixo y para exibir os preços de fechamento
  # limits = c(120, 800) define os limites do eixo y
  # breaks = seq(120, 800, 100) define os intervalos de 100
  scale_y_continuous(limits = c(120, 800), 
                     breaks = seq(120, 800, 100)
                    ) +
  # Adiciona título e rótulos aos eixos
  labs(title = "Preço Diário de Fechamento das Ações da Apple (AAPL) e Meta (META)",
       subtitle = "Período: 2024-01-01 até o presente",
       caption = "Fonte: Yahoo Finance",
       y = "Preço de Fechamento") +
  # Define um tema minimalista para o gráfico
  theme_minimal()
  
# Exibe o gráfico
grafico_linha_multiseries

Gráficos de Linha para 2 Séries

Exercícios

Exercício 1

Gráfico de Barras para 1 Variável Categórica

Objetivo: Criar um gráfico de barras para visualizar o número de respondentes por estado civil.

Instruções:

  1. Crie uma tabela de frequência ordenada em ordem decrescente da freqüência absoluta dos estados civis (Dica: código do slide 21)
# Preparação dos dados para o gráfico

# Tabela de frequência da variável estado_civil
tabela_estadocivil <- questionario %>% 
  # conta o número de respondentes por estado_civil
  count(estado_civil) %>% 
  # ordena os dados pela frequência em ordem CRESCENTE (menor para maior)
  # vamos usar ordem crescente para compensar o efeito do coord_flip()
  arrange(n) %>%
  # sincroniza os niveis do factor com a ordem atual das linhas
  mutate(estado_civil = factor(estado_civil, levels = estado_civil))

# exibe a tabela (dados em ordem crescente)
tabela_estadocivil
# A tibble: 6 × 2
  estado_civil      n
  <fct>         <int>
1 Sem resposta     17
2 Separado(a)     743
3 Viúvo(a)       1807
4 Divorciado(a)  3383
5 Nunca casou    5416
6 Casado(a)     10117
  1. Crie um gráfico de barras horizontais básico:
ggplot(tabela_estadocivil, aes(x = estado_civil, y = n)) + 
  geom_bar(stat = "identity") +
  coord_flip()

  1. Melhore o gráfico adicionando:

    • os valores da frequência absoluta nas barras usando geom_text()
    • Título e rótulos apropriados dos eixos com labs(title = "...")
    • Tema minimalista com theme_minimal()
# Salva o gráfico em objeto
grafico_estadocivil_freq <- 
# Cria um sistema de coordenadas para o gráfico com x sendo a raça e y sendo a frequência
ggplot(tabela_estadocivil, aes(x = estado_civil, y = n)) + 
  # Cria o gráfico de barras
  # stat="identity" usa os valores exatos de x = 'n' (frequência)
  geom_bar(stat="identity") +
  # Inverte os eixos
  coord_flip() +
  # geom_text() adiciona rótulos (frequência) às barras
  # hjust = -0.1: posiciona o texto um pouco à direita das barras horizontais
  geom_text(aes(label = n), hjust=-0.5) + 
  # Adiciona rótulos aos eixos e título do gráfico
  labs(x = "Estado Civil", 
       y = "Número de Respondentes", 
       title  = "Número de Respondentes por Estado Civil") + 
  # Define um tema minimalista para o gráfico
  theme_minimal()

# Exibe o gráfico
grafico_estadocivil_freq

Exercício 2

Gráfico de Linha para 1 Série Temporal

Objetivo: Baixar dados reais da ação da Petrobras (PETR4) a partir do dia 2024-01-01 e criar um gráfico de linha usando os pacotes tidyquant e ggplot2.

Instruções:

  1. Baixe os dados da Petrobras usando a função tq_get() do pacote tidyquant
library(tidyquant)

# Importa a série de preços da ação da Petrobras (PETR4) a partir de 2024-01-01
dados_petrobras <- "PETR4.SA" %>%
  tq_get(from = "2024-01-01") %>%
  # seleciona as variáveis/colunas relevantes
  select(date, close)
  1. Examine os dados baixados:
# Exibe as 6 primeiras linhas da data frame
head(dados_petrobras)
# A tibble: 6 × 2
  date       close
  <date>     <dbl>
1 2024-01-02  37.8
2 2024-01-03  39.0
3 2024-01-04  38.6
4 2024-01-05  38.7
5 2024-01-08  38.4
6 2024-01-09  38.1
  1. Crie um gráfico de linha básico:
# Salva o gráfico em um objeto
grafico_petrobras <-
# mapeia as variáveis para os eixos x e y
ggplot(dados_petrobras, aes(x = date, y = close)) +
  # Adiciona um gráfico de linha
  geom_line()

# Exibe o gráfico
grafico_petrobras

  1. Melhore o gráfico adicionando:

    • Título: “Evolução do Preço das Ações da Petrobras (PETR4)”
    • Rótulos dos eixos: “Dia” e “Preço de Fechamento (R$)”
    • Tema minimalista
    • Fonte dos dados: “Fonte: Yahoo Finance”
# Salva o gráfico em um objeto
grafico_petrobras <-
ggplot(dados_petrobras, aes(x = date, y = close)) +
  geom_line() + 
  labs(title = "Evolução do Preço das Ações da Petrobras (PETR4)",
       x = "Data",
       y = "Preço de Fechamento (R$)",
       caption = "Fonte: Yahoo Finance") +
  theme_minimal()
# Exibe o gráfico
grafico_petrobras

  1. Adicione uma curva não paramétrica com a função geom_smooth() para visualizar a tendência geral. Mude a cor da linha da série para "indianred3" e aumente a espessura da linha para 1
# Salva o gráfico em um objeto
grafico_petrobras <-
ggplot(dados_petrobras, aes(x = date, y = close)) +
  geom_line(color = "indianred3", size = 1) + 
  geom_smooth() +
  labs(title = "Evolução do Preço das Ações da Petrobras (PETR4)",
       x = "Dia",
       y = "Preço de Fechamento (R$)",
       caption = "Fonte: Yahoo Finance") +
  theme_minimal()
# Exibe o gráfico
grafico_petrobras

Preparação de Dados: pivot_wider()

Função pivot_wider() do tidyr - Exercício 3

A função pivot_wider() transforma dados do formato longo para o formato largo (wide),.

Por que precisamos transformar?

Para estimar a correlação entre as séries de preços de duas ações, precisamos que cada série de preços seja uma coluna separada, com as datas alinhadas, entretanto, a função tq_get() retorna os dados no formato longo, onde cada linha representa um preço de uma ação em uma data específica, ou seja, as séries de preços estão empilhadas verticalmente.

Formato Longo (estrutura retornada pela função tq_get()):

dados_longo <- 
tibble(
  empresa = c("PETR4.SA", "PETR4.SA", "ITUB4.SA", "ITUB4.SA"),
  data = as.Date(c("2024-01-02", "2024-01-03", "2024-01-02", "2024-01-03")),
  preco = c(35.50, 36.20, 28.30, 28.75)
)

dados_longo
# A tibble: 4 × 3
  empresa  data       preco
  <chr>    <date>     <dbl>
1 PETR4.SA 2024-01-02  35.5
2 PETR4.SA 2024-01-03  36.2
3 ITUB4.SA 2024-01-02  28.3
4 ITUB4.SA 2024-01-03  28.8

Formato Largo (necessário para análise de correlação):

dados_largo <- 
tibble(
  data = as.Date(c("2024-01-02", "2024-01-03")),
  PETR4.SA = c(35.50, 36.20),
  ITUB4.SA = c(28.30, 28.75)
) 

dados_largo
# A tibble: 2 × 3
  data       PETR4.SA ITUB4.SA
  <date>        <dbl>    <dbl>
1 2024-01-02     35.5     28.3
2 2024-01-03     36.2     28.8

Sintaxe:

dados_largo <- dados_longo %>%
  pivot_wider(
    names_from = empresa,    # variável que será nomes de colunas
    values_from = preco      # variável com os valores
  )
  
dados_largo
# A tibble: 2 × 3
  data       PETR4.SA ITUB4.SA
  <date>        <dbl>    <dbl>
1 2024-01-02     35.5     28.3
2 2024-01-03     36.2     28.8

Exercício 3

Gráfico de Dispersão com Análise de Correlação

Objetivo: Baixar dados reais das ações da Petrobras (PETR4) e do Itaú (ITUB4) a partir do dia 2024-01-01, calcular a correlação entre elas e criar um gráfico de dispersão usando os pacotes tidyquant, effectsize e ggplot2.

Instruções:

  1. Baixe os dados das duas empresas de forma compacta usando a função tq_get() do pacote tidyquant
# Solução robusta e simples para baixar múltiplas séries
dados_acoes <- c("PETR4.SA", "ITUB4.SA") %>%
  tq_get(from = "2024-01-01") %>%
  select(symbol, date, close) %>%
  rename(
    empresa = symbol,
    data = date,
    preco = close
  )

# Exibe as primeiras linhas do dataframe
head(dados_acoes)
# A tibble: 6 × 3
  empresa  data       preco
  <chr>    <date>     <dbl>
1 PETR4.SA 2024-01-02  37.8
2 PETR4.SA 2024-01-03  39.0
3 PETR4.SA 2024-01-04  38.6
4 PETR4.SA 2024-01-05  38.7
5 PETR4.SA 2024-01-08  38.4
6 PETR4.SA 2024-01-09  38.1
  1. Transforme os dados para análise de correlação usando pivot_wider():
dados_correlacao <- dados_acoes %>%
  pivot_wider(names_from = empresa, values_from = preco) %>%
  rename(petrobras = "PETR4.SA", itau = "ITUB4.SA")

# Exibe os dados transformados
head(dados_correlacao)
# A tibble: 6 × 3
  data       petrobras  itau
  <date>         <dbl> <dbl>
1 2024-01-02      37.8  30.5
2 2024-01-03      39.0  30.1
3 2024-01-04      38.6  29.9
4 2024-01-05      38.7  30.6
5 2024-01-08      38.4  30.3
6 2024-01-09      38.1  30.3
  1. Calcule a correlação entre os preços das duas ações:
correlacao <- cor(dados_correlacao$petrobras, dados_correlacao$itau)
round(correlacao, 3)
[1] -0.596
  1. Interprete a magnitude da correlação usando as regras de Cohen:
interpretacao <- effectsize::interpret_r(correlacao, rules = "cohen1988")
interpretacao
[1] "large"
(Rules: cohen1988)
  1. Crie um gráfico de dispersão básico:
ggplot(dados_correlacao, aes(x = petrobras, y = itau)) +
  geom_point()

  1. Melhore o gráfico adicionando título, rótulos, reta de regressão e tema:
# Salva o gráfico em um objeto
grafico_dispersao <-
ggplot(dados_correlacao, aes(x = petrobras, y = itau)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE, color = "red") +
  labs(title = "Correlação entre Petrobras e Itaú",
       subtitle = "Período de 2024-01-01 até hoje",
       x = "Preço Petrobras (R$)",
       y = "Preço Itaú (R$)",
       caption = "Fonte: Yahoo Finance") +
  theme_minimal()

# Exibe o gráfico
grafico_dispersao

  1. Escreva sua interpretação do gráfico de dispersão a partir do coeficiente de correlação de Pearson estimado. Pelo resultado da sua análise, se uma carteira for montada com apenas as ações da Petrobras e do Itaú, seria uma carteira diversificada de investimento em ações?

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 21"
  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/13-relatorio/13-relatorio.qmd
  1. Execute git status novamente e faça o commit quando todos os arquivos estiverem em verde:
git commit -m "atualizacoes aula 21"
  1. Envie o repositório local atualizado para o GitHub:
git push origin main

Referências

COHEN, J. Statistical Power Analysis for the Behavioral Sciences. 2nd. ed. Hillsdale, NJ: Lawrence Erlbaum Associates, 1988.