INTRODUÇÃO

Este projeto será baseado na análise dos dados de vendas. Diz-se que a análise de base está fornecendo melhorias significativas no crescimento, na eficiência, e na eficácia que tem vindo a desempenhar um papel cada vez mais importante nas vendas. Existem 4 áreas primárias onde as análises são implantadas:

Melhorar a geração de leads Correspondência de clientes com ofertas Maximizando o valor da vida útil dos clientes Estratégias do preço As empresas de vendas estão usando dados históricos para obter uma melhor visão geral de seus clientes atuais, mas também para ser capaz de encontrar potenciais clientes com maior precisão. Grandes dados permitem uma melhor segmentação dos clientes, bem como, para construir sistemas de recomendação. Há também modelos que podem prever churn. Outros usos de dados incluem alocação de recursos, planejamento de vendas, acompanhamento de embarques. Além disso, as empresas de vendas utilizam reconhecimento de voz e processamento de linguagem natural para suporte ao cliente (Atkins et al., 2016). Assim, o uso de analítica pode ser muito útil e pode evitar perdas por ter acesso em tempo real às informações necessárias e ser capaz de prever qualquer escassez de componentes, ou ser capaz de oferecer promoções especiais quando alguns produtos não estão sendo comprados. O dataset usado neste projeto consiste em 27 variáveis e 1000 observações. As variáveis incluídas neste dataset são simultaneamente qualitativas e quantitativas. Dez deles são numéricos e consistem em métricas de negócios - volumes de vendas, perdas, lucros. Outras variáveis numéricas contêm informações sobre os produtos - os seus preços, as quantidades vendidas, as quantidades de produtos devolvidos, os preços do transporte, os descontos etc

Muitas das variáveis restantes são categóricas e contêm informações sobre os clientes (seus nomes e identidades exclusivas) e dados geográficos sobre onde os clientes estão localizados. Há também variáveis categóricas a respeito de produtos e ordens. Variáveis escolhidas serão usadas na seção de análise para encontrar informações perspicaz sobre a empresa que os dados foram coletados. Há também duas variáveis que representam datas de ordens e carregamentos.

FORMULAÇÃO DO PROBLEMA

Uma representação gráfica dos dados pode ser uma ferramenta poderosa para fazer sentido de dados e vários gráficos são ditos para o sentido de um atalho para a mente humana para converter dados em conhecimento. (Jones, 2020). Portanto, muitas tarefas serão focadas na apresentação dos dados visualmente.

Há muitos tipos de gráficos que podem representar dados e diferentes tipos de dados são mostrados melhor usando um determinado tipo de gráfico. Escolher uma visualização errada pode levar a uma interpretação errada dos dados (Oetting). Este projeto incidirá principalmente em gráficos de barras e gráficos de pizza para dados categóricos discretos (contando os números de pedidos por categoria) e eu estarei usando plotagens de caixa e histogramas para variáveis numéricas. Eu queria tentar usar outros métodos de plotagem, bem, assim como parcelas pontilham será usado na tarefa 4 para apresentar estatísticas para as subcategorias escolhidas.

Esta análise incidirá sobre a visão de cima para baixo dos dados de vendas, como visto pelo gerente. Isso significa que as variáveis usadas serão relacionadas com as métricas financeiras - lucros, perdas, vendas totais, em vez de perfurar para baixo em clientes individuais ou suas ordens, descontos, etc. Eu vou estar usando análise de dados exploratória e com a ajuda de estatísticas descritivas e gráficos, vou desenhar insights sobre os segmentos mais rentáveis (tanto segmentos de clientes e grupos de produtos). Também explorarei os melhores meses e dias da semana para este negócio.

IMPORTAR BANCO DE DADO E PACOTES

Primeiro passo antes de tudo vamos importar os pacotes que iremos usar neste analise, e o segundo passo vamos importar o nosso banco de dado, onde iremos renomear o nosso banco de dado por VENDAS.

# importar pacotes
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.4.0      ✔ purrr   1.0.1 
## ✔ tibble  3.1.8      ✔ dplyr   1.0.10
## ✔ tidyr   1.2.1      ✔ stringr 1.5.0 
## ✔ readr   2.1.3      ✔ forcats 0.5.2 
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(readxl)
library(psych)
## 
## Attaching package: 'psych'
## 
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
# importar banco de dado
vendas <- read_excel("D:/ANALISE DE DADOS/Sales-Analysis-main/Sales-Analysis-main/superstore_sales.xlsx")

