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)
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.
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
##
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')
)
)
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')
)
)
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.
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")
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")
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")
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")
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")
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)