Aluno: Renato Rodrigues Alves
Curso: Engenharia Civil
Instituição: Faculdade Celso Lisboa
Disciplina: Análise de Dados
Local: Rio de Janeiro - RJ
Este relatório apresenta uma Análise Exploratória de Dados (AED) das vendas da empresa Bar da Dorinha. O objetivo principal é avaliar o desempenho individual dos vendedores, identificar tendências de vendas ao longo dos meses e estruturar a folha de pagamento referente a março de 2024, aplicando automação de processos por meio da linguagem R.
Adicionalmente, ao final do relatório, é apresentada uma projeção de vendas para os próximos 6 meses utilizando modelos de séries temporais.
vendas <- read_excel("Vendas2024.xlsx", sheet = "Sheet1")
vendas <- vendas %>%
mutate(
vendedor = as.factor(vendedor),
dias = as.Date(dias),
venda_diaria = as.numeric(venda_diaria)
)
vendas_limpo <- vendas %>%
filter(!is.na(venda_diaria))
str(vendas_limpo)
## 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_limpo) %>%
kable(caption = "Primeiras Linhas da Base de Vendas") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
| vendedor | dias | venda_diaria | ano | mes |
|---|---|---|---|---|
| 101101 | 2018-01-01 | 371.97 | 2018 | 1 |
| 101101 | 2018-01-01 | 138.59 | 2018 | 1 |
| 101101 | 2018-01-01 | 353.93 | 2018 | 1 |
| 101101 | 2018-01-01 | 240.73 | 2018 | 1 |
| 101101 | 2018-01-01 | 122.54 | 2018 | 1 |
| 101101 | 2018-01-01 | 165.06 | 2018 | 1 |
summary(vendas_limpo)
## 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_limpo %>%
group_by(vendedor) %>%
summarise(
Total_Vendas = sum(venda_diaria),
Media_Diaria = mean(venda_diaria),
Mediana_Diaria = median(venda_diaria),
Desvio_Padrao = sd(venda_diaria),
Total_Registros = n()
) %>%
arrange(desc(Total_Vendas))
estat_vendedor %>%
kable(caption = "Métricas de Vendas por Vendedor", digits = 2) %>%
kable_styling(bootstrap_options = c("striped", "hover", "bordered"))
| vendedor | Total_Vendas | Media_Diaria | Mediana_Diaria | Desvio_Padrao | Total_Registros |
|---|---|---|---|---|---|
| 101102 | 4031176 | 276.03 | 268.37 | 160.76 | 14604 |
| 101101 | 3489519 | 253.93 | 249.28 | 146.27 | 13742 |
| 101103 | 3433923 | 268.72 | 264.70 | 155.34 | 12779 |
| 101105 | 2694622 | 258.63 | 250.79 | 150.14 | 10419 |
| 101104 | 2491491 | 237.44 | 232.13 | 137.85 | 10493 |
| 101108 | 2473665 | 271.47 | 265.24 | 157.04 | 9112 |
| 101106 | 2458056 | 245.88 | 240.99 | 143.15 | 9997 |
| 102111 | 2441308 | 244.67 | 240.99 | 140.90 | 9978 |
| 101107 | 2201441 | 250.28 | 243.28 | 146.59 | 8796 |
| 102112 | 1338667 | 289.50 | 282.73 | 166.85 | 4624 |
| 101109 | 1296194 | 304.06 | 297.62 | 173.87 | 4263 |
| 101110 | 1125154 | 256.01 | 252.31 | 145.72 | 4395 |
venda_mensal_geral <- vendas_limpo %>%
group_by(ano, mes) %>%
summarise(Total_Mensal = sum(venda_diaria)) %>%
arrange(ano, mes)
venda_mensal_geral %>%
kable(caption = "Venda Mensal Total da Empresa", digits = 2) %>%
kable_styling(bootstrap_options = c("striped", "hover"))
| ano | mes | Total_Mensal |
|---|---|---|
| 2018 | 1 | 101567.93 |
| 2018 | 2 | 84566.85 |
| 2018 | 3 | 85530.13 |
| 2018 | 4 | 98811.06 |
| 2018 | 5 | 120225.68 |
| 2018 | 6 | 97619.83 |
| 2018 | 7 | 83419.18 |
| 2018 | 8 | 124339.31 |
| 2018 | 9 | 120982.09 |
| 2018 | 10 | 127807.90 |
| 2018 | 11 | 155285.26 |
| 2018 | 12 | 187369.81 |
| 2019 | 1 | 136127.00 |
| 2019 | 2 | 98931.27 |
| 2019 | 3 | 114280.20 |
| 2019 | 4 | 126960.42 |
| 2019 | 5 | 171233.06 |
| 2019 | 6 | 149914.75 |
| 2019 | 7 | 107252.77 |
| 2019 | 8 | 141441.62 |
| 2019 | 9 | 129484.14 |
| 2019 | 10 | 288625.81 |
| 2019 | 11 | 355359.75 |
| 2019 | 12 | 468261.28 |
| 2020 | 1 | 271472.65 |
| 2020 | 2 | 222533.09 |
| 2020 | 3 | 382382.08 |
| 2020 | 4 | 421068.32 |
| 2020 | 5 | 517596.70 |
| 2020 | 6 | 416373.11 |
| 2020 | 7 | 351208.06 |
| 2020 | 8 | 331284.75 |
| 2020 | 9 | 400772.74 |
| 2020 | 10 | 387258.35 |
| 2020 | 11 | 505659.62 |
| 2020 | 12 | 595835.98 |
| 2021 | 1 | 360726.31 |
| 2021 | 2 | 301422.03 |
| 2021 | 3 | 385502.04 |
| 2021 | 4 | 430170.60 |
| 2021 | 5 | 483334.28 |
| 2021 | 6 | 476022.42 |
| 2021 | 7 | 400116.30 |
| 2021 | 8 | 392945.07 |
| 2021 | 9 | 375571.56 |
| 2021 | 10 | 441425.94 |
| 2021 | 11 | 503923.84 |
| 2021 | 12 | 608599.31 |
| 2022 | 1 | 398929.02 |
| 2022 | 2 | 344108.08 |
| 2022 | 3 | 366832.24 |
| 2022 | 4 | 479610.28 |
| 2022 | 5 | 669782.26 |
| 2022 | 6 | 616457.44 |
| 2022 | 7 | 540985.75 |
| 2022 | 8 | 530524.87 |
| 2022 | 9 | 510590.58 |
| 2022 | 10 | 614907.36 |
| 2022 | 11 | 736200.89 |
| 2022 | 12 | 817665.03 |
| 2023 | 1 | 568067.46 |
| 2023 | 2 | 477297.07 |
| 2023 | 3 | 577768.37 |
| 2023 | 4 | 608208.92 |
| 2023 | 5 | 699119.04 |
| 2023 | 6 | 682889.59 |
| 2023 | 7 | 574676.55 |
| 2023 | 8 | 571171.72 |
| 2023 | 9 | 572114.63 |
| 2023 | 10 | 651203.73 |
| 2023 | 11 | 757312.16 |
| 2023 | 12 | 898480.62 |
| 2024 | 1 | 549534.22 |
| 2024 | 2 | 468779.94 |
| 2024 | 3 | 553397.54 |
venda_mensal_vendedor <- vendas_limpo %>%
group_by(vendedor, ano, mes) %>%
summarise(Total_Vendas_Mensais = sum(venda_diaria)) %>%
arrange(vendedor, ano, mes)
head(venda_mensal_vendedor, 15) %>%
kable(caption = "Venda Mensal por Vendedor (Apenas primeiras 15 linhas)", digits = 2) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
| vendedor | ano | mes | Total_Vendas_Mensais |
|---|---|---|---|
| 101101 | 2018 | 1 | 40681.80 |
| 101101 | 2018 | 2 | 41947.67 |
| 101101 | 2018 | 3 | 39753.13 |
| 101101 | 2018 | 4 | 40270.40 |
| 101101 | 2018 | 5 | 60735.17 |
| 101101 | 2018 | 6 | 37626.92 |
| 101101 | 2018 | 7 | 52441.26 |
| 101101 | 2018 | 8 | 34252.90 |
| 101101 | 2018 | 9 | 30023.94 |
| 101101 | 2018 | 10 | 41341.30 |
| 101101 | 2018 | 11 | 51040.47 |
| 101101 | 2018 | 12 | 39680.91 |
| 101101 | 2019 | 1 | 41224.85 |
| 101101 | 2019 | 2 | 29976.22 |
| 101101 | 2019 | 3 | 39335.37 |
ggplot(estat_vendedor, aes(x = reorder(vendedor, -Total_Vendas), y = Total_Vendas, fill = vendedor)) +
geom_col(show.legend = FALSE) +
theme_minimal() +
labs(title = "Faturamento Total por Vendedor", x = "Vendedor", y = "Total de Vendas (R$)") +
scale_y_continuous(labels = scales::comma)
# Criando uma coluna de data fictícia para o eixo X do gráfico de linhas
venda_mensal_geral <- venda_mensal_geral %>%
mutate(Data_Ref = as.Date(paste(ano, mes, "01", sep = "-")))
ggplot(venda_mensal_geral, aes(x = Data_Ref, y = Total_Mensal)) +
geom_line(color = "darkblue", size = 1.2) +
geom_point(color = "red", size = 2) +
theme_minimal() +
labs(title = "Tendência de Vendas Mensais da Empresa", x = "Período", y = "Venda Total (R$)") +
scale_x_date(date_labels = "%m/%Y", date_breaks = "3 months")
venda_mensal_vendedor <- venda_mensal_vendedor %>%
mutate(Data_Ref = as.Date(paste(ano, mes, "01", sep = "-")))
ggplot(venda_mensal_vendedor, aes(x = Data_Ref, y = Total_Vendas_Mensais, group = vendedor, color = vendedor)) +
geom_line(size = 1) +
facet_wrap(~vendedor, scales = "free_y") +
theme_minimal() +
theme(legend.position = "none") +
labs(title = "Evolução Mensal de Vendas por Vendedor", x = "Período", y = "Total Mensal (R$)")
ggplot(vendas_limpo, aes(x = venda_diaria)) +
geom_histogram(bins = 40, fill = "seagreen", color = "white", alpha = 0.8) +
theme_minimal() +
labs(title = "Distribuição dos Valores das Vendas Diárias", x = "Valor da Venda Diária (R$)", y = "Frequência")
ggplot(vendas_limpo, aes(x = as.factor(mes), y = venda_diaria, fill = as.factor(mes))) +
geom_boxplot(show.legend = FALSE) +
theme_minimal() +
labs(title = "Dispersão das Vendas Diárias por Mês", x = "Mês", y = "Valor da Venda (R$)")
ggplot(vendas_limpo, aes(x = vendedor, y = venda_diaria, fill = vendedor)) +
geom_boxplot(show.legend = FALSE) +
theme_minimal() +
labs(title = "Dispersão das Vendas Diárias por Vendedor", x = "Vendedor", y = "Valor da Venda (R$)")
Regra aplicada para Março de 2024: \[Salário = Salário\_Base + Comissão(5\%) - FGTS(8\%) - INSS(11\%)\]
# Criando dados simulados de Salário Base para os vendedores existentes na base
vendedores_unicos <- unique(vendas_limpo$vendedor)
salario_base_df <- data.frame(
vendedor = vendedores_unicos,
salario_base = rep(2000.00, length(vendedores_unicos)) # Exemplo: R$ 2.000,00 de base para todos
)
# Filtrando as vendas apenas de Março de 2024
vendas_mar_2024 <- vendas_limpo %>%
filter(ano == 2024, mes == 3) %>%
group_by(vendedor) %>%
summarise(Vendas_Total_Mes = sum(venda_diaria))
# Unindo com a tabela de salário base e efetuando os cálculos
folha_marco <- salario_base_df %>%
inner_join(vendas_mar_2024, by = "vendedor") %>%
mutate(
Comissao = Vendas_Total_Mes * 0.05,
FGTS_Desconto = salario_base * 0.08,
INSS_Desconto = salario_base * 0.11,
Salario_Liquido = salario_base + Comissao - FGTS_Desconto - INSS_Desconto
)
folha_marco %>%
kable(caption = "Folha de Pagamento - Março de 2024", digits = 2) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"))
| vendedor | salario_base | Vendas_Total_Mes | Comissao | FGTS_Desconto | INSS_Desconto | Salario_Liquido |
|---|---|---|---|---|---|---|
| 101101 | 2000 | 37178.72 | 1858.94 | 160 | 220 | 3478.94 |
| 101102 | 2000 | 46217.34 | 2310.87 | 160 | 220 | 3930.87 |
| 101103 | 2000 | 44313.81 | 2215.69 | 160 | 220 | 3835.69 |
| 101104 | 2000 | 48342.67 | 2417.13 | 160 | 220 | 4037.13 |
| 101106 | 2000 | 43376.99 | 2168.85 | 160 | 220 | 3788.85 |
| 102111 | 2000 | 50860.12 | 2543.01 | 160 | 220 | 4163.01 |
| 101105 | 2000 | 55186.72 | 2759.34 | 160 | 220 | 4379.34 |
| 101107 | 2000 | 49625.06 | 2481.25 | 160 | 220 | 4101.25 |
| 101108 | 2000 | 37490.39 | 1874.52 | 160 | 220 | 3494.52 |
| 101109 | 2000 | 33693.06 | 1684.65 | 160 | 220 | 3304.65 |
| 101110 | 2000 | 41738.19 | 2086.91 | 160 | 220 | 3706.91 |
| 102112 | 2000 | 65374.47 | 3268.72 | 160 | 220 | 4888.72 |
Desafios (Automação de Contra-cheques)
# Função para gerar holerites individuais em arquivos .txt
gerar_holerites <- function(dados_folha) {
for(i in 1:nrow(dados_folha)) {
vendedor_id <- dados_folha$vendedor[i]
texto <- paste0(
"====================================================\n",
" BAR DA DORINHA - HOLERITE \n",
"====================================================\n",
"Vendedor ID: ", vendedor_id, "\n",
"----------------------------------------------------\n",
"Salário Base: R$ ", round(dados_folha$salario_base[i], 2), "\n",
"Comissão (5%): R$ ", round(dados_folha$Comissao[i], 2), "\n",
"(-) Desconto FGTS: R$ ", round(dados_folha$FGTS_Desconto[i], 2), "\n",
"(-) Desconto INSS: R$ ", round(dados_folha$INSS_Desconto[i], 2), "\n",
"----------------------------------------------------\n",
"SALÁRIO LÍQUIDO: R$ ", round(dados_folha$Salario_Liquido[i], 2), "\n",
"====================================================\n"
)
# Salva em arquivo individual
writeLines(texto, paste0("Holerite_Vendedor_", vendedor_id, ".txt"))
}
}
# Criando o objeto de Série Temporal (TS) baseado no faturamento mensal geral
# Ajuste o start de acordo com o ano/mês inicial real dos seus dados
vendas_ts <- ts(venda_mensal_geral$Total_Mensal, start = c(min(venda_mensal_geral$ano), min(venda_mensal_geral$mes)), frequency = 12)
# Ajustando o modelo de previsão automática
modelo_previsao <- forecast(vendas_ts, h = 6)
# Plotando o gráfico de previsão
plot(modelo_previsao, main = "Previsão de Vendas para os Próximos 6 Meses - Bar da Dorinha",
xlab = "Tempo", ylab = "Vendas Totais (R$)", col = "blue", fcol = "red")
A análise de dados permitiu identificar com clareza quais colaboradores trazem o maior faturamento para o Bar da Dorinha, além de apontar as tendências de crescimento da empresa. O modelo preditivo nos próximos meses serve como uma excelente ferramenta de apoio à tomada de decisão gerencial, permitindo prever necessidades de estoque e fluxo de caixa.