Aprenda programação básica a partir do link https://rpubs.com/adlauro/881802.
library(readxl)
## Warning: pacote 'readxl' foi compilado no R versão 4.5.2
library(dplyr)
## Warning: pacote 'dplyr' foi compilado no R versão 4.5.2
##
## 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)
## Warning: pacote 'ggplot2' foi compilado no R versão 4.5.2
library(readr)
## Warning: pacote 'readr' foi compilado no R versão 4.5.2
library(readxl)
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)
## Warning: pacote 'forecast' foi compilado no R versão 4.5.2
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
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
getwd()
## [1] "C:/Users/Júlia/Downloads"
dir()
## [1] "desktop.ini" "Projeto-fase-3-elisa.html"
## [3] "Projeto-fase-3-elisa.Rmd" "Projeto fase 3 elisa.Rmd"
## [5] "Salario_base2024.xlsx" "Vendas2024.xlsx"
setwd("C:/Users/Júlia/Downloads")
salarios <- read_excel("Salario_base2024.xlsx")
vendas <- read_excel("Vendas2024.xlsx")
# Carregar os arquivos
vendas <- read_excel("Vendas2024.xlsx", sheet = 1)
salarios <- read_excel("Salario_base2024.xlsx", sheet = 1)
# Ajustar tipos
vendas <- vendas %>%
mutate(
vendedor = as.factor(vendedor),
dias = as.Date(dias),
venda_diaria = as.numeric(venda_diaria),
ano = as.integer(ano),
mes = as.integer(mes)
) %>%
filter(!is.na(venda_diaria)) # remover NAs
# 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 : int [1:113202] 2018 2018 2018 2018 2018 2018 2018 2018 2018 2018 ...
## $ mes : int [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> <int> <int>
## 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$venda_diaria)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 9.79 133.27 254.06 260.38 373.85 838.42
# i) 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()
) %>%
arrange(desc(total_vendas))
estat_vendedor
## # A tibble: 12 × 6
## vendedor total_vendas media_diaria mediana_diaria desvio_padrao n_registros
## <fct> <dbl> <dbl> <dbl> <dbl> <int>
## 1 101102 4031176. 276. 268. 161. 14604
## 2 101101 3489519. 254. 249. 146. 13742
## 3 101103 3433923. 269. 265. 155. 12779
## 4 101105 2694622. 259. 251. 150. 10419
## 5 101104 2491491. 237. 232. 138. 10493
## 6 101108 2473665. 271. 265. 157. 9112
## 7 101106 2458056. 246. 241. 143. 9997
## 8 102111 2441308. 245. 241. 141. 9978
## 9 101107 2201441. 250. 243. 147. 8796
## 10 102112 1338667. 290. 283. 167. 4624
## 11 101109 1296194. 304. 298. 174. 4263
## 12 101110 1125154. 256. 252. 146. 4395
# ii) Venda mensal total (geral)
venda_mensal_total <- vendas %>%
group_by(ano, mes) %>%
summarise(total_mensal = sum(venda_diaria))
## `summarise()` has grouped output by 'ano'. You can override using the `.groups`
## argument.
venda_mensal_total
## # A tibble: 75 × 3
## # Groups: ano [7]
## ano mes total_mensal
## <int> <int> <dbl>
## 1 2018 1 101568.
## 2 2018 2 84567.
## 3 2018 3 85530.
## 4 2018 4 98811.
## 5 2018 5 120226.
## 6 2018 6 97620.
## 7 2018 7 83419.
## 8 2018 8 124339.
## 9 2018 9 120982.
## 10 2018 10 127808.
## # ℹ 65 more rows
# iii) Venda mensal por vendedor
venda_mensal_vendedor <- vendas %>%
group_by(vendedor, ano, mes) %>%
summarise(total_mensal = sum(venda_diaria))
## `summarise()` has grouped output by 'vendedor', 'ano'. You can override using
## the `.groups` argument.
venda_mensal_vendedor
## # A tibble: 601 × 4
## # Groups: vendedor, ano [64]
## vendedor ano mes total_mensal
## <fct> <int> <int> <dbl>
## 1 101101 2018 1 40682.
## 2 101101 2018 2 41948.
## 3 101101 2018 3 39753.
## 4 101101 2018 4 40270.
## 5 101101 2018 5 60735.
## 6 101101 2018 6 37627.
## 7 101101 2018 7 52441.
## 8 101101 2018 8 34253.
## 9 101101 2018 9 30024.
## 10 101101 2018 10 41341.
## # ℹ 591 more rows
# i) Gráfico de barras - total por vendedor
ggplot(estat_vendedor, aes(x = reorder(vendedor, -total_vendas), y = total_vendas)) +
geom_bar(stat="identity", fill="steelblue") +
labs(title="Total de Vendas por Vendedor", x="Vendedor", y="Total de Vendas")
# ii) Gráfico de linhas - tendência geral mensal
ggplot(venda_mensal_total, aes(x = mes, y = total_mensal, group=ano, color=factor(ano))) +
geom_line(size=1.2) +
labs(title="Tendência Mensal de Vendas (Geral)", x="Mês", y="Total Mensal")
## 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.
# iii) Facetado - vendas mensais por vendedor
ggplot(venda_mensal_vendedor, aes(x = mes, y = total_mensal, group=ano, color=factor(ano))) +
geom_line(size=1) +
facet_wrap(~vendedor, scales="free_y") +
labs(title="Vendas Mensais por Vendedor", x="Mês", y="Total Mensal")
# iv) Histograma da venda_diaria
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")
# v) Boxplot por mês
ggplot(vendas, aes(x=factor(mes), y=venda_diaria)) +
geom_boxplot(fill="orange") +
labs(title="Boxplot das Vendas Diárias por Mês", x="Mês", y="Venda Diária")
# vi) Boxplot por vendedor
ggplot(vendas, aes(x=vendedor, y=venda_diaria)) +
geom_boxplot(fill="purple") +
labs(title="Boxplot das Vendas por Vendedor", x="Vendedor", y="Venda Diária")
# Série temporal: vendas totais mensais
ts_vendas <- ts(venda_mensal_total$total_mensal, frequency=12)
# Modelo ARIMA automático
modelo <- auto.arima(ts_vendas)
# Previsão para 6 meses
prev <- forecast(modelo, h=6)
plot(prev, main="Previsão de Vendas para os Próximos 6 Meses")
prev
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## Apr 7 640477.5 576728.0 704227.1 542981.0 737974.0
## May 7 771324.3 692254.1 850394.5 650396.8 892251.7
## Jun 7 756612.1 670413.6 842810.7 624782.9 888441.4
## Jul 7 679514.9 589712.5 769317.3 542173.9 816855.9
## Aug 7 678775.7 587091.5 770459.8 538556.9 818994.5
## Sep 7 670983.0 578301.5 763664.5 529238.9 812727.1