SECÇÃO DE ANÁLISE

Tarefa 1

Apresentando estatísticas básicas descritivas

Visualizacao da dimensao do nosso banco de dado

dim(vendas)
## [1] 51290    21

O nosso banco de dado tem 21 colinas e 51290 linhas

Quais colunas que possue o nosso banco de dado? O nosso resultado mostra que temos seguintes colunas:

“order_id” “order_date” “ship_date”
“ship_mode” “customer_name” “segment”
“state” “country” “market”
“region” “product_id” “category”
“sub_category” “product_name” “sales”
“quantity” “discount” “profit”
“shipping_cost” “order_priority” “year”

names(vendas)
##  [1] "order_id"       "order_date"     "ship_date"      "ship_mode"     
##  [5] "customer_name"  "segment"        "state"          "country"       
##  [9] "market"         "region"         "product_id"     "category"      
## [13] "sub_category"   "product_name"   "sales"          "quantity"      
## [17] "discount"       "profit"         "shipping_cost"  "order_priority"
## [21] "year"

Visualizacao de informacao detalhada de cada coluna

glimpse(vendas)
## Rows: 51,290
## Columns: 21
## $ order_id       <chr> "AG-2011-2040", "IN-2011-47883", "HU-2011-1220", "IT-20…
## $ order_date     <dttm> 2011-01-01, 2011-01-01, 2011-01-01, 2011-01-01, 2011-0…
## $ ship_date      <dttm> 2011-01-06, 2011-01-08, 2011-01-05, 2011-01-05, 2011-0…
## $ ship_mode      <chr> "Standard Class", "Standard Class", "Second Class", "Se…
## $ customer_name  <chr> "Toby Braunhardt", "Joseph Holt", "Annie Thurman", "Eug…
## $ segment        <chr> "Consumer", "Consumer", "Consumer", "Home Office", "Con…
## $ state          <chr> "Constantine", "New South Wales", "Budapest", "Stockhol…
## $ country        <chr> "Algeria", "Australia", "Hungary", "Sweden", "Australia…
## $ market         <chr> "Africa", "APAC", "EMEA", "EU", "APAC", "APAC", "Canada…
## $ region         <chr> "Africa", "Oceania", "EMEA", "North", "Oceania", "Ocean…
## $ product_id     <chr> "OFF-TEN-10000025", "OFF-SU-10000618", "OFF-TEN-1000158…
## $ category       <chr> "Office Supplies", "Office Supplies", "Office Supplies"…
## $ sub_category   <chr> "Storage", "Supplies", "Storage", "Paper", "Furnishings…
## $ product_name   <chr> "Tenex Lockers, Blue", "Acme Trimmer, High Speed", "Ten…
## $ sales          <dbl> 408.3000, 120.3660, 66.1200, 44.8650, 113.6700, 55.2420…
## $ quantity       <dbl> 2, 3, 4, 3, 5, 2, 1, 1, 4, 4, 3, 1, 7, 1, 2, 4, 2, 2, 2…
## $ discount       <dbl> 0.00, 0.10, 0.00, 0.50, 0.10, 0.10, 0.00, 0.10, 0.40, 0…
## $ profit         <dbl> 106.1400, 36.0360, 29.6400, -26.0550, 37.7700, 15.3420,…
## $ shipping_cost  <dbl> 35.460, 9.720, 8.170, 4.820, 4.700, 1.800, 24.100, 125.…
## $ order_priority <chr> "Medium", "Medium", "High", "High", "Medium", "Medium",…
## $ year           <dbl> 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2…

Descrição de cada coluna

describe(vendas)
## Warning in FUN(newX[, i], ...): no non-missing arguments to min; returning Inf

## Warning in FUN(newX[, i], ...): no non-missing arguments to min; returning Inf
## Warning in FUN(newX[, i], ...): no non-missing arguments to max; returning -Inf

