Carregamento de Pacotes

library(rmarkdown) 
library(readr) 
library(dplyr) 
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2) 
library(readxl) 
library(tidyr) 
library(lubridate) 
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
library(knitr) 

## 1 - Carregamento e preparação dos dados ### 1.1 - Carregamento de Planilhas

vendas <- read_excel("Vendas2024.xlsx") 
salario <- read_excel("Salario_base2024.xlsx") 

Verificando os dados da base:

verificando o nome das colunas e verificando o dado contido para facilitar no momento de produzir o grafico

glimpse(vendas) 
## Rows: 113,202
## Columns: 5
## $ vendedor     <dbl> 101101, 101101, 101101, 101101, 101101, 101101, 101101, 1…
## $ dias         <dttm> 2018-01-01, 2018-01-01, 2018-01-01, 2018-01-01, 2018-01-…
## $ venda_diaria <dbl> 371.97, 138.59, 353.93, 240.73, 122.54, 165.06, 252.70, 3…
## $ ano          <dbl> 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 201…
## $ mes          <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
colnames(vendas) 
## [1] "vendedor"     "dias"         "venda_diaria" "ano"          "mes"
glimpse(salario) 
## Rows: 22
## Columns: 7
## $ `Número de Inscrição` <dbl> 101101, 101102, 201101, 301101, 101103, 101104, …
## $ Nome                  <chr> "Nome1", "Nome2", "Nome14", "Nome18", "Nome3", "…
## $ Sobrenome             <chr> "Sobrenome1", "Sobrenome2", "Sobrenome14", "Sobr…
## $ Setor                 <chr> "Operação", "Operação", "Apoio", "Administrativo…
## $ Cargo                 <chr> "Operador", "Operador", "Aux Sev Gerais", "Aux A…
## $ Contrato              <dttm> 2018-01-01, 2018-01-02, 2018-04-01, 2018-04-01,…
## $ Salario_base          <dbl> 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, …
colnames(salario) 
## [1] "Número de Inscrição" "Nome"                "Sobrenome"          
## [4] "Setor"               "Cargo"               "Contrato"           
## [7] "Salario_base"

1.2.2 - Alterando tipo de dado de uma variável, de acordo com aas direçoes para o projeto.

vendas <- vendas %>% 

  mutate(vendedor = as.factor(vendedor), 

         venda_diaria = as.numeric(venda_diaria) 

         ) 

1.3 - Tratando os NAs:

Identificando NA em toda base de dados

sum(is.na(vendas)) 
## [1] 0

Obs: Foi identificado que não há linha sem registro em nenhuma variável.

1.4 - comando str

