Introdução

Introdução

Este dashboard apresenta uma série de exercícios práticos utilizando a biblioteca ggplot2 do R, baseada no conceito da Gramática dos Gráficos. Serão explorados diferentes tipos de visualizações, como gráficos de dispersão, gráficos de barras e boxplots, utilizando os datasets mtcars e diamonds.

Exercício 1.1

📈 Exercício 1.1 - Gráfico de Dispersão

O gráfico de dispersão mostra a relação entre o peso e o consumo de combustível de veículos, com cores diferenciadas pelo número de cilindros. Sendo possível notar que veículos com peso abaixo de 3 mil libras, tendem a percorrer mais de 20 milhas por galão. Acima desse peso os vículos percorrem nenos de 20 milhas por galão. Observa-se que os veículos mais leves, e com menos cilindros são mais econônicos.

data(mtcars)
mtcars$cyl <- factor(mtcars$cyl)

ggplot(data = mtcars) +
  aes(x = wt, y = mpg, color = cyl) + 
  geom_point(size = 3) +
  labs(
    title = "Gráfico 1 - Relação entre Peso e Consumo de Combustível", 
    x = "Peso do Carro (lb/1000)",                      
    y = "Milhas por Galão (mpg)",                       
    color = "Cilindros"
  ) +
  theme_minimal()

Exercício 1.2

📊 Exercício 1.2 - Gráfico de Barras

O gráfico abaixo mostra a quantidade de diamantes por tipo de corte, sendo possível notar que o corte com maior quantidade é o tipo Ideal, seguido pelo corte Premium, o tipo de corte com menor quantidade é o Razoável, com apenas 1610 peças.

data(diamonds)


diamonds_count <- diamonds %>%
  group_by(cut) %>%
  summarise(count = n()) %>%
  arrange(desc(count))

diamonds_count$cut <- factor(diamonds_count$cut, levels = diamonds_count$cut)

traducao <- c("Fair" = "Razoável",
              "Good" = "Bom",
              "Very Good" = "Muito Bom",
              "Premium" = "Premium",
              "Ideal" = "Ideal")

# Gráfico de Barras Modificado
ggplot(diamonds_count, aes(x = cut, y = count, fill = cut)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = count), vjust = -0.5, size = 3.5) +
  labs(
    title = "Contagem de Diamantes por Tipo de Corte",
    x = "Corte",
    y = "Número de Diamantes",
    fill = "Corte"
  ) +
  scale_x_discrete(labels = traducao) + 
  scale_fill_brewer(palette = "RdYlBu") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"))+
  theme(axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        axis.line.y = element_blank())

Exercício 1.3

3. Customização Avançada

📦 Exercício 1.3 - Boxplot Customizado

O gráfico abaixo mostra que o tipo de corte ideal, melhor qualidade de diamante, tem a menor mediana de Preço em relação aos demais tipos.Indicando que apesar de serem de melhor qualidade, tem preço mais baixo. Os diamantes de tipo Razoável, que tem menor qualidade, apresentam o menor intervalo interquartilico, demonstrando que diamantes com essa qualidade tem menor variação nos preços, se desconsiderarmos os outliers.

# Boxplot da variável price por cut
ggplot(diamonds, aes(x = cut, y = price, fill = cut)) +
  geom_boxplot() +
  labs(
    title = "Distribuição de Preços por Tipo de Corte",
    subtitle = "Dataset Diamonds",
    x = "Qualidade do Corte",
    y = "Preço (dólares)",
    fill = "Corte"
  ) +
  scale_x_discrete(labels = traducao) +
  scale_fill_manual(values = c("Fair" = "#E41A1C", "Good" = "#377EB8", "Very Good" = "#4DAF4A", "Premium" = "#984EA3", "Ideal" = "#FF7F00")) +
  # (c) Remoção da legenda
  guides(fill = "none") +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold"),
    # (d) Ajuste do ângulo dos rótulos do eixo X
    axis.text.x = element_text(angle = 45, hjust = 1)
  )

Exercicio 1.4

Exercício - Conceitos Fundamentais

Diferença entre geom_point() e geom_jitter()

A principal diferença reside no tratamento de pontos, especialmente quando as coordenadas dos dados são discretas, conforme podemos verificar na tabela abaixo.

Geom Descrição Situação Apropriada
geom_point() Desenha cada ponto de dado exatamente em suas coordenadas, ficando sobrepostos. Apropriado para dados com variáveis contínuas (altura vs peso) ou quando a localização precisa é crucial.
geom_jitter() Adiciona uma pequena quantidade de ruído aleatório (jitter) às coordenadas. Mais apropriado quando as variáveis são discretas ou categóricas (notas, dias da semana), pois espalha os pontos, revelando a densidade e o número real de observações.

