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 os nomes das colunas e varificando o tipo de dado de cada coluna, para facilitar na hora de fazer qual que tipo de gráfico ou até mesmo poder fazer operações aritimétricas

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> "Vendedor", "Vendedor", "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 - Alteração de tipo de dado:

1.2.3 - Alterando os nomes das colunas, o meu caso só irei mudar os nomes da base de dados da planilha salário, pois não vi necessidade de mudar o nomes das colunas da base de dados da planilha de vendas.

salario <- salario %>%
  select(numero_de_inscricao = `Número de Inscrição`,
   nome = `Nome`,
  sobrenome = `Sobrenome`,
  setor = `Setor`,
  cargo = `Cargo`,
  contrato = `Contrato`,
  salario_base = `Salario_base`)

1.2.4 - Alterando tipo de dado de uma variável, de acordo com que foi solicitado para fazer o projeto. “coluna”

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.1 - 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.4.2 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 = "steelblue", 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 vendedos)

# 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
  
  # A MÁGICA PEDIDA: 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 = "steelblue", 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 a tabela ficar bonita e fácil de ler
  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 Vend…  2018     1         2000       40682.    2034.
## 2   101101 Nome1 Sobrenome1 Vend…  2018     2         2000       41948.    2097.
## 3   101101 Nome1 Sobrenome1 Vend…  2018     3         2000       39753.    1988.
## 4   101101 Nome1 Sobrenome1 Vend…  2018     4         2000       40270.    2014.
## 5   101101 Nome1 Sobrenome1 Vend…  2018     5         2000       60735.    3037.
## 6   101101 Nome1 Sobrenome1 Vend…  2018     6         2000       37627.    1881.
## # ℹ 4 more variables: salario_bruto <dbl>, desconto_fgts <dbl>,
## #   desconto_inss <dbl>, salario_final <dbl>