## Warning in FUN(newX[, i], ...): no non-missing arguments to max; returning -Inf
##                 vars     n     mean      sd   median  trimmed     mad      min
## order_id*          1 51290 12565.19 7209.60 12525.50 12570.46 9192.86     1.00
## order_date         2 51290      NaN      NA       NA      NaN      NA      Inf
## ship_date          3 51290      NaN      NA       NA      NaN      NA      Inf
## ship_mode*         4 51290     3.25    1.08     4.00     3.44    0.00     1.00
## customer_name*     5 51290   399.19  229.21   400.00   399.48  295.04     1.00
## segment*           6 51290     1.67    0.77     1.00     1.58    0.00     1.00
## state*             7 51290   562.07  303.74   573.00   563.55  386.96     1.00
## country*           8 51290    80.07   46.68    82.00    81.44   68.20     1.00
## market*            9 51290     4.48    2.05     5.00     4.58    2.97     1.00
## region*           10 51290     7.09    3.58     7.00     7.15    4.45     1.00
## product_id*       11 51290  5099.60 2859.77  5042.00  5090.51 3316.58     1.00
## category*         12 51290     2.01    0.62     2.00     2.01    0.00     1.00
## sub_category*     13 51290     8.50    4.84     8.00     8.46    5.93     1.00
## product_name*     14 51290  1880.40 1092.27  1856.00  1888.40 1495.94     1.00
## sales             15 51290   246.49  487.57    85.05   142.01   99.34     0.44
## quantity          16 51290     3.48    2.28     3.00     3.16    1.48     1.00
## discount          17 51290     0.14    0.21     0.00     0.10    0.00     0.00
## profit            18 51290    28.64  174.42     9.24    17.74   23.66 -6599.98
## shipping_cost     19 51290    26.38   57.30     7.79    13.73    9.50     0.00
## order_priority*   20 51290     3.12    1.08     4.00     3.24    0.00     1.00
## year              21 51290  2012.78    1.10  2013.00  2012.85    1.48  2011.00
##                      max    range  skew kurtosis    se
## order_id*       25035.00 25034.00  0.00    -1.19 31.83
## order_date          -Inf     -Inf    NA       NA    NA
## ship_date           -Inf     -Inf    NA       NA    NA
## ship_mode*          4.00     3.00 -1.21    -0.02  0.00
## customer_name*    795.00   794.00 -0.01    -1.20  1.01
## segment*            3.00     2.00  0.65    -1.02  0.00
## state*           1094.00  1093.00 -0.04    -1.19  1.34
## country*          147.00   146.00  0.01    -1.41  0.21
## market*             7.00     6.00 -0.37    -1.29  0.01
## region*            13.00    12.00 -0.01    -1.14  0.02
## product_id*     10292.00 10291.00  0.01    -1.10 12.63
## category*           3.00     2.00  0.00    -0.44  0.00
## sub_category*      17.00    16.00  0.11    -1.36  0.02
## product_name*    3788.00  3787.00 -0.02    -1.28  4.82
## sales           22638.48 22638.04  8.14   176.71  2.15
## quantity           14.00    13.00  1.36     2.28  0.01
## discount            0.85     0.85  1.39     0.72  0.00
## profit           8399.98 14999.95  4.16   290.86  0.77
## shipping_cost     933.57   933.57  5.86    50.01  0.25
## order_priority*     4.00     3.00 -0.60    -1.27  0.00
## year             2014.00     3.00 -0.34    -1.22  0.00
which(is.na(vendas))
## integer(0)
sum(is.na(vendas))
## [1] 0

Tarefa 2

Visualização da categoria de produto mais vendido

vendas %>% ggplot(aes(category)) + geom_bar()

Tarefa 3

Visualização de sub-categoria de produto mais vendido

vendas %>% ggplot(aes(sub_category)) + geom_bar() + coord_flip()

Os top 10 clientes que compram mais os produtos

vendas %>% count(customer_name, sort = T)
## # A tibble: 795 × 2
##    customer_name       n
##    <chr>           <int>
##  1 Muhammed Yedwab   108
##  2 Steven Ward       106
##  3 Bill Eplett       102
##  4 Gary Hwang        102
##  5 Patrick O'Brill   102
##  6 Harry Greene      101
##  7 Eric Murdock      100
##  8 Art Ferguson       98
##  9 Brosina Hoffman    97
## 10 Bart Watters       96
## # … with 785 more rows

Visualização de clientes por categoria.

vendas %>% filter(customer_name=="Muhammed Yedwab"|
                    customer_name== "Steven Ward"|
                    customer_name=="Bill Eplett"|
                    customer_name== "Gary Hwang"|
                    customer_name== "Patrick O'Brill"|
                    customer_name== "Harry Greene"|
                    customer_name== "Eric Murdock"|
                    customer_name== "Art Ferguson"|
                    customer_name== "Brosina Hoffman"|
                    customer_name== "Bart Watters") %>% ggplot(aes(customer_name, fill=category)) + geom_bar() + coord_flip()