demonstra estrutura completa e “desenha” os caminhos

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        : POSIXct[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 ...

1.5 - summary

utilizado para calcular sumario estatico dos valores de um vetor ou matriz: quartis, média máximo e mínimo

summary(vendas) 
##     vendedor          dias                      venda_diaria         ano      
##  101102 :14604   Min.   :2018-01-01 00:00:00   Min.   :  9.79   Min.   :2018  
##  101101 :13742   1st Qu.:2020-09-19 00:00:00   1st Qu.:133.27   1st Qu.:2020  
##  101103 :12779   Median :2022-02-03 00:00:00   Median :254.06   Median :2022  
##  101104 :10493   Mean   :2021-11-21 03:43:43   Mean   :260.38   Mean   :2021  
##  101105 :10419   3rd Qu.:2023-03-15 00:00:00   3rd Qu.:373.85   3rd Qu.:2023  
##  101106 : 9997   Max.   :2024-03-30 00:00:00   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

2.1 - Venda total, média diária, mediana diária, desvio padrão diário, e número total de registros de vendas

   estatistica_complexa <- vendas %>%  

  group_by(vendedor) %>%  # grup_by é o comando para agrupar os registros 

  summarise(vendas_total = sum(na.omit(venda_diaria)), # sum é o comando de somatório  

  media_vendas = mean(na.omit(venda_diaria)), # mean é o comando de média 

  mediana_venda = median(na.omit(venda_diaria)), # median é o comendo de mediana 

  desv_padrao_venda_diaria = sd(na.omit(venda_diaria)), # sd é o comando de desvio padrão 

  quantidade_vendas = n() # n é o comando para totalizar registros por vendedor 

            ) %>% 

  arrange(desc(vendas_total)) 
print(estatistica_complexa) 
## # A tibble: 12 × 6
##    vendedor vendas_total media_vendas mediana_venda desv_padrao_venda_diaria
##    <fct>           <dbl>        <dbl>         <dbl>                    <dbl>
##  1 101102       4031176.         276.          268.                     161.
##  2 101101       3489519.         254.          249.                     146.
##  3 101103       3433923.         269.          265.                     155.
##  4 101105       2694622.         259.          251.                     150.
##  5 101104       2491491.         237.          232.                     138.
##  6 101108       2473665.         271.          265.                     157.
##  7 101106       2458056.         246.          241.                     143.
##  8 102111       2441308.         245.          241.                     141.
##  9 101107       2201441.         250.          243.                     147.
## 10 102112       1338667.         290.          283.                     167.
## 11 101109       1296194.         304.          298.                     174.
## 12 101110       1125154.         256.          252.                     146.
## # ℹ 1 more variable: quantidade_vendas <int>

2.2 - Venda mensal total

vendas %>%  

  group_by(mes) %>% 

  summarise(venda = sum(na.omit(venda_diaria)))  
## # A tibble: 12 × 2
##      mes    venda
##    <dbl>    <dbl>
##  1     1 2386425.
##  2     2 1997638.
##  3     3 2465693.
##  4     4 2164830.
##  5     5 2661291.
##  6     6 2439277.
##  7     7 2057659.
##  8     8 2091707.
##  9     9 2109516.
## 10    10 2511229.
## 11    11 3013742.
## 12    12 3576212.

### 2.3 - Venda total mensal de cada vendedor

vendas %>%  

  group_by(mes,vendedor) %>% 

  summarise(venda = sum(na.omit(venda_diaria)))  
## `summarise()` has regrouped the output.
## ℹ Summaries were computed grouped by mes and vendedor.
## ℹ Output is grouped by mes.
## ℹ Use `summarise(.groups = "drop_last")` to silence this message.
## ℹ Use `summarise(.by = c(mes, vendedor))` for per-operation grouping
##   (`?dplyr::dplyr_by`) instead.
## # A tibble: 144 × 3
## # Groups:   mes [12]
##      mes vendedor   venda
##    <dbl> <fct>      <dbl>
##  1     1 101101   304997.
##  2     1 101102   358326.
##  3     1 101103   256951.
##  4     1 101104   222662.
##  5     1 101105   243602.
##  6     1 101106   190748.
##  7     1 101107   131992.
##  8     1 101108   144379.
##  9     1 101109   130293.
## 10     1 101110   102221.
## # ℹ 134 more rows

3 - Visualização de dados com ggoplot2

3.1 - Gráfico de barras (Vendas por vendedor)

ggplot(estatistica_complexa, aes(x=vendedor, y=quantidade_vendas, fill=vendedor)) + 

  geom_bar(stat="identity") + # 'identity' porque o Y já é a contagem 

  labs( # Adiciona títulos e rótulos 

    title = "Total de Vendas por Vendedor", 

    x = "Vendedor", 

    y = "Quantidade de Vendas" 

  )  

3.2 - Gráfico de linhas (Vendas por mês)

# Criando o gráfico de linhas 

vendas_processado <- vendas %>%  
  group_by(mes) %>% 
  summarise(venda = sum(na.omit(venda_diaria)))  
print(vendas_processado) 
## # A tibble: 12 × 2
##      mes    venda
##    <dbl>    <dbl>
##  1     1 2386425.
##  2     2 1997638.
##  3     3 2465693.
##  4     4 2164830.
##  5     5 2661291.
##  6     6 2439277.
##  7     7 2057659.
##  8     8 2091707.
##  9     9 2109516.
## 10    10 2511229.
## 11    11 3013742.
## 12    12 3576212.
ggplot(vendas_processado) + 
  aes(x = mes, y = venda) + 
  geom_line(color = "red", size = 1) + 
  scale_x_continuous(breaks = 1:12) + # FORÇA O EIXO X A MOSTRAR INTEIROS DE 1 A 12 
  labs( 
    title = "Vendas Mensais", 
    x = "Mês", 
    y = "Quantidade de Vendas", 
    color = "Vendedores" 
  ) + 
  theme_minimal() 
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Ignoring unknown labels:
## • colour : "Vendedores"

3.3 - Gráfico de linha facetado (Venda mensal por vendedor)

# 1. Consolidar os dados (Criando a coluna 'Total_Vendas_Mensais') 

vendas_vendedor_mes <- vendas %>% 
  group_by(vendedor, ano, mes) %>% 
  summarise( 
    Total_Vendas_Mensais = sum(venda_diaria, na.rm = TRUE), # Soma as vendas diárias 
    .groups = "drop" 
  ) %>% 

  # Junta Ano e Mês para criar uma linha do tempo contínua e cronológica 
  
  mutate(data_mensal = as.Date(paste(ano, mes, "01", sep = "-"))) 

# 2. Criar o conjunto de gráficos facetados com eixos Y livres 

ggplot(vendas_vendedor_mes, aes(x = data_mensal, y = Total_Vendas_Mensais, color = as.factor(vendedor))) + 
  geom_line(linewidth = 0.3) +   # Desenha a linha de evolução 
  geom_point(size = 0.8) +     # Adiciona pontos nos meses para facilitar a leitura 

  # Finalmente divide em painéis por vendedor com escala Y livre 

  facet_wrap(~ vendedor, scales = "free_y") + 

  # Formata o eixo X para mostrar o padrão "Mês/Ano" de forma limpa (ex: Jan 2024) 

  scale_x_date(date_labels = "%b %Y", date_breaks = "6 months") + 
  labs( 
    title = "Evolução do Total de Vendas Mensais por Vendedor", 
    subtitle = "Gráficos facetados com escalas independentes no eixo Y (scales = 'free_y')", 
    x = "Linha do Tempo (Mês/Ano)", 
    y = "Total de Vendas Mensais (R$)" 
  ) + 
  theme_minimal() + 
  theme( 
    legend.position = "none", # Oculta a legenda lateral, pois o topo de cada painel já diz quem é o vendedor 
    axis.text.x = element_text(angle = 45, hjust = 1) # Inclina as datas do eixo X para não sobrepor o texto 
  ) + 

  # Altere o 'date_breaks' para o intervalo que preferir ("3 months", "6 months", "1 year") 
  scale_x_date(date_labels = "%b %Y", date_breaks = "1 year") 
## Scale for x is already present.
## Adding another scale for x, which will replace the existing scale.

3.4 - Histograma para da distribuição dos valores da venda_diaria.

# Criar o histograma 

ggplot(vendas, aes(x = venda_diaria)) + 

  # geom_histogram cria o gráfico.  

  # 'fill' é a cor interna das barras e 'color' é a cor da borda. 

  # 'bins = 30' é o padrão, mas você pode aumentar ou diminuir esse número. 

  geom_histogram(fill = "green", color = "white", bins = 30) + 

   

  labs( 

    title = "Distribuição dos Valores de Vendas Diárias", 

    subtitle = "Frequência de valores das vendas", 

    x = "Valor da Venda Diária (R$)", 

    y = "Frequência (Quantidade de vezes)" 

  ) + 

  theme_minimal() 

3.5 - Boxplot das venda_diaria por mês (analise da variação e distribuição das vendas diárias em cada mês).

# 2. Criar o Boxplot 

# Usamos as.factor(mes) no eixo X para o R separar um bloco para cada mês 

# Usamos fill = as.factor(mes) para dar uma cor diferente para cada mês 

ggplot(vendas, aes(x = as.factor(mes), y = venda_diaria, fill = as.factor(mes))) + 
  geom_boxplot() + 
  labs( 
    title = "Variação e Distribuição de Vendas Diárias por Mês", 
    subtitle = "Análise de quartis, medianas e valores atípicos (outliers)", 
    
    x = "Mês", 

    y = "Valor da Venda Diária (R$)" 

  ) + 
  theme_minimal() + 
  theme(legend.position = "none") # Esconde a legenda lateral porque os meses já estão no eixo X 

3.6 - Boxplot totalizando as vendas por vendedor

# Criar o Boxplot por Vendedor 

# Usamos as.factor(vendedor) no eixo X e no fill para separar e colorir cada vendedor 

ggplot(vendas, aes(x = as.factor(vendedor), y = venda_diaria, fill = as.factor(vendedor))) + 
  geom_boxplot() + 
  labs( 
    title = "Distribuição e Variação de Vendas Diárias por Vendedor",
    subtitle = "Comparação de desempenho, medianas e dispersão entre os vendedores", 
    x = "Código do Vendedor", 

    y = "Valor da Venda Diária (R$)" 

  ) + 
  theme_minimal() + 
  theme( 
    legend.position = "none", # Remove a legenda lateral pois os códigos já estão no eixo X 
    axis.text.x = element_text(angle = 45, hjust = 1) # Inclina os códigos dos vendedores caso sejam muito longos 
  ) 

4 Salário de março de 2024 dos vendedores:

4.1 - Incluíndo Comissão de Vendas (+5%) e descontando FGTS (-8%) e INSS (-11%)

# 1. Ler as duas planilhas 

# Substitua pelos nomes exatos dos seus arquivos 

vendas <- read_excel("Vendas2024.xlsx") 
funcionarios <- read_excel("Salario_base2024.xlsx") 

# 2. Consolidar as vendas mensais de cada vendedor 

vendas_mensais <- vendas %>% 
  group_by(vendedor, ano, mes) %>% 
  summarise(total_vendas = sum(venda_diaria, na.rm = TRUE), .groups = "drop") 

# 3. Cruzar as planilhas e calcular os salários 

folha_pagamento <- vendas_mensais %>% 

  # O left_join conecta as duas tabelas.  

  # Ele entende que 'vendedor' da tabela 1 é a mesma coisa que 'Número de Inscrição' da tabela 2. 
  left_join(funcionarios, by = c("vendedor" = "Número de Inscrição")) %>% 

  # 4. Aplicar a fórmula do Salário 

  mutate( 

    # Calcula a comissão (5% sobre as vendas) 

    comissao = total_vendas * 0.05, 

     

    # Soma Base + Comissão para termos o Salário Bruto 

    salario_bruto = Salario_base + comissao, 

     

    # Calcula os descontos (Assumindo que incidem sobre o Salário Bruto) 

    desconto_fgts = salario_bruto * 0.08, 

    desconto_inss = salario_bruto * 0.11, 

     

    # Salário Final (Líquido) 

    salario_final = salario_bruto - desconto_fgts - desconto_inss 

  ) %>% 

  # 5. Organizar as colunas para melhor compreensão
  
  select( 

    vendedor, Nome, Sobrenome, Cargo, ano, mes,  

    Salario_base, total_vendas, comissao, salario_bruto,  

    desconto_fgts, desconto_inss, salario_final 

  ) 

# Visualizar as primeiras linhas da nova tabela 

head(folha_pagamento) 
## # A tibble: 6 × 13
##   vendedor Nome  Sobrenome  Cargo   ano   mes Salario_base total_vendas comissao
##      <dbl> <chr> <chr>      <chr> <dbl> <dbl>        <dbl>        <dbl>    <dbl>
## 1   101101 Nome1 Sobrenome1 Oper…  2018     1         2000       40682.    2034.
## 2   101101 Nome1 Sobrenome1 Oper…  2018     2         2000       41948.    2097.
## 3   101101 Nome1 Sobrenome1 Oper…  2018     3         2000       39753.    1988.
## 4   101101 Nome1 Sobrenome1 Oper…  2018     4         2000       40270.    2014.
## 5   101101 Nome1 Sobrenome1 Oper…  2018     5         2000       60735.    3037.
## 6   101101 Nome1 Sobrenome1 Oper…  2018     6         2000       37627.    1881.
## # ℹ 4 more variables: salario_bruto <dbl>, desconto_fgts <dbl>,
## #   desconto_inss <dbl>, salario_final <dbl>