Solução com geom_point()

ggplot(mtcars, aes(x = cyl, y = gear)) +
  geom_point()

Solução com geom_jitter()

ggplot(mtcars, aes(x = cyl, y = gear)) +
  geom_jitter(width = 0.2, height = 0.2)

Conceito de “Gramática dos Gráficos”

O conceito de “Gramática dos Gráficos” (Grammar of Graphics), descreve uma estrutura que associa cada componente de um gráfico a uma estrutura gramatical, de forma similiar à composição de uma frase.

Desta forma o gráfico é formado por camadas que se complementam:

  1. Dados (Data) - base do gráfico, utiliza o conjunto de dados (dataframe).
  2. Estéticos (Aesthetics - aes()): Mapeia variáveis a atributos visuais (posição, cor, tamanho).
  3. Geometrias (Geoms - geom_*()): A forma visual de representação (pontos, barras, linhas).
  4. Facetas (facets): Organiza o gráfico em sub-gráficos ou painéis que mostram um subconjunto de dados.
  5. Estatíticas (statistics): Realizam transformações estatísticas nos dados antes da plotagem.
  6. Coordenadas (coorndinates): Controla o sistema de coordenadas do gráfico
  7. Tema (theme): Controla a aparência não relacionada aos dados, e composta por elementos estéticos que não representam informações.
---
title: "Relatório de Análise de Dados  - "
#Author: Wesley Naites de Paulo
date: "`r format(Sys.Date(), '%d de %B de %Y')`"
output: 
  flexdashboard::flex_dashboard:
    theme: yeti               
    orientation: rows         
    vertical_layout: fill    
    logo: "logo.png"
    source_code: embed
---

```{css, echo=FALSE}
.navbar-logo {
  max-height: 50px !important;
  width: auto;
}

/* Ou se preferir controlar a largura */
.navbar-logo img {
  max-height: 50px !important;
  width: auto;
}

.custom-paragraph{
  font-size: 16px !important;
  text-align: justify;
  width: auto;
}

p {
  font-size: 16px !important;
  text-align: justify;
  width: auto;
}
```

```{r setup, include=FALSE}
# Configuração global e carregamento de bibliotecas
knitr::opts_chunk$set(
  echo = TRUE, 
  message = FALSE, 
  warning = FALSE,
  fig.width = 12,
  fig.height = 4)
library(ggplot2)
library(dplyr)
library(flexdashboard) # Necessário para rodar o dashboard

```
# Introdução {data-icon="fa-book"}

### Introdução


Este dashboard apresenta uma série de exercícios práticos utilizando a biblioteca **ggplot2** do R, baseada no conceito da **Gramática dos Gráficos**. Serão explorados diferentes tipos de visualizações, como gráficos de dispersão, gráficos de barras e boxplots, utilizando os datasets `mtcars` e `diamonds`. 


# Exercício 1.1 {data-icon="fa-chart-area"}


### 📈 Exercício 1.1 - Gráfico de Dispersão

O gráfico de dispersão mostra a relação entre o **peso** e o **consumo de combustível** de veículos, com cores diferenciadas pelo **número de cilindros**. Sendo possível notar que veículos com peso abaixo de 3 mil libras, tendem a percorrer mais de 20 milhas por galão. Acima desse peso os vículos percorrem nenos de 20 milhas por galão. Observa-se que os veículos mais leves, e com menos cilindros são mais econônicos.

####

```{r }
data(mtcars)
mtcars$cyl <- factor(mtcars$cyl)

ggplot(data = mtcars) +
  aes(x = wt, y = mpg, color = cyl) + 
  geom_point(size = 3) +
  labs(
    title = "Gráfico 1 - Relação entre Peso e Consumo de Combustível", 
    x = "Peso do Carro (lb/1000)",                      
    y = "Milhas por Galão (mpg)",                       
    color = "Cilindros"
  ) +
  theme_minimal()
```

# Exercício 1.2 {data-icon="fa-chart-area"}
### 📊 Exercício 1.2 - Gráfico de Barras

O gráfico abaixo mostra a quantidade de diamantes por tipo de corte, sendo possível notar que o corte com maior quantidade é o tipo Ideal, seguido pelo corte Premium, o tipo de corte com menor quantidade é o Razoável, com apenas 1610 peças.

####

