Aula de Programação - Fase 3

Alunos: Arthur & Jocelio

Profesor: Adriano Lauro

Curso: Engenharia Civil / Ambiental e Sanitária

Data: 01.12.25

Rio de Janeiro - RJ

library(dplyr)
## 
## Anexando pacote: 'dplyr'
## Os seguintes objetos são mascarados por 'package:stats':
## 
##     filter, lag
## Os seguintes objetos são mascarados por 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(readxl)
library(readr)
library(writexl)
## Warning: pacote 'writexl' foi compilado no R versão 4.5.2
library(openxlsx)
## Warning: pacote 'openxlsx' foi compilado no R versão 4.5.2
library(forecast)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(tidyr)
## Warning: pacote 'tidyr' foi compilado no R versão 4.5.2
library(DT)
## Warning: pacote 'DT' foi compilado no R versão 4.5.2
library(lubridate)   
## Warning: pacote 'lubridate' foi compilado no R versão 4.5.2
## 
## Anexando pacote: 'lubridate'
## Os seguintes objetos são mascarados por 'package:base':
## 
##     date, intersect, setdiff, union
library(scales)
## 
## Anexando pacote: 'scales'
## O seguinte objeto é mascarado por 'package:readr':
## 
##     col_factor
library(readr)
library(readxl) 
library(writexl)
library(openxlsx)
library(forecast)
library(tidyr)
library (DT)

Introdução

Este relatório apresenta uma análise exploratória dos dados de vendas anuais de diversos vendedores. O objetivo é identificar padrões, desempenho individual e tendências gerais.

1 - Estruturação

getwd()
## [1] "C:/Users/arthu/OneDrive/Imagens"
dir()
##  [1] "951fe8d0-f194-4262-989b-1dec5da7239a.jfif"
##  [2] "Arthur--Jocelio---Fase-3.html"            
##  [3] "Arthur--Jocelio---Fase-3.Rmd"             
##  [4] "Arthur  Jocelio - Fase 3.Rmd"             
##  [5] "Capturas de tela"                         
##  [6] "desktop.ini"                              
##  [7] "Imagens da Câmera"                        
##  [8] "Músicas - Atalho.lnk"                     
##  [9] "rsconnect"                                
## [10] "Salario_base2024.xlsx"                    
## [11] "Saved Pictures"                           
## [12] "Vendas2024.xlsx"
setwd("C:/Users/arthu/OneDrive/Imagens")

salarios <- read_excel("Salario_base2024.xlsx")
vendas <- read_excel("Vendas2024.xlsx")
salarios <- read_excel("Salario_base2024.xlsx")
vendas <- read_excel("Vendas2024.xlsx")
# Ajustar tipos de dados
vendas <- vendas %>%
  mutate(
    vendedor = as.factor(vendedor),
    dias = as.Date(dias),
    venda_diaria = as.numeric(venda_diaria),
    ano = year(dias),
    mes = month(dias)
  ) %>%
  filter(!is.na(venda_diaria))

# Estrutura dos dados
str(vendas)
## tibble [113,202 × 5] (S3: tbl_df/tbl/data.frame)
##  $ vendedor    : Factor w/ 12 levels "101101","101102",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ dias        : Date[1:113202], format: "2018-01-01" "2018-01-01" ...
##  $ venda_diaria: num [1:113202] 372 139 354 241 123 ...
##  $ ano         : num [1:113202] 2018 2018 2018 2018 2018 ...
##  $ mes         : num [1:113202] 1 1 1 1 1 1 1 1 1 1 ...
head(vendas)
## # A tibble: 6 × 5
##   vendedor dias       venda_diaria   ano   mes
##   <fct>    <date>            <dbl> <dbl> <dbl>
## 1 101101   2018-01-01         372.  2018     1
## 2 101101   2018-01-01         139.  2018     1
## 3 101101   2018-01-01         354.  2018     1
## 4 101101   2018-01-01         241.  2018     1
## 5 101101   2018-01-01         123.  2018     1
## 6 101101   2018-01-01         165.  2018     1
summary(vendas)
##     vendedor          dias             venda_diaria         ano      
##  101102 :14604   Min.   :2018-01-01   Min.   :  9.79   Min.   :2018  
##  101101 :13742   1st Qu.:2020-09-19   1st Qu.:133.27   1st Qu.:2020  
##  101103 :12779   Median :2022-02-03   Median :254.06   Median :2022  
##  101104 :10493   Mean   :2021-11-21   Mean   :260.38   Mean   :2021  
##  101105 :10419   3rd Qu.:2023-03-15   3rd Qu.:373.85   3rd Qu.:2023  
##  101106 : 9997   Max.   :2024-03-30   Max.   :838.42   Max.   :2024  
##  (Other):41168                                                       
##       mes        
##  Min.   : 1.000  
##  1st Qu.: 3.000  
##  Median : 7.000  
##  Mean   : 6.548  
##  3rd Qu.:10.000  
##  Max.   :12.000  
## 

2 - Análise Estatística com dplyr

1) Estatísticas por vendedor