Grafico de melhor cliente (MUHAMMED YEDWAB)

vendas %>% filter(customer_name=="Muhammed Yedwab") %>% ggplot(aes(sub_category)) + geom_bar() + coord_flip()

vendas %>% filter(customer_name=="Muhammed Yedwab") %>% count(product_name, sort = T)
## # A tibble: 106 × 2
##    product_name                                                                n
##    <chr>                                                                   <int>
##  1 "Cardinal Hole Reinforcements, Durable"                                     2
##  2 "Wilson Jones Binder Covers, Recycled"                                      2
##  3 "\"While you Were Out\" Message Book, One Form per Page"                    1
##  4 "Acco Data Flex Cable Posts For Top & Bottom Load Binders, 6\" Capacit…     1
##  5 "Acme Shears, Serrated"                                                     1
##  6 "Advantus Light Bulb, Black"                                                1
##  7 "Advantus Paper Clips, Assorted Sizes"                                      1
##  8 "Advantus Paper Clips, Metal"                                               1
##  9 "Ames Manila Envelope, Recycled"                                            1
## 10 "Avery 3 1/2\" Diskette Storage Pages, 10/Pack"                             1
## # … with 96 more rows

Anos de vendas

unique(vendas$year)
## [1] 2011 2012 2013 2014

Visualizar o ano que vendeu-se mais os produtos

vendas %>% ggplot(aes(year, fill=category)) + geom_bar()

Melhor modo de entrega

vendas %>% ggplot(aes(ship_mode)) + geom_bar()

Visualização de produtos mais vendidos por segmento

vendas %>% ggplot(aes(segment)) + geom_bar()

Regiões que compram os produtos

vendas %>% ggplot(aes(region)) + geom_bar() + coord_flip()

vendas %>% count(country, sort = T)
## # A tibble: 147 × 2
##    country            n
##    <chr>          <int>
##  1 United States   9994
##  2 Australia       2837
##  3 France          2827
##  4 Mexico          2644
##  5 Germany         2065
##  6 China           1880
##  7 United Kingdom  1633
##  8 Brazil          1599
##  9 India           1555
## 10 Indonesia       1390
## # … with 137 more rows

Total de vendas por sob categoria

vendas %>% select(sub_category, sales) %>% group_by(sub_category) %>% summarise_each(funs(sum))
## Warning: `summarise_each_()` was deprecated in dplyr 0.7.0.
## ℹ Please use `across()` instead.
## ℹ The deprecated feature was likely used in the dplyr package.
##   Please report the issue at <]8;;https://github.com/tidyverse/dplyr/issueshttps://github.com/tidyverse/dplyr/issues]8;;>.
## Warning: `funs()` was deprecated in dplyr 0.8.0.
## ℹ Please use a list of either functions or lambdas:
## 
## # Simple named list: list(mean = mean, median = median)
## 
## # Auto named with `tibble::lst()`: tibble::lst(mean, median)
## 
## # Using lambdas list(~ mean(., trim = .2), ~ median(., na.rm = TRUE))
## # A tibble: 17 × 2
##    sub_category    sales
##    <chr>           <dbl>
##  1 Accessories   749237.
##  2 Appliances   1011064.
##  3 Art           372092.
##  4 Binders       461912.
##  5 Bookcases    1466572.
##  6 Chairs       1501682.
##  7 Copiers      1509436.
##  8 Envelopes     170904.
##  9 Fasteners      83242.
## 10 Furnishings   385578.
## 11 Labels         73404.
## 12 Machines      779060.
## 13 Paper         244292.
## 14 Phones       1706824.
## 15 Storage      1127086.
## 16 Supplies      243074.
## 17 Tables        757042.

Lucro por subcategoria

vendas %>% select(sub_category, profit) %>% group_by(sub_category) %>% summarise_each(funs(sum))  %>% ggplot(aes(x=sub_category, y=profit)) + geom_bar(stat = "identity") + coord_flip()

Lucro por categoria

vendas %>% select(category, profit) %>% group_by(category) %>% summarise_each(funs(sum)) %>% ggplot(aes(x=category, y=profit)) + geom_bar(stat = "identity")

Lucro por sub categoria

