Centro Universitário Celso Lisboa

Professor: Adriano Lauro

Alunos: Elisa Reis

Disciplina: Análise de Dados

Aula de Programação fase 3 - Celso Lisboa

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

Carregando Planilhas

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")

Importação dos Dados

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

Estatísticas com dplyr

# 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

Visualizações com ggplot2

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

Desafio: Previsão de Vendas

# 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