estat_vendedor <- vendas %>%
  group_by(vendedor) %>%
  summarise(
    total_vendas = sum(venda_diaria),
    media_diaria = mean(venda_diaria),
    mediana_diaria = median(venda_diaria),
    desvio_padrao = sd(venda_diaria),
    n_registros = n(),
    .groups = "drop"
  ) %>%
  arrange(desc(total_vendas))

# Tabela interativa
estat_vendedor %>%
  mutate(
    total_vendas = dollar(total_vendas, prefix = "R$ "),
    media_diaria = dollar(media_diaria, prefix = "R$ "),
    mediana_diaria = dollar(mediana_diaria, prefix = "R$ "),
    desvio_padrao = dollar(desvio_padrao, prefix = "R$ "),
    n_registros = comma(n_registros, accuracy = 1)
  ) %>%
  datatable(
    caption = 'Tabela de Estatísticas de Vendas por Vendedor',
    rownames = FALSE,
    filter = 'top',
    extensions = 'Buttons',
    options = list(
      pageLength = 10,
      dom = 'Bfrtip',
      buttons = c('copy', 'csv', 'excel', 'pdf', 'print')
    )
  )

2) Venda mensal total (geral)

venda_mensal_geral <- vendas %>%
  group_by(ano, mes) %>%
  summarise(total_mensal = sum(venda_diaria), .groups = "drop") %>%
  arrange(ano, mes)

datatable(
  venda_mensal_geral,
  caption = 'Tabela de Vendas Mensais (Geral)',
  rownames = FALSE,
  filter = 'top',
  extensions = 'Buttons',
  options = list(
    pageLength = 12,
    dom = 'Bfrtip',
    buttons = c('copy', 'csv', 'excel', 'pdf', 'print')
  )
)

3) Venda mensal por vendedor

venda_mensal_vendedor <- vendas %>%
  group_by(vendedor, ano, mes) %>%
  summarise(total_mensal = sum(venda_diaria), .groups = 'drop') %>%
  unite(col = "data_mes", ano, mes, sep = "-", remove = FALSE) %>%
  mutate(data_mes = as.Date(paste0(data_mes, "-01")))

# Gráfico de tendência por vendedor
ggplot(venda_mensal_vendedor, aes(x = data_mes, y = total_mensal, group = vendedor, color = vendedor)) +
  geom_line(size = 1.2) +
  geom_point(size = 2.5) +
  labs(
    title = "Tendência Mensal de Vendas por Vendedor",
    subtitle = "Vendas ao longo do tempo para cada membro da equipe",
    x = "Mês",
    y = "Total de Vendas Mensais",
    color = "Vendedor"
  ) +
  scale_y_continuous(labels = dollar) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold"),
    plot.subtitle = element_text(hjust = 0.5),
    legend.position = "bottom"
  )
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

3. Visualização de Dados com ggplot2

1) Gráfico de barras – venda total por vendedor

ggplot(estat_vendedor, aes(x = reorder(vendedor, -total_vendas), y = total_vendas)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  labs(title = "Venda Total por Vendedor", x = "Vendedor", y = "Total de Vendas")

2) Gráfico de linhas – tendência geral mensal

ggplot(venda_mensal_geral, aes(x = mes, y = total_mensal, group = ano, color = as.factor(ano))) +
  geom_line(linewidth = 1) +
  labs(title = "Tendência Geral das Vendas Mensais", x = "Mês", y = "Total de Vendas")

3) Gráficos facetados – vendas mensais por vendedor

ggplot(venda_mensal_vendedor, aes(x = mes, y = total_mensal, group = ano, color = as.factor(ano))) +
  geom_line(size = 1) +
  facet_wrap(~ vendedor, scales = "free_y") +
  labs(title = "Vendas Mensais por Vendedor", x = "Mês", y = "Total de Vendas")

4) Histograma – distribuição das vendas diárias

ggplot(vendas, aes(x = venda_diaria)) +
  geom_histogram(binwidth = 100, fill = "darkgreen", color = "white") +
  labs(title = "Distribuição das Vendas Diárias", x = "Venda Diária", y = "Frequência")

5) Boxplot – vendas diárias por mês

ggplot(vendas, aes(x = as.factor(mes), y = venda_diaria)) +
  geom_boxplot(fill = "orange") +
  labs(title = "Distribuição das Vendas Diárias por Mês", x = "Mês", y = "Venda Diária")

6) Boxplot – vendas por vendedor

ggplot(vendas, aes(x = vendedor, y = venda_diaria)) +
  geom_boxplot(fill = "purple") +
  labs(title = "Distribuição das Vendas Diárias por Vendedor", x = "Vendedor", y = "Venda Diária")

library(readxl)
library(dplyr)
library(forecast)


# Agregar vendas mensais totais da empresa
ts_vendas <- ts(venda_mensal_geral$total_mensal,
                frequency = 12,
                start = c(min(venda_mensal_geral$ano), 1))

# Ajustar modelo ARIMA
modelo <- auto.arima(ts_vendas)

# Previsão para os próximos 6 meses
previsao <- forecast(modelo, h = 6)

# Visualizar previsão
plot(previsao)