vendas %>% select(sub_category, profit) %>% filter(profit>0) %>%  group_by(sub_category) %>% summarise_each(funs(sum))
## # A tibble: 17 × 2
##    sub_category  profit
##    <chr>          <dbl>
##  1 Accessories  169484.
##  2 Appliances   205672.
##  3 Art           79615.
##  4 Binders      125334.
##  5 Bookcases    263371.
##  6 Chairs       237770.
##  7 Copiers      330115.
##  8 Envelopes     40465.
##  9 Fasteners     17799.
## 10 Furnishings   75482.
## 11 Labels        18771.
## 12 Machines     137541.
## 13 Paper         69507.
## 14 Phones       313135.
## 15 Storage      184525.
## 16 Supplies      40768.
## 17 Tables        80040.

Total de prejuizo por categoria

vendas %>% select(category, profit) %>% filter(profit<0) %>% group_by(category) %>% summarise_each(funs(sum)) %>% rename(prejuizo=profit) 
## # A tibble: 3 × 2
##   category        prejuizo
##   <chr>              <dbl>
## 1 Furniture       -369880.
## 2 Office Supplies -263982.
## 3 Technology      -286495.

Visualizacao de total de prejuizo por categoria

vendas %>% select(category, profit) %>% filter(profit<0) %>% group_by(category) %>% summarise_each(funs(sum)) %>% rename(prejuizo=profit) %>% ggplot(aes(x=category, y=prejuizo)) + geom_bar(stat = "identity")

O gráfico é virada para baixo isso mostra que os valor nesse gráfico são valores negativos, e também conseguimos notar que o categoria mais fraca é a categoria da mobilia

Prejuizos por sub categoria

vendas %>% select(sub_category, profit) %>% filter(profit<0) %>% group_by(sub_category) %>% summarise_each(funs(sum)) %>% rename(prejuizo=profit) %>% ggplot(aes(x=sub_category, y=prejuizo)) + geom_bar(stat = "identity") + coord_flip()

Visualizacao do produto mais vendido

vendas %>% select(category, quantity) %>% group_by(category) %>% summarise_each(funs(sum))
## # A tibble: 3 × 2
##   category        quantity
##   <chr>              <dbl>
## 1 Furniture          34954
## 2 Office Supplies   108182
## 3 Technology         35176

Produtos mais vendidos por categoria

vendas %>% select(category, quantity) %>% group_by(category) %>% summarise_each(funs(sum)) %>% ggplot(aes(x=category, y=quantity)) + geom_bar(stat = "identity")

Produtos mais vendidos por subcategora

vendas %>% select(sub_category, quantity) %>% group_by(sub_category) %>% summarise_each(funs(sum)) %>% ggplot(aes(x=sub_category, y=quantity)) + geom_bar(stat = "identity") + coord_flip()

Distribuição de perdas ao longo do ano

dest<-tidyr::separate(vendas, order_date, c('year','month', 'day'), sep = "-", remove = FALSE)
unique(dest$month)
##  [1] "01" "02" "03" "04" "05" "06" "07" "08" "09" "10" "11" "12"
dest$month[dest$month == "01"] <- "janeiro"
dest$month[dest$month == "02"] <- "fevereiro"
dest$month[dest$month == "03"] <- "março"
dest$month[dest$month == "04"] <- "abril"
dest$month[dest$month == "05"] <- "maio"
dest$month[dest$month == "06"] <- "junho"
dest$month[dest$month == "07"] <- "julho"
dest$month[dest$month == "08"] <- "agosto"
dest$month[dest$month == "09"] <- "setembro"
dest$month[dest$month == "10"] <- "outubro"
dest$month[dest$month == "11"] <- "novembro"
dest$month[dest$month == "12"] <- "dezembro"
dest %>% select(year, profit) %>% ggplot(aes(x=year, y=profit)) + geom_boxplot() + 
  scale_fill_brewer(palette = "Spectral") + 
  labs(title = "Distribuição de perdas ao longo dos ano ", x = "Month", y = "Total loss") + 
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, vjust=0.6))

dest %>% select(month,year, profit) %>% ggplot(aes(x=month, y=profit, fill=year)) + geom_bar(stat = "identity") + 
  scale_fill_brewer(palette = "Spectral") + 
  labs(title = "Distribuição de perdas ao longo dos meses ", x = "Mes", y = "Lucro") + 
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, vjust=0.6))