Você já pensou em criar gráficos utilizando os pacotes do R e adequá-los ao seu tipo de público? Quer ter um novo projeto em seu portfólio de dados? Trabalharemos nisso ao longo deste curso sobre visualização de dados utilizando a linguagem R e o ggplot2
!
Eu sou o Afonso Rios, instrutor da Escola de Dados da Alura, e te dou boas-vindas a esta jornada.
Audiodescrição: Afonso se descreve como um homem de pele morena, barba preta, cabelos lisos curtos castanho-escuros, e olhos castanhos-escuros. Ele veste uma camisa preta com o logotipo verde da Escola de Dados, e ao fundo, há uma parede azul, cinza e branca, iluminada em gradiente azul, com uma porta de madeira escura à direita e alguns quadros.
Neste curso, atuaremos como pessoas cientistas de dados juniores pleiteando uma vaga no time de dados da Zoop, uma grande varejista que atende todo o país por meio do seu e-commerce.
Como treinamento, utilizaremos a visualização de dados na linguagem R para responder a questionamentos, seja sobre o perfil dos clientes, ou sobre o histórico de vendas no ano de 2023.
Para isso, iremos explorar os dados e investigar visuais que possam ser utilizados para responder a determinadas dúvidas. Vamos construir visuais e trazer insights para a apresentação dos resultados da Zoop. Além disso, trabalharemos no refinamento dos visuais, utilizando storytelling (narrativa) e técnicas de melhoramento de estética de gráficos.
Por fim, salvaremos os visuais da forma adequada, de modo que eles possam ser apresentados às partes interessadas posteriormente. Faremos tudo isso seguindo as premissas, de acordo com as lideranças, para o nosso treinamento com foco na vaga do time de dados.
Para acompanhar o curso da melhor forma, é importante ter conhecimento sobre a linguagem R e saber o básico sobre pacotes no Tidyverse, como ggplot2
, dplyr
, readr
e lubridate
.
Alinhadas as nossas expectativas, podemos dar início ao nosso projeto!
Você, como pessoa cientista de dados júnior, está passando por um treinamento para avaliar seus conhecimentos em análise de dados, visando trabalhar no time de dados da Zoop, uma grande empresa varejista que opera em todo o país por meio do seu e-commerce.
O desafio é extrair dados de clientes e vendas, com o objetivo de construir visuais que contribuam para a apresentação dos resultados da Zoop em 2023. Para isso, precisamos responder a uma série de questionamentos, utilizando visuais para construir o storytelling da Zoop.
O time de analistas utiliza a linguagem R para realizar as análises dos dados da empresa. Portanto, é necessário ter conhecimento dessa linguagem e utilizar a biblioteca ggplot2
para construir os visuais necessários, criando todo o storytelling da empresa com eles.
Para seguir este treinamento, utilizaremos um documento quarto com o passo a passo de como construir os visuais, a fim de ajudar o time de dados.
A primeira etapa do projeto é a importação dos pacotes.
Se você passou pela atividade Preparando o ambiente desta aula, o projeto já está no repositório e foi realizada a instalação das bibliotecas necessárias.
Nesse caso, importaremos bibliotecas como ggplot2
, dplyr
, readr
, lubridate
e scales
. Essas são bibliotecas de visualização, manipulação e leitura de dados, manipulação de datas, e formatação de variáveis. Ao executar a célula de código, trazemos as bibliotecas para o projeto.
# library(tidyverse)
library(ggplot2)
library(dplyr)
library(readr)
library(lubridate)
library(scales)
Após importar os pacotes do R, podemos partir para a obtenção dos dados, coletando tanto os dados de clientes quanto de vendas. Para isso, declaramos url_vendas
para trazer os dados de vendas, que estão na pasta "dados", no arquivo zoop_vendas.csv
; e url_clientes
para trazer dados de clientes, do arquivo zoop_clientes.csv
também localizado na pasta "dados.
url_vendas = "dados/zoop_vendas.csv"
url_clientes = "dados/zoop_clientes.csv"
vendas
Executando este código, importamos os dados para o caminho dos dados, para, então, trazê-los para as respectivas tabelas de clientes e vendas. Começaremos com a tabela de vendas.
Em uma nova célula, definimos a variável vendas
e utilizamos o operador <-
, que atribui valores no R. É dessa forma que conseguimos passar valores para variáveis.
Usaremos a função read_csv()
da biblioteca readr
para ler uma base de dados e transformá-la em um tibble
, que é um DataFrame mais estilizado, com definições de colunas mais assertivas.
Para a função read_csv()
, passaremos primeiro a variável url_vendas
que declaramos. Além disso, vamos definir o parâmetro show_col_types
como FALSE
, pois queremos apenas a tabela.
Por fim, utilizamos head(vendas)
para visualizar apenas os primeiros registros da tabela.
vendas <- read_csv(url_vendas, show_col_types = FALSE)
head(vendas)
Retorno da célula:
ID_compra | data | horario | categoria | preco_unitario | quantidade | frete | metodo_pagamento |
---|---|---|---|---|---|---|---|
6 | 2023-01-03 | 20:40:00 | Tecnologia | 899.19 | 4 | 713.26 | Boleto |
5 | 2023-01-03 | 21:48:00 | Casa/Móveis | 115.90 | 1 | 0.00 | PIX |
9 | 2023-01-03 | 17:08:00 | Beleza/Saúde | 68.90 | 2 | 13.78 | Crédito |
4 | 2023-01-03 | 14:29:00 | Casa/Móveis | 80.90 | 5 | 40.45 | PIX |
8 | 2023-01-03 | 18:02:00 | Beleza/Saúde | 165.00 | 4 | 0.00 | PIX |
2 | 2023-01-03 | 18:42:00 | Tecnologia | 2028.48 | 5 | 1724.37 | PIX |
Executando este código, é retornada uma tabela com colunas como: ID_compra
, data
, horario
, categoria
, preco_unitario
, entre outras necessárias para análise.
clientes
Após ler os dados de vendas, vamos para a tabela de clientes.
Utilizaremos um código similar, definindo a variável clientes
seguida de <-
para atribuir o método read_csv()
, que será responsável por ler url_clientes
. Além disso, passaremos show_col_types = FALSE
, e usaremos glimpse(clientes)
para exibir a estrutura dos dados.
clientes <- read_csv(url_clientes, show_col_types = FALSE)
glimpse(clientes)
Retorno da célula:
Rows: 6,169
Columns: 9
$ ID_compra <dbl>; 904, 4613, 5579, 2405, 2485, 756, 3020, 2390, 3957, 5…
$ ID_cliente <dbl>; 8972, 5120, 1847, 2846, 2715, 9555, 3793, 4903, 3413,…
$ cidade <chr>; "Natal", "São Paulo", "São Paulo", "São Paulo", "Salv…
$ uf <chr>; "Rio Grande do Norte", "São Paulo", "São Paulo", "São…
$ regiao <chr>; "Nordeste", "Sudeste", "Sudeste", "Sudeste", "Nordest…
$ idade <dbl>; 49, 49, 24, 38, 30, 46, 32, 26, 30, 28, 25, 31, 40, 4…
$ sexo_biologico <chr>; "Masculino", "Feminino", "Feminino", "Feminino", "Fem…
$ cashback <chr>; "Não", "Não", "Não", "Sim", "Não", "Não", "Sim", "Não…
$ avaliacao_compra <dbl>; 9, 9, 8, 7, 10, 7, 9, 9, 10, 8, 7, 10, 9, 8, 8, 7, 10…
Dessa forma, conseguimos tanto criar a tabela de clientes, quanto visualizar a estrutura. No canto superior direito do retorno código, temos a opção "Show in New Window", para abrir em outra página. Assim, é possível visualizar melhor as colunas e suas estruturas.
Nesse caso, temos colunas como: ID_compra
; ID_cliente
; cidade
; e assim em diante. Além disso, temos o formato de cada valor, como double (<dbl>
) e character (<chr>
). O que mais importa na leitura com glimpse()
é entender a estrutura das colunas e como elas estão representadas.
O método
head()
oferece uma visão mais tabular.
Importadas as duas tabelas, que fazem parte de uma amostra do ano de 2023 na Zoop, usaremos elas como base para responder a questionamentos trazidos pela liderança no treinamento.
Esses questionamentos envolvem: o histórico de vendas, analisando o desempenho ao longo do ano, por exemplo; e o perfil de clientes, criando uma persona para entender quem gosta de usar e comprar na Zoop, e como elas utilizam os serviços que a empresa oferece.
Vendas
- Qual foi o faturamento por categoria em 2023?
- Qual foi o desempenho das vendas ao longo dos meses em 2023?
- Como está dividida a venda por trimestre por método de pagamento? O método PIX tem tido boa adesão?
Perfil do cliente
- Como está distribuído o nosso público por idade? Existe um grupo que sobressai relacionado à região e ao sexo biológico?
- Dos clientes que participam do nosso programa de cashback, qual a proporção por região do país? Quais são as 3 principais regiões? Precisamos reforçar a campanha de adesão em quais delas?
É importante ter ideia de como responder aos questionamentos utilizando visuais. Aprenderemos visuais de diferentes formas e funcionalidades, trazendo tipos específicos de insight com cada um.
Agora que já importamos a base de dados e sabemos quais dados de clientes e vendas nós temos, partiremos para a próxima etapa: explorar os dados e verificar se será necessário tratá-los antes de começar a construir os visuais. Abordaremos esta etapa no próximo vídeo!
Queremos construir visuais para realizar a análise dos dados que já recebemos, mas antes disso, precisamos ter cuidado em observar se os dados estão no formato desejado para construí-los.
No vídeo anterior, fizemos a importação da base de dados de vendas e também de clientes da Zoop, e exploramos um pouco os dados, apenas para conferir o conteúdo das bases.
Agora, precisamos resolver algumas questões, como:
- Compreender a estrutura dos dados e se todos estão no formato correto;
- E avaliar a necessidade de adicionar dados às tabelas para construir os visuais.
vendas
Considerando nossos casos, de clientes e de vendas, os dados já estão limpos, ou seja, não há dados faltantes nem nulos. Nossas preocupações agora são as seguintes:
- Verificar se os tipos e valores estão corretos;
- E incluir colunas, se necessário.
Começaremos pela tabela de vendas. De volta ao documento, iremos ler novamente a tabela vendas
, apenas para conferir como está a estrutura e verificar o que precisa ou não ser feito.
vendas
Visualização dos dez primeiros registros da tabela. Para visualizá-la na íntegra, execute a célula de código na sua máquina.
ID_compra | data | horario | categoria | preco_unitario | quantidade | frete | metodo_pagamento |
---|---|---|---|---|---|---|---|
6 | 2023-01-03 | 20:40:00 | Tecnologia | 899.19 | 4 | 713.26 | Boleto |
5 | 2023-01-03 | 21:48:00 | Casa/Móveis | 115.90 | 1 | 0.00 | PIX |
9 | 2023-01-03 | 17:08:00 | Beleza/Saúde | 68.90 | 2 | 13.78 | Crédito |
4 | 2023-01-03 | 14:29:00 | Casa/Móveis | 80.90 | 5 | 40.45 | PIX |
8 | 2023-01-03 | 18:02:00 | Beleza/Saúde | 165.00 | 4 | 0.00 | PIX |
2 | 2023-01-03 | 18:42:00 | Tecnologia | 2028.48 | 5 | 1724.37 | PIX |
3 | 2023-01-03 | 23:47:00 | Supermercado | 84.90 | 5 | 0.00 | Crédito |
1 | 2023-01-03 | 00:13:00 | Eletrodomésticos | 2169.98 | 1 | 138.64 | PIX |
7 | 2023-01-03 | 17:40:00 | Livros | 75.90 | 5 | 18.98 | Crédito |
11 | 2023-01-04 | 21:50:00 | Casa/Móveis | 13.90 | 5 | 3.48 | PIX |
Nessa tabela, temos o ID da compra (ID_compra
), a data (data
) e o horário (horario
) em formatos adequados, a categoria (categoria
) no formato de caractere (<chr>
), entre outras variáveis, como valores de número em double (<dbl>
) na coluna frete
.
Funcionou como esperado, mas quando construímos um visual e temos dados categóricos que se repetem, faz sentido transformá-los em factor
, que é muito mais simples de manipular.
factor
Nesse caso, quais colunas podem ser modificadas?
Na coluna metodo_pagamento
, com os valores "Boleto", "PIX" e "Crédito", conseguimos utilizar factor
, e também temos o caso da categoria
, que serão repetidas ao longo das compras.
É possível fazer essas alterações sem precisar passar em uma coluna por vez, pois há um código específico para isso. Em uma nova célula, vamos escrever o formato de ajuste de character
para factor
. Começaremos chamando a base de dados vendas
, seguida de <-
para modificar a tabela.
Na sequência, traremos vendas
, para modificar sobre ela mesma e, basicamente, sobrescrever o valor. Usaremos o atalho "Ctrl + Shift + M" para usar o pipe (%>%
), pois iremos aplicar uma função sobre a base de dados vendas
: a mutate_if()
.
A função mutate_if()
altera colunas de acordo com uma condição estabelecida entre parênteses. Nesse caso, a condição será a seguinte: se o formato for character
(is.character
), transformaremos em factor
(as.factor
).
Abaixo, chamamos vendas
para conferir como ficou após a operação.
vendas <- vendas %>%
mutate_if(is.character, as.factor)
vendas
Ao executar o código, temos as colunas categoria
e metodo_pagamento
definidas como <fctr>
. Assim, conseguimos fazer uma alteração interessante para trabalhar com os visuais.
Outra coisa que podemos notar é que temos as colunas de preco_unitario
, quantidade
, e frete
, mas não temos uma variável correspondente ao valor total, que seria a combinação dessas três.
Achamos mais interessante trazer esse valor na tabela, pois, assim, já temos a coluna pronta para construir o visual. Dessa forma, não precisamos trabalhar com as 3 colunas de uma vez.
total
Para adicionar uma nova coluna, em uma nova célula de código, faremos uma subscrição na base, então chamamos vendas
, que irá receber vendas
seguida de um pipe (%>%
).
Logo abaixo, em vez do método mutate_if()
, usaremos mutate()
, porque não precisamos de uma condição para isso; queremos apenas criar uma coluna.
Essa coluna se chamará total
e vai receber o preco_unitario
multiplicado pela quantidade
, e somado ao frete
pago. O resultado disso irá gerar o total
da venda.
Ao final, podemos chamar vendas
para ler como ficou.
vendas <- vendas %>%
mutate(total = preco_unitario * quantidade + frete)
vendas
Visualização dos dez primeiros registros da tabela. Para visualizá-la na íntegra, execute a célula de código na sua máquina.
ID_compra | data | horario | categoria | preco_unitario | quantidade | frete | metodo_pagamento | total |
---|---|---|---|---|---|---|---|---|
6 | 2023-01-03 | 20:40:00 | Tecnologia | 899.19 | 4 | 713.26 | Boleto | 4310.02 |
5 | 2023-01-03 | 21:48:00 | Casa/Móveis | 115.90 | 1 | 0.00 | PIX | 115.90 |
9 | 2023-01-03 | 17:08:00 | Beleza/Saúde | 68.90 | 2 | 13.78 | Crédito | 151.58 |
4 | 2023-01-03 | 14:29:00 | Casa/Móveis | 80.90 | 5 | 40.45 | PIX | 444.95 |
8 | 2023-01-03 | 18:02:00 | Beleza/Saúde | 165.00 | 4 | 0.00 | PIX | 660.00 |
2 | 2023-01-03 | 18:42:00 | Tecnologia | 2028.48 | 5 | 1724.37 | PIX | 11866.77 |
3 | 2023-01-03 | 23:47:00 | Supermercado | 84.90 | 5 | 0.00 | Crédito | 424.50 |
1 | 2023-01-03 | 00:13:00 | Eletrodomésticos | 2169.98 | 1 | 138.64 | PIX | 2308.62 |
7 | 2023-01-03 | 17:40:00 | Livros | 75.90 | 5 | 18.98 | Crédito | 398.48 |
11 | 2023-01-04 | 21:50:00 | Casa/Móveis | 13.90 | 5 | 3.48 | PIX | 72.98 |
Agora, além das colunas anteriores, ao final, temos a coluna total
, com os dados de valor total da compra já resumidos. Isso é muito útil para utilizarmos em nosso projeto.
clientes
Com os ajustes feitos na tabela de vendas, faremos os ajustes necessários também para a tabela de clientes. Em uma nova célula, chamaremos a tabela clientes
para ler como ela está no momento:
clientes
Visualização dos dez primeiros registros da tabela. Para visualizá-la na íntegra, execute a célula de código na sua máquina.
ID_compra | ID_cliente | cidade | uf | regiao | idade | sexo_biologico | cashback |
---|---|---|---|---|---|---|---|
904 | 8972 | Natal | Rio Grande do Norte | Nordeste | 49 | Masculino | Não |
4613 | 5120 | São Paulo | São Paulo | Sudeste | 49 | Feminino | Não |
5579 | 1847 | São Paulo | São Paulo | Sudeste | 24 | Feminino | Não |
2405 | 2846 | São Paulo | São Paulo | Sudeste | 38 | Feminino | Sim |
2485 | 2715 | Salvador | Bahia | Nordeste | 30 | Feminino | Não |
756 | 9555 | João Pessoa | Paraíba | Nordeste | 46 | Feminino | Não |
3020 | 3793 | Brasília | Distrito Federal | Centro-Oeste | 32 | Masculino | Sim |
2390 | 4903 | São Paulo | São Paulo | Sudeste | 26 | Feminino | Não |
3957 | 3413 | Salvador | Bahia | Nordeste | 30 | Feminino | Não |
5142 | 3556 | Salvador | Bahia | Nordeste | 28 | Feminino | Não |
Nessa tabela, temos doubles (<dbl>
) e characters (chr
). Na coluna cashback
, teremos apenas "Sim" ou "Não", o sexo_biologico
é "Masculino" ou "Feminino", e a regiao
também terá repetições. Sendo assim, o mesmo processo feito na tabela de vendas
faz sentido nesse caso.
Os números já foram reconhecidos normalmente, então transformar os dados de character
para factor
é a única alteração que poderíamos fazer na base de dados no momento.
factor
Podemos reaproveitar o código utilizado na tabela vendas
, apenas alterando para clientes
. Além disso, a única diferença é que faremos um head()
para pegar poucos dados de clientes
.
clientes <- clientes %>%
mutate_if(is.character, as.factor)
head(clientes)
ID_compra | ID_cliente | cidade | uf | regiao | idade | sexo_biologico | cashback |
---|---|---|---|---|---|---|---|
904 | 8972 | Natal | Rio Grande do Norte | Nordeste | 49 | Masculino | Não |
4613 | 5120 | São Paulo | São Paulo | Sudeste | 49 | Feminino | Não |
5579 | 1847 | São Paulo | São Paulo | Sudeste | 24 | Feminino | Não |
2405 | 2846 | São Paulo | São Paulo | Sudeste | 38 | Feminino | Sim |
2485 | 2715 | Salvador | Bahia | Nordeste | 30 | Feminino | Não |
756 | 9555 | João Pessoa | Paraíba | Nordeste | 46 | Feminino | Não |
Observe que as colunas cidade
, uf
, regiao
, sexo_biologico
e cashback
já estão no formato factor
(fctr
), que é muito mais fácil para manipular nos visuais.
Já importamos os dados, tanto de clientes
quanto de vendas
, fizemos os primeiros ajustes, tratamos os dados, e trocamos para os tipos necessários para construir os visuais.
Agora, falta construir o visual efetivamente. No próximo vídeo, começaremos a construir o nosso primeiro visual, entendendo como é o processo da construção a partir do pacote ggplot2
.
A partir disso, poderemos começar a responder os questionamentos levantados no treinamento!
O curso R para Data Science: aplicando Data Visualization com ggplot2 possui 126 minutos de vídeos, em um total de 50 atividades. Gostou? Conheça nossos outros cursos de Data Science em Data Science, ou leia nossos artigos de Data Science.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.