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