# Importa o arquivo de dados
## 1.1 Define o caminho relativo do arquivo em seu projeto RStudio
<- here::here("dados/brutos/onlineshop.csv")
caminho
## 1.2 Importa o arquivo com a funçào read_csv
<- readr::read_csv(caminho) dados_lojaonline
Questão 1 (7 pontos)
Tópico: Metodologia CRISP-DM: Fase 1 e Tipos de Análises
Considerando que Lindsey, da equipe de marketing da Junglivet, precisa entender melhor o comportamento de compra dos clientes na loja online, responda:
a) Com base na necessidade apresentada por Lindsey e no dicionário de dados do arquivo onlineshop.csv
, formule um objetivo de negócio específico, mensurável e relevante que poderia ser respondido com esses dados.
Boas respostas poderiam incluir objetivos como:
- Determinar o perfil demográfico dos clientes com maior valor de compra
- Identificar quais fatores influenciam a conversão de anúncios em vendas
- Analisar a relação entre métodos de pagamento e devoluções
- Avaliar a eficácia dos anúncios em vídeo comparados a outros formatos
b) Com base na necessidade apresentada por Lindsey de “entender melhor os padrões de compra para otimizar campanhas de marketing e melhorar a experiência do cliente”, qual tipo de análise você recomendaria como primeiro passo: descritiva, diagnóstica, preditiva ou prescritiva? Justifique sua escolha considerando os dados disponíveis no arquivo onlineshop.csv e o estágio atual do projeto.
Uma análise descritiva seria mais apropriada como etapa inicial, pois Lindsey precisa primeiro identificar padrões fundamentais no comportamento de compra antes de explorar causas ou fazer previsões.
Esta abordagem permitirá mapear perfis demográficos dos clientes, padrões de compra, eficácia dos anúncios em vídeo e comportamentos de devolução, criando uma base sólida para análises mais sofisticadas posteriormente. Os dados do arquivo onlineshop.csv contêm as variáveis necessárias para esta caracterização inicial dos clientes.
Questão 2 (8 pontos)
Tópico: Importação e Exploração Inicial dos Dados
a) Escreva o código R para importar o arquivo onlineshop.csv
utilizando o pacote here para definir o caminho relativo e o pacote readr para a importação. Armazene o resultado da importação em um objeto chamado dados_lojaonline
.
b) Use a função apropriada do pacote dplyr que exibe a dimensão e a estrutura (tipos das variáveis) do objeto dados_lojaonline
que recebeu os dados importados.
::glimpse(dados_lojaonline) dplyr
Rows: 463
Columns: 12
$ DATE <date> 2023-10-02, 2023-10-02, 2023-10-02, 2023-10-02, 2023-1…
$ USER_ID <chr> "cardiB", "natalie_hershlag", "babe_ruth", "homlesspist…
$ AGE <dbl> 27, 42, 48, 60, 93, 36, 56, 35, 24, 36, 37, 27, 56, 28,…
$ GENDER <chr> "female", "female", "male", "male", "male", "male", "ma…
$ TYPE <dbl> NA, NA, 1, 1, 1, 1, NA, 1, 1, 1, 1, NA, NA, 1, 1, 1, 1,…
$ CREDIT_SCORE <dbl> 3, 4, 2, 5, 5, 4, 5, 5, 5, 4, 4, 4, 3, 4, 5, 4, 1, 3, 4…
$ LIFETIME <dbl> 8, 10, 12, 9, 12, 5, 12, 11, 5, 5, 11, 2, 8, 4, 8, 5, 0…
$ PAYMENT_METHOD <chr> "bank transfer", "BNPL", "BNPL", "paypal", "credit card…
$ TURNOVER <dbl> 44, 34, 34, 500, 43, 47, 286, 48, 625, 40, 42, 31, 32, …
$ SENDBACK <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,…
$ VIDEO_AD <lgl> FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRU…
$ CONVERTED <dbl> 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0…
c) Com base na saída do item b acima, responda:
c.1) Quantas observações estão contidas no objeto dados_lojaonline
?
- 463 observações (ou linhas) estão contidas no objeto
dados_lojaonline
.
c.2) Explique especificamente o que cada linha (observação) na data frame dados_lojaonline
representa. Para sua resposta ser completa, identifique tanto a entidade principal quanto qualquer dimensão temporal que caracterize cada observação.
Cada linha (observação) na data frame
dados
_lojaonline representa uma visita ou transação individual de um cliente na loja online da Junglivet Whisky Company.Especificamente, cada linha/observação registra uma interação única de um cliente com a plataforma em uma data específica, incluindo informações sobre a compra realizada (valor, método de pagamento), características do cliente (idade, gênero, classificação) e seu comportamento (resposta ao anúncio, eventual devolução).
Uma mesma pessoa (USER_ID) pode aparecer em múltiplas linhas se realizou múltiplas visitas ou transações em diferentes datas.
Questão 3 (8 pontos)
Tópico: Limpeza e Preparação dos Dados
a) Complete o código a seguir para criar um pipeline que irá limpar e preparar os dados para análises posteriores e exibir a nova data frame limpa.
A data frame limpa será chamada dados_lojaonline_limpos
e irá conter nomes mais simples em português para as variáveis e converter as variáveis renomeadas para tipos/classes adequados para análise:
<- dados_lojaonline %>%
dados_lojaonline_limpos # Renomeia as colunas para nomes mais simples em português
rename(
data = DATE,
id_cliente = USER_ID,
idade = AGE,
sexo = GENDER,
tipo = TYPE,
score_de_credito = CREDIT_SCORE,
tempo_da_conta = LIFETIME,
metodo_pagamento = PAYMENT_METHOD,
faturamento = TURNOVER,
devolucao = SENDBACK,
tipo_de_anuncio = VIDEO_AD,
convertido = CONVERTED
%>%
) # Converte cada variável para o tipo/classe adequado
mutate(
data = as.Date(data),
id_cliente = as.factor(id_cliente),
idade = as.integer(idade),
sexo = as.factor(sexo),
tipo = as.factor(tipo),
score_de_credito = factor(score_de_credito, ordered = TRUE),
tempo_da_conta = as.integer(tempo_da_conta),
metodo_pagamento = as.factor(metodo_pagamento),
faturamento = as.numeric(faturamento),
devolucao = as.logical(devolucao),
tipo_de_anuncio = as.logical(tipo_de_anuncio),
convertido = as.logical(convertido)
)
# exibe a estrutura da data frame limpa
::glimpse(dados_lojaonline_limpos) dplyr
Rows: 463
Columns: 12
$ data <date> 2023-10-02, 2023-10-02, 2023-10-02, 2023-10-02, 2023…
$ id_cliente <fct> cardiB, natalie_hershlag, babe_ruth, homlesspistachio…
$ idade <int> 27, 42, 48, 60, 93, 36, 56, 35, 24, 36, 37, 27, 56, 2…
$ sexo <fct> female, female, male, male, male, male, male, male, f…
$ tipo <fct> NA, NA, 1, 1, 1, 1, NA, 1, 1, 1, 1, NA, NA, 1, 1, 1, …
$ score_de_credito <ord> 3, 4, 2, 5, 5, 4, 5, 5, 5, 4, 4, 4, 3, 4, 5, 4, 1, 3,…
$ tempo_da_conta <int> 8, 10, 12, 9, 12, 5, 12, 11, 5, 5, 11, 2, 8, 4, 8, 5,…
$ metodo_pagamento <fct> bank transfer, BNPL, BNPL, paypal, credit card, bank …
$ faturamento <dbl> 44, 34, 34, 500, 43, 47, 286, 48, 625, 40, 42, 31, 32…
$ devolucao <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALS…
$ tipo_de_anuncio <lgl> FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, T…
$ convertido <lgl> FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE…
b) Aplique a função interna summary
ao objeto dados_lojaonline_limpos
:
summary(dados_lojaonline_limpos)
data id_cliente idade sexo
Min. :2023-10-02 ron_swanson76: 15 Min. :21.0 female:155
1st Qu.:2023-10-20 cardiB : 12 1st Qu.:30.0 male :308
Median :2023-11-16 laura_smith : 12 Median :38.0
Mean :2023-11-15 eilleen_brown: 11 Mean :42.9
3rd Qu.:2023-12-11 jennifer_linn: 11 3rd Qu.:53.0
Max. :2023-12-30 marc_sinclair: 11 Max. :93.0
(Other) :391
tipo score_de_credito tempo_da_conta metodo_pagamento
1 :313 1: 22 Min. : 0.00 bank transfer:109
2 : 34 2: 51 1st Qu.: 8.00 BNPL :174
NA's:116 3: 72 Median :10.00 credit card : 78
4:187 Mean : 8.82 paypal :102
5:131 3rd Qu.:12.00
Max. :12.00
faturamento devolucao tipo_de_anuncio convertido
Min. : 31 Mode :logical Mode :logical Mode :logical
1st Qu.: 39 FALSE:429 FALSE:222 FALSE:382
Median : 48 TRUE :34 TRUE :241 TRUE :81
Mean :182
3rd Qu.:346
Max. :718
Analisando a saída, responda:
b.1) ron_swanson76
é o identificador do cliente, o qual efetuou 15 transações.
b.2) 116 clientes não foram classificados por tipo.
b.3)
Faturamento médio: 182 euros
Faturamento máximo: 718 euros
Faturamento mínimo: 31 euros
Questão 4 (10 pontos)
Tópico: Manipulação e Análises de Dados
a) Lindsey, da equipe de marketing, precisa entender como os diferentes métodos de pagamento afetam o faturamento na loja online. Crie um pipeline de análise cujo resultado seja uma data frame que mostre o faturamento médio por método de pagamento, ordenado do maior valor médio para o menor. Utilize as funções do pacote dplyr para agrupar por meio de pagamento, calcular o faturamento médio e apresentar o resultado ordenado do maior para o menor faturamento médio por meio de pagamento.
<- dados_lojaonline_limpos %>%
faturamento_medio_pagamento group_by(metodo_pagamento) %>%
summarize(faturamento_medio = mean(faturamento)) %>%
arrange(desc(faturamento_medio))
# exibe o resultado
faturamento_medio_pagamento
# A tibble: 4 × 2
metodo_pagamento faturamento_medio
<fct> <dbl>
1 BNPL 232.
2 paypal 177.
3 bank transfer 148.
4 credit card 125.
b) Lindsey, da equipe de marketing, está interessada no comportamento de compra de clientes específicos. Crie uma data frame chamada clientes_especificos
que contenha o faturamento médio (faturamento_medio) para os seguintes clientes: ron_swanson76
, horst_lüning
e dorothy_parker
. Utilize as funções do pacote dplyr para filtrar apenas estes três clientes, agrupar por cliente e calcular o faturamento médio para cada um. Apresente o resultado ordenado do maior para o menor valor médio.
<- dados_lojaonline_limpos %>%
clientes_especificos filter(id_cliente == "ron_swanson76" | id_cliente == "horst_lüning" | id_cliente == "dorothy_parker") %>%
group_by(id_cliente) %>%
summarize(faturamento_medio_clientes = mean(faturamento)) %>%
arrange(desc(faturamento_medio_clientes))
# exibe o resultado
clientes_especificos
# A tibble: 3 × 2
id_cliente faturamento_medio_clientes
<fct> <dbl>
1 ron_swanson76 433.
2 dorothy_parker 248.
3 horst_lüning 167.
c) Lindsey quer comparar a eficácia dos anúncios em vídeo versus outros tipos de anúncios na loja online. Crie um pipeline de análise que resulte em uma data frame agrupada pela variável tipo_de_anuncio
(TRUE para vídeo, FALSE para outros tipos) e mostre:
O número total de clientes em cada grupo usando a função
n()
A porcentagem de conversão para cada tipo (calculada como a média da variável
convertido
)O faturamento médio por tipo de anúncio (média da variável
faturamento
)
Complete o código abaixo utilizando as funções do pacote dplyr para obter esta análise:
<- dados_lojaonline_limpos %>%
dados_conversao group_by(tipo_de_anuncio) %>%
summarize(
total_de_clientes = n(),
porcentagem_de_conversao = mean(convertido),
faturamento_medio_por_anuncio = mean(faturamento)
)
# exibe o resultado formatado como tabela
dados_conversao
# A tibble: 2 × 4
tipo_de_anuncio total_de_clientes porcentagem_de_conversao
<lgl> <int> <dbl>
1 FALSE 222 0.104
2 TRUE 241 0.241
# ℹ 1 more variable: faturamento_medio_por_anuncio <dbl>
d) Lindsey, da equipe de marketing, quer entender melhor como os diferentes tipos de cliente se comportam em relação às devoluções e seus padrões de compra. Escreva um código completo usando as funções do pacote dplyr para criar uma data frame chamada analise_tipo_cliente
que mostre, para cada tipo de cliente (1, 2 e NA):
- O número total de transações
- A porcentagem de transações com devoluções (campo
devolucao
) - O faturamento médio geral
- O faturamento médio apenas das transações sem devoluções
<- dados_lojaonline_limpos %>%
analise_tipo_cliente # Agrupa os dados pelo tipo de cliente
group_by(tipo) %>%
# Calcula as estatísticas solicitadas para cada grupo
summarize(
total_transacoes = n(),
porcentagem_devolucao = mean(devolucao) * 100,
faturamento_medio = mean(faturamento),
faturamento_sem_devolucao = mean(faturamento[devolucao == FALSE])
)
# exibe o resultado
analise_tipo_cliente
# A tibble: 3 × 5
tipo total_transacoes porcentagem_devolucao faturamento_medio
<fct> <int> <dbl> <dbl>
1 1 313 6.07 166.
2 2 34 14.7 242.
3 <NA> 116 8.62 207.
# ℹ 1 more variable: faturamento_sem_devolucao <dbl>