Atualmente as empresas tem utilizado diversas estratégias para conquistar novos clientes e cada vez mais aumentar suas vendas. Entre essas estratégias está o e-commerce, que proporciona praticidade e comodidade aos clientes de diferentes localidades. Nesse cenário, se torna importante avaliar os resultados obtidos, considerando diversos aspectos.
Este Projeto tem o objetivo de realizar um estudo dos resultados obtidos com e-commerce, utilizando um data set público (Brazilian E-Commerce Public Dataset by Olist) ,disponibilizado no site Kaggle, com dados referentes a e-commerce realizado no Brasil durante os anos de 2016 a 2018 através da plataforma Olist Store.
Abordagem
A metodologia de análise será voltada para a identificação de aspectos relevantes contidos nos dados. Primeiramente será necessário visualizar todas as informações do dataset para poder filtrar as informações importantes. Em seguida, após identificar os dados relativos a cada Pedido individualmente serão selecionadas variáveis que permitam a comparação tanto em relação aos diversos períodos de tempo, quanto em relação as categorias dos produtos, e aos estados de compra e venda envolvidos.
Objetivos
O Projeto será desenvolvido considerando os seguintes objetivos:
1) Identificar regiões do pais onde ocorrem altos e baixos volumes de utilização de e-commerce nos diversos períodos analisados;
2) Identificar montante de compras/vendas em relação a períodos analisados;
3) Relacionar os resultados de compra/venda de acordo com o passar do tempo;
4) Identificar categorias de produtos mais comercializados em relação a períodos analisados.
Expectativas
Espera-se que, alcançados os objetivos, os resultados obtidos possam ser utilizados pelas empresas que fazem uso da modalidade de e-commerce para que identifiquem potenciais nichos de mercado. Além disso, será possível que as autoridades políticas gestoras dos estados brasileiros possam conhecer mais profundamente a respeito da movimentação financeira proporcionada pelo e-commerce, visto que existe incidência e arrecadação de impostos referente a circulação de mercadorias e serviços entre estados.
Para que não exista erros na execução dos códigos, é necessário utilizar os seguintes pacotes:
library(dplyr)
library(DT)
library(kableExtra)
library(knitr)
library(tidyr)
| Pacote | Função |
|---|---|
| dplyr | Manipular dados |
| DT | Permite a visualização de dados em forma de tabelas paginadas |
| kableExtra | Permitir ajuste das tabelas |
| knitr | Facilitar a criação de tabelas |
| tidyr | Formatar dados |
O início do processo de obtenção dos dados se dá com a importação das tabelas que continham informações relevantes para o Projeto, disponibilizadas no formato csv.
ocd<-read.table(file="olist_customers_dataset.csv",header=TRUE,sep=",")
ood<-read.table(file="olist_orders_dataset.csv",header=TRUE,sep=",")
ooid<-read.table(file="olist_order_items_dataset.csv",header=TRUE,sep=",")
oopd<-read.table(file="olist_order_payments_dataset.csv",header=TRUE,sep=",")
opd<-read.table(file="olist_products_dataset.csv",header=TRUE,sep=",")
osd<-read.table(file="olist_sellers_dataset.csv",header=TRUE,sep=",")
Como os dados foram disponibilizados de forma separada, foi necessário realizar a união(merge) conforme a correspondência e relação entre eles. Foram então utilizados inicialmente dados da compra, produtos, vendedores e entrega.
#selecionando apenas dados importantes do df opd
opd1<-select(opd,product_id,product_category_name)
#### MERGE DAS TABELAS ####
#Merge de tabelas - Etapa 1:
#Nessa etapa são utilizados os dados de compras e produtos
combinado1<-merge(x=ooid,
y=opd1,
by="product_id",all=F)
#Merge de tabelas - Etapa 2:
#Nessa etapa são adicionados os dados de vendedores
combinado2<-merge(x=combinado1,
y=osd,
by="seller_id",all=F)
#Merge de tabelas - Etapa 3:
#Nessa etapa são adicionados dados da compra e entrega
combinado3<-merge(x=combinado2,
y=ood,
by="order_id",all=F)
Para ser possível analisar os dados conforme dados temporais, foi necessário organizar as informações de data. Nesse caso, levando em conta apenas a data da compra.
#organizando informações de data
combinado3<-combinado3%>%
separate(col = "order_purchase_timestamp",
into = c("Data", "Hora"),
sep = " ")
#obtendo anos e meses
combinado3<-combinado3%>%
separate(col = "Data",
into = c("Ano","Mes", "Dia"),
sep = "-")
#transformando os dados de meses e ano em fator
combinado3$Ano<-as.factor(combinado3$Ano)
combinado3$Mes<-as.factor(combinado3$Mes)
Em seguida foram adicionados dados de pagamento.
#Merge de tabelas - Etapa 4
#Nessa etapa são adicionados dados de pagamento
combinado4<-merge(x=combinado3,
y=oopd,
by="order_id",all=F)
Após a análise dos dados combinados até essa etapa, percebeu-se que deve-se atentar para as seguintes observações:
1) Observação 1: Na coluna 'order_id' são apresentadas todos os pedidos de compra. Cada pedido recebe um código único;
2) Observação 2: Linhas com valores iguais de 'order_id', 'order_item_id' e 'product_id', apresentam nas colunas 'price' e 'freight_value' o preço e frete totais do pedido; Nessas linhas existe mudança de dados apenas nas colunas referentes a payment;
3) Observação 3: Linhas com valores iguais de 'order_id', mas com valores diferentes de 'order_item_id' apresentam nas colunas 'price' e 'freight_value' o preço e frete apenas do item desse pedido. Ou seja, para obter o total do pedido, esses valores devem ser somados.
Até essa etapa foram adicionados os principais dados em relação a todos os Pedidos realizados. Para facilitar, foram removidas variáveis que não seriam utilizadas para análises. Além disso, verificou-se que não existia NAs.
##Selecionando apenas colunas importantes
combinado4<-combinado4%>%select(-shipping_limit_date,-seller_zip_code_prefix,-seller_city,-Dia,-Hora,-order_approved_at,-order_delivered_carrier_date,-order_delivered_customer_date,-order_estimated_delivery_date)
#Verificando presença de NAs
sum(is.na(combinado4))
A próxima etapa foi obter um dataset contendo dados de Pedidos dos consumidores registrados. Além disso, verificou-se que não existia NAs.
#Merge de tabelas - Etapa 5:
#Nessa etapa só são utilizadas as compras com consumidores registrados
#Esse data set só é utilizado para análises envolvendo Estados.
combinado5<-merge(x=combinado4,
y=ocd,
by="customer_id",all=F)
#Verificando presença de NAs
sum(is.na(combinado5))
Após adicionar os dados de consumidores verificou-se que grande parte dos pedidos foram realizados por consumidores cujos dados não estavam presentes no dataset ‘ocd’, que possui, dentre outras, informações sobre os estados brasileiros em que foram realizados os Pedidos de compra. Então optou-se por utilizar esses dados apenas para fazer analise comparativa por estados. Serão feitas então, separadamente, duas análises: uma de acordo com ‘Todos os Pedidos’ e a outra com ‘Pedidos com Consumidores registrados’.
A intenção é que com a análise de todos os Pedidos se obtenha dados que retratem de forma mais fiel o montante de vendas, independente se existe dados de registro do Consumidor. Por outro lado, os dados de pedidos com Consumidores registrados permitem realizar o comparativo entre os diversos estados.
##Selecionando os dados de interesse
levels(combinado4$order_status)
##Selecionando os dados de interesse
levels(combinado4$order_status)
combinado_4.1<-combinado4%>%
filter(order_status!="canceled",order_status!="unavailable")%>%
mutate(venda_com_frete = price + freight_value)%>%
#Seleção de variáveis (baseado nas Observações 2 e 3)
select(-price,-freight_value,-order_status,-payment_type,-payment_sequential,-payment_installments,-payment_value,-customer_id,-seller_id)
#Remoção de linhas duplicadas (baseado nas Observações 2 e 3)
dup1<-which(duplicated(combinado_4.1))
combinado_4.2<-combinado_4.1[-dup1,]
#datatable(combinado_4.2)
Logo após foram identificados quais períodos(ano,mês) os dados estavam retratando, a fim de definir os períodos mais coerentes.
#Análise do período de levantamento de dados a ser considerado
dados2016<-combinado_4.2%>%
filter(Ano==2016)%>%
group_by(Mes)%>%
summarise(Teste=sum(venda_com_frete))
dados2017<-combinado_4.2%>%
filter(Ano==2017)%>%
group_by(Mes)%>%
summarise(Teste=sum(venda_com_frete))
dados2018<-combinado_4.2%>%
filter(Ano==2018)%>%
group_by(Mes)%>%
summarise(Teste=sum(venda_com_frete))
#No ano de 2017, o dataset(raw) apresenta dados dos 12 meses do ano;
#No ano de 2018, o dataset(raw) apresenta dados apenas de Janeiro a Agosto;
#No ano de 2016, o dataset(raw) apresenta dados apenas do mês de Setembro,Outubro e Dezembro;
##Selecionando os dados de interesse
levels(combinado5$order_status)
##Selecionando os dados de interesse
levels(combinado5$order_status)
combinado_5.1<-combinado5%>%
filter(order_status!="canceled",order_status!="unavailable")%>%
mutate(venda_com_frete = price + freight_value)%>%
select(-price,-freight_value,-order_status,-customer_id,-customer_unique_id, seller_id,-payment_type,-payment_sequential,-payment_installments,-payment_value,-customer_zip_code_prefix,-customer_city)
#Remoção de linhas duplicadas (conforme Observações 2 e 3)
dup1<-which(duplicated(combinado_5.1))
combinado_5.2<-combinado_5.1[-dup1,]
#datatable(combinado_5.2)
Logo após foram identificados quais períodos(ano,mês) os dados estavam retratando, a fim de definir os períodos mais coerentes.
#Análise do período de levantamento de dados a ser considerado
dados2016<-combinado_5.2%>%
filter(Ano==2016)%>%
group_by(Mes)%>%
summarise(Teste=sum(venda_com_frete))
dados2017<-combinado_5.2%>%
filter(Ano==2017)%>%
group_by(Mes)%>%
summarise(Teste=sum(venda_com_frete))
dados2018<-combinado_5.2%>%
filter(Ano==2018)%>%
group_by(Mes)%>%
summarise(Teste=sum(venda_com_frete))
#No ano de 2017, o dataset(raw) apresenta dados dos 12 meses do ano;
#No ano de 2018, o dataset(raw) apresenta dados apenas de Janeiro a Agosto;
#No ano de 2016, o dataset(raw) apresenta dados apenas do mês de Outubro;
Foram obtidos então dois datasets: o primeiro referente a todos os Pedidos, e o segundo referente apenas a Pedidos realizados por consumidores cadastrados. Vale ressaltar que o dataset original só apresenta informação do estado de compra para os Pedidos de consumidores cadastrados. Tendo em vista permitir uma análise mais coerente dos dados, será definido para análise o período dos meses de Janeiro a Agosto (anos 2017 e 2018), que é um período comum aos dois dataset obtidos.
Na tabela abaixo são mostradas informações a respeito das variáveis presentes nos dataset.| Variável | Tipo | Descrição |
|---|---|---|
| order_id | character | N° do Pedido |
| product_id | character | Código do produto |
| order_item_id | integer | Ordem do produto no Pedido |
| product_category_name | character | Categoria do produto |
| seller_state | character | Estado de origem do vendedor/loja |
| order_status | character | Situação do pedido |
| Ano | integer | Ano em que foi realizado o Pedido |
| Mes | character | Mês em que foi realizado o Pedido |
| venda_com_frete | numeric | Valor(R$) de cada item do Pedido, incluindo o frete |
| customer_state | character | Estado de origem do consumidor |
Abaixo são mostrados os dois dataset.
clean_data_1<-combinado_4.2%>%
filter((Ano==2017|Ano==2018)&(Mes=="01"|Mes=="02"|Mes=="03"|Mes=="04"|Mes=="05"|Mes=="06"|Mes=="07"|Mes=="08"))
clean_data_2<-combinado_5.2%>%
filter((Ano==2017|Ano==2018)&(Mes=="01"|Mes=="02"|Mes=="03"|Mes=="04"|Mes=="05"|Mes=="06"|Mes=="07"|Mes=="08"))
A fim de permitir alcançar os objetivos específicos, foram obtidos datasets com os dados e variáveis importantes para cada objetivo.
Foi obtido o total de Compra de todos os Pedidos
#Total de venda por pedido
total_pedido1<-clean_data_1%>%
select(order_id,seller_state,Ano,Mes,venda_com_frete)%>%
group_by(order_id,seller_state,Ano,Mes)%>%
summarise(Total_venda=sum(venda_com_frete))
Foi obtido o total de Compra dos Pedidos de Consumidores registrados
#Total de venda por pedido
total_pedido2<-clean_data_2%>%
select(order_id,seller_state,customer_state,Ano,Mes,venda_com_frete)%>%
group_by(order_id,seller_state,customer_state,Ano,Mes)%>%
summarise(Total_venda=sum(venda_com_frete))
Foi obtido o total de Compra por estado dos Pedidos de Consumidores registrados
#Compra por estado
total_estados_compra<-total_pedido2%>%
group_by(customer_state,Ano)%>%
summarise(Total_compra=sum(Total_venda))%>%
arrange(Ano,desc(Total_compra))
Foi obtido o total de Vendas por Estaddo dos Pedidos de Consumidores registrados
#Venda por estado
total_estados_venda<-total_pedido2%>%
group_by(seller_state,Ano)%>%
summarise(Total_venda=sum(Total_venda))%>%
arrange(Ano,desc(Total_venda))
Foi obtido o total de Vendas por Categoria de produto de todos os Pedidos
#Total por categoria de produto / ano
total_categoria<-clean_data_1%>%
group_by(product_category_name,Ano)%>%
summarize(Total_venda=sum(venda_com_frete))%>%
arrange(Ano,desc(Total_venda))
Foi obtido o total de Compras por mês de todos os Pedidos
#Compra por ano /mes
total_ano_mes<-clean_data_1%>%
group_by(Ano,Mes)%>%
summarize(Total_venda=sum(venda_com_frete))%>%
arrange(Ano,Mes)
Através dos data subsets foi possível obter resultados e gráficos de acordo com o objetivo.
A fim de comparar os níveis de venda com o passar do tempo, foi elaborado um gráfico de barras em que se compara as vendas durante os meses de Janeiro a Agosto para os anos de 2017 e 2018.
#Gráfico compra por ano /mes
colors = c("blue", "green")
dados <- c("2017","2018")
meses<-c("Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago")
dados_1_2017<-filter(total_ano_mes,Ano==2017)
dados_1_2018<-filter(total_ano_mes,Ano==2018)
total_1_2017<-sum(dados_1_2017$Total_venda)
total_1_2018<-sum(dados_1_2018$Total_venda)
# Criar a matriz dos valores
Values <- matrix(c(dados_1_2017$Total_venda/1000,dados_1_2018$Total_venda/1000), nrow = 2, ncol = 8, byrow = TRUE)
par(mar = c(4, 4, 2, 4),xpd=TRUE) #c(4, 15, 2.5, 8)
barplot(Values, main = "Total de vendas", names.arg = meses,
xlab = "Mes", ylab =
"mil reais", col = colors,
beside = T)
legend("topright", pch=c(15,15), col=colors,cex=0.7,inset=c(0,0),
legend=dados,bty ="o")
Percebe-se que para cada mês houve um aumento do montante de vendas em 2018 se comparado a 2017. Além disso, o montante de vendas em 2018 foi de aproximadamente 7.89 milhões de reais, 143% maior que em 2017.
A fim de identificar as Categorias de produtos mais comercializados, foram elaborados gráficos de barras, em que se compara o total de vendas por Categoria nos anos de 2017 e 2018. Tendo em vista a grande variedade de categorias, optou-se por elaborar uma lista Top-10 (10 Categorias com os maiores volumes de vendas).
#Gráfico venda por categoria
par(mar = c(10, 4, 2.5, 0),xpd=TRUE)
dados_4_2017<-filter(total_categoria,Ano==2017)
dados_4_2018<-filter(total_categoria,Ano==2018)
barplot((dados_4_2017$Total_venda[1:10])/1000, main = "TOP 10 - Vendas por Categoria - 2017", names.arg = dados_4_2017$product_category_name[1:10],
ylab = "mil reais", ylim=c(0,300),
las=2, cex.axis=0.8, cex.lab =1, cex=0.8,
col = "blue")
par(mar = c(10, 4, 2.5, 0),xpd=TRUE)
barplot((dados_4_2018$Total_venda[1:10])/1000, main = "TOP 10 - Vendas por Categoria - 2018", names.arg = dados_4_2018$product_category_name[1:10],
ylab = "mil reais", ylim=c(0,900),
las=2, cex.axis=0.8, cex.lab =1, cex=0.8,
col = "green")
Percebe-se que a Categoria que teve maior volume de vendas tanto em 2017 quanto 2018 foi ‘beleza_saude’.
A fim de identificar os Estados em que foram realizados mais compras, foram elaborados gráficos de barras, em que se compara as vendas dos diversos Estados nos anos de 2017 e 2018.
#Gráfico compra estado
#par(mar = c(4, 8, 2.5, 0),xpd=TRUE)
dados_2_2017<-filter(total_estados_compra,Ano==2017)
barplot(dados_2_2017$Total_compra/1000, main = "Total de compras - 2017", names.arg = dados_2_2017$customer_state,
xlab = "Estado", ylab = "mil reais", ylim=c(0,500),
las=2, cex.axis=0.8, cex.lab =1, cex=0.7,
col = rainbow(length(dados_2_2017$customer_state)))
dados_2_2018<-filter(total_estados_compra,Ano==2018)
barplot(dados_2_2018$Total_compra/1000, main = "Total de compras - 2018", names.arg = dados_2_2018$customer_state,
xlab = "Estado", ylab = "mil reais", ylim=c(0,1400),
las=2, cex.axis=0.8, cex.lab =1, cex=0.7,
col = rainbow(length(dados_2_2018$customer_state)))
Percebe-se nitidamente que o estado onde foram realizados mais Pedidos em 2017 e 2018 foi ‘SP’. Em 2018, ‘SP’ apresentou um aumento de 180% no volume de compras em relação a 2017.
A fim de facilitar a visualização por parte das autoridades de cada estado, foi obtida a seguinte tabela, em que são apresentados os valores totais de venda de 2017 e 2018 relativos a ‘Todos os Pedidos’.
Tabela de Vendas por estado
dados_3_2017<-filter(total_estados_venda,Ano==2017)
tabelav1 <- data.frame("Estado" = dados_3_2017$seller_state,"Total_2017" = dados_3_2017$Total_venda)
tabelav1<-arrange(tabelav1,Estado)
dados_3_2018<-filter(total_estados_venda,Ano==2018)
tabelav2 <- data.frame("Estado" = dados_3_2018$seller_state, "Total_2018" = dados_3_2018$Total_venda)
tabelav2<-arrange(tabelav2,Estado)
#Obtendo tabela unica / removendo NAs
tabelav<-merge(x=tabelav1,
y=tabelav2,
by="Estado",
all=T)
tabelav[is.na(tabelav)]<-0
#Gerando a tabela
kable(tabelav)%>%
kable_styling(c("striped","bordered"), full_width =F)
| Estado | Total_2017 | Total_2018 |
|---|---|---|
| AM | 135.25 | 0.00 |
| BA | 17592.30 | 36039.72 |
| CE | 2135.38 | 6041.71 |
| DF | 9767.40 | 22211.18 |
| ES | 8803.11 | 10873.81 |
| GO | 6384.48 | 17324.95 |
| MA | 0.00 | 21905.56 |
| MG | 127484.51 | 240243.56 |
| MS | 1817.56 | 1122.68 |
| MT | 135.91 | 4832.04 |
| PB | 2117.03 | 2245.36 |
| PE | 1997.66 | 38888.01 |
| PI | 0.00 | 922.64 |
| PR | 129391.17 | 307343.35 |
| RJ | 50037.14 | 239037.86 |
| RN | 3172.94 | 1153.92 |
| RO | 1485.01 | 0.00 |
| RS | 38577.54 | 105942.98 |
| SC | 74750.09 | 161832.25 |
| SE | 128.08 | 522.56 |
| SP | 937113.86 | 2235319.70 |
Para visualizar as diferenças entre os diferentes estados foi elaborado os seguintes gráficos de barras:
#Gráfico venda estado - 2017
par(mar = c(8, 4, 2.5, 0),xpd=TRUE)
tabelav3<-tabelav%>%arrange(desc(Total_2017))
barplot(tabelav3$Total_2017/1000, main = "Vendas por estado - 2017", names.arg = tabelav3$Estado,
xlab = "Estado", ylab = "mil reais", ylim=c(0,1000),
las=2, cex.axis=0.8, cex.lab =1, cex=0.7,
col = rainbow(length(tabelav3$Estado)))
#Gráfico venda estado - 2018
par(mar = c(8, 4, 2.5, 0),xpd=TRUE)
tabelav4<-tabelav%>%arrange(desc(Total_2018))
barplot(tabelav4$Total_2018/1000, main = "Vendas por estado - 2018", names.arg = tabelav4$Estado,
xlab = "Estado", ylab = "mil reais", ylim=c(0,(max(tabelav4$Total_2018)/1000)),
las=2, cex.axis=0.8, cex.lab =1, cex=0.7,
col = rainbow(length(tabelav4$Estado)))
Percebe-se nitidamente que o estado onde foram realizados mais vendas em 2017 e 2018 foi ‘SP’. Em 2018, ‘SP’ apresentou um aumento de 139% nas vendas em relação a 2017.
Através desse Projeto foi possível obter informações importantes a respeito de e-commerce realizado através da plataforma Olist Store durante os meses de Janeiro a Agosto dos anos de 2017 e 2018.
Metodologia
A metodologia adotada consistiu em realizar as seguintes etapas: importação e preparação dos dados, divisão em data subsets de acordo com os objetivos definidos, e visualização dos dados. Inicialmente, buscou-se identificar o valor total de cada Pedido realizado, e posteriormente estratificando os dados: por categoria de produtos, por meses, por anos, por estados de compra/venda.
Resultados alcançados
Após a análise dos 69347 pedidos registrados pela plataforma, com uma movimentação de aproximadamente 7.89 milhões de reais nos anos de 2017 e 2018 foi possível identificar que houve avanço nos níveis de venda e compra via e-commerce. De maneira geral, em 2018 percebeu-se um aumento nos níveis de compra e venda se comparado com 2017. Tais aumentos se mostraram tanto em relação às diferentes categorias de produtos, quanto em relação aos períodos de ano e estados em que foram realizados os pedidos. Das 72 categorias de produtos comercializados, a categoria que teve maior volume de vendas foi ‘beleza_saude’. O estado em que foi realizado o maior volume de vendas foi ‘SP’, o que podia ser esperado, já que esse estado é um dos pólos comerciais mais importantes do Brasil. Além disso foi possível identificar para cada estado o montante de vendas realizados em 2017 e 2018. Todos esses resultados podem ser utilizados pelas autoridades gestoras dos estados para auxiliar nas previsões de arrecadação de imposto sobre circulação de mercadorias e serviços, além de permitir às lojas vendedoras identificar nichos de mercado em relação a categorias de produtos, estados, etc.
Limitações
A análise poderia ser melhor desenvolvida se o dataset original tivesse disponibilizado os dados dos consumidores em todos os pedidos. Devido nem todos os consumidores estarem com dados cadastrados na plataforma isso representou uma limitação na análise de vendas e compras por estado. Além disso, não consta dados para todos os meses dos anos de 2016, 2017 e 2018. O ideal seria que fosse disponibilizado os dados dos 12 meses de cada ano para assim ser possível obter uma melhor análise, e identificar tendências em relação às vendas de e-commerce. Possíveis análises que possam vir a ser realizadas, mas que não foram abordada nesse Projeto, poderiam ser as seguintes: análise individual para cada estado, baseando-se, por exemplo, nas categorias de produtos, meses do ano, etc.; contribuição do frete no valor final do pedido em relação aos estados.