```{r }
data(diamonds)


diamonds_count <- diamonds %>%
  group_by(cut) %>%
  summarise(count = n()) %>%
  arrange(desc(count))

diamonds_count$cut <- factor(diamonds_count$cut, levels = diamonds_count$cut)

traducao <- c("Fair" = "Razoável",
              "Good" = "Bom",
              "Very Good" = "Muito Bom",
              "Premium" = "Premium",
              "Ideal" = "Ideal")

# Gráfico de Barras Modificado
ggplot(diamonds_count, aes(x = cut, y = count, fill = cut)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = count), vjust = -0.5, size = 3.5) +
  labs(
    title = "Contagem de Diamantes por Tipo de Corte",
    x = "Corte",
    y = "Número de Diamantes",
    fill = "Corte"
  ) +
  scale_x_discrete(labels = traducao) + 
  scale_fill_brewer(palette = "RdYlBu") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"))+
  theme(axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        axis.line.y = element_blank())
        
```

# Exercício 1.3 {data-icon="fa-chart-area"}
## 3\. Customização Avançada {data-icon="fa-flask"}

### 📦 Exercício 1.3 - Boxplot Customizado

O gráfico abaixo mostra que o tipo de corte ideal, melhor qualidade de diamante, tem a menor mediana de Preço em relação aos demais tipos.Indicando que apesar de serem de melhor qualidade, tem preço mais baixo.
Os diamantes de tipo Razoável, que tem menor qualidade, apresentam o menor intervalo interquartilico, demonstrando que diamantes com essa qualidade tem menor variação nos preços, se desconsiderarmos os outliers.

####

```{r }
# Boxplot da variável price por cut
ggplot(diamonds, aes(x = cut, y = price, fill = cut)) +
  geom_boxplot() +
  labs(
    title = "Distribuição de Preços por Tipo de Corte",
    subtitle = "Dataset Diamonds",
    x = "Qualidade do Corte",
    y = "Preço (dólares)",
    fill = "Corte"
  ) +
  scale_x_discrete(labels = traducao) +
  scale_fill_manual(values = c("Fair" = "#E41A1C", "Good" = "#377EB8", "Very Good" = "#4DAF4A", "Premium" = "#984EA3", "Ideal" = "#FF7F00")) +
  # (c) Remoção da legenda
  guides(fill = "none") +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold"),
    # (d) Ajuste do ângulo dos rótulos do eixo X
    axis.text.x = element_text(angle = 45, hjust = 1)
  )
```

# Exercicio 1.4 

## Exercício - Conceitos Fundamentais {.tabset .tabset-fade .tabset-pills}

### Diferença entre `geom_point()` e `geom_jitter()`

A principal diferença reside no tratamento de pontos, especialmente quando as coordenadas dos dados são discretas, conforme podemos verificar na tabela abaixo.

| Geom | Descrição | Situação Apropriada |
| :--- | :--- | :--- |
| **`geom_point()`** | Desenha cada ponto de dado exatamente em suas coordenadas, ficando sobrepostos. | Apropriado para dados com variáveis contínuas (altura vs peso) ou quando a localização precisa é crucial. |
| **`geom_jitter()`** | Adiciona uma pequena quantidade de ruído aleatório (jitter) às coordenadas. | Mais apropriado quando as variáveis são discretas ou categóricas (notas, dias da semana), pois espalha os pontos, revelando a densidade e o número real de observações. |

#### Solução com geom_point()

```{r}
ggplot(mtcars, aes(x = cyl, y = gear)) +
  geom_point()

```

#### Solução com geom_jitter()
```{r}

ggplot(mtcars, aes(x = cyl, y = gear)) +
  geom_jitter(width = 0.2, height = 0.2)
```

### Conceito de "Gramática dos Gráficos"

O conceito de "Gramática dos Gráficos" (Grammar of Graphics), descreve uma estrutura que associa cada componente de um gráfico a uma estrutura gramatical, de forma similiar à composição de uma frase.

Desta forma o gráfico é formado por camadas que se complementam:

1.  Dados (Data) - base do gráfico, utiliza o conjunto de dados (dataframe).
2.  Estéticos (Aesthetics - `aes()`): Mapeia variáveis a atributos visuais (posição, cor, tamanho).
3.  Geometrias (Geoms - `geom_*()`): A forma visual de representação (pontos, barras, linhas).
4.  Facetas (facets): Organiza o gráfico em sub-gráficos ou painéis que mostram um subconjunto de dados.
5.  Estatíticas (statistics): Realizam transformações estatísticas nos dados antes da plotagem.
6.  Coordenadas (coorndinates): Controla o sistema de coordenadas do gráfico
7. Tema (theme): Controla a aparência não relacionada aos dados, e composta por elementos estéticos que não representam informações.