Boas-vindas ao curso de R, utilizando o Tidyverse e transformando seus dados com dplyr. Nele, entenderemos como transformar e tratar dados e como isso pode ajudar na análise de dados, aprendendo sobre o Tidyverse e o pacote dplyr
da linguagem R.
Eu sou Igor do Nascimento Alves, instrutor na Escola de Dados, e acompanharei você neste conteúdo.
Audiodescrição: Igor se identifica como um homem branco. Possui cabelos pretos e curtos. No corpo, veste uma camiseta cinza-clara. Ao fundo, um cenário iluminado pelas cores verde e azul e uma planta decorativa à direita.
Este curso é destinado a quem possui interesse em utilizar o R para análise de dados e precisa realizar essas transformações.
Neste conteúdo, aprenderemos sobre o pacote dplyr, que permite transformar e manipular dados. Conheceremos diversas funções desse pacote, como:
recode()
case_when()
left_join()
Por meio dessas funções, seremos capazes de criar um projeto.
Neste curso trabalharemos em um projeto de milhas aéreas. Existe uma companhia aérea tentando entender como sua clientela utiliza esse pacote de benefícios de milhas: vendendo-as ou comprando passagens. Ela precisa da nossa ajuda e dos nossos conhecimentos em R para avançar nesse projeto.
Para compreender bem o conteúdo deste curso, é importante já ter tido contato com a linguagem R e com o Tidyverse. Aqui, focaremos em nos aprofundar no pacote dplyr.
Com o conhecimento adquirido através do pacote dplyr, seremos capazes de transformar dados — ou seja, coletá-los e extrair informações deles, realizando transformações. Afinal, um dado é apenas isso até ser transformado em um insight.
Estamos contentes em desenvolver este projeto junto com você. Vamos começar!
Antes de tudo, entenderemos o contexto do trabalho.
A companhia aérea com a qual vamos trabalhar está interessada em aprimorar seu programa de fidelidade para clientes. Atualmente, eles utilizam milhas aéreas.
Toda vez que uma pessoa cliente compra uma passagem, ela ganha algumas milhas. Posteriormente, ela pode acumular essas milhas e optar por vendê-las em um programa específico, recebendo dinheiro, ou utilizá-las na compra de uma próxima passagem. Se houver milhas suficientes, a passagem pode sair sem custo ou ser complementada com algum valor.
A ideia é fidelizar a clientela, incentivando-a a voar sempre com essa companhia aérea para acumular milhas, que são restritas a essa empresa.
Atualmente, o programa está em funcionamento e a clientela o utiliza, mas não conseguimos acompanhar como ele está sendo usado. Precisamos entender se a clientela está usando as milhas para comprar passagens, fazer upgrades (melhorias) para passagens de classe superior, ou se estão vendendo todas as milhas.
Compreender como o programa é utilizado é essencial para melhorá-lo e avaliar se faz sentido para a companhia aérea. Este é o projeto.
Para este projeto, utilizaremos a linguagem R e precisamos encontrar uma maneira de carregar os dados no ambiente.
O ambiente escolhido é o Google Colab, pois não requer instalações e tem poucas limitações quanto ao tempo de uso. Acessando a página do Colab no navegador, devemos clicar em "Editar > Configurações de notebook" pela barra de menu superior.
Na janela exibida, verificaremos se o campo "Tipo de ambiente de execução" possui a opção "R" selecionada e clicaremos no botão "Salvar".
Voltando à tela principal, carregaremos os dados.
A empresa forneceu três arquivos para análise. Para carregá-los, clicaremos em "Conectar", no canto superior direito da tela, para alocar a máquina do Google.
Na barra vertical da lateral esquerda, clicaremos no ícone chamado "Arquivos" para abrir uma aba à sua direita. No canto superior esquerdo dessa aba, clicaremos no botão de fazer upload de arquivos.
Na janela do explorador de arquivos, selecionaremos os três arquivos abaixo, disponibilizados entre as atividades dessa aula:
clientes.csv
transacoes_milhas.csv
transacoes_passagens.csv
É importante lembrar que, toda vez que entrarmos nesse ambiente, precisaremos carregar os arquivos novamente, pois, quando o ambiente é desalocado pela Google, perdemos todos os dados carregados.
Após clicar em "Abrir", veremos os nomes dos arquivos carregados na aba lateral esquerda, abaixo da pasta "sample_data".
Ao lermos esses arquivos, entenderemos melhor do que se tratam. No momento, podemos recolher essa aba clicando no ícone "Arquivos" da barra vertical.
Temos interesse em trabalhar com um grande conjunto de dados e focar no resultado. Nosso objetivo, utilizando a linguagem R, é manipular esses dados com facilidade. Para isso, utilizaremos o pacote Tidyverse.
Para carregar esse pacote no Colab pela linguagem R, executaremos o comando abaixo na primeira célula de código, por meio do atalho "Shift + Enter".
library(tidyverse)
No retorno, o Colab exibirá tudo o que foi carregado do conjunto de pacotes tidyverse
, incluindo o dplyr
, que será foco, além de outros como ggplot
e readr
.
── Attaching core tidyverse packages ───────────────────────── tidyverse 2.0.0 ──
dplyr 1.1.4 readr 2.1.5
forcats 1.0.0 stringr 1.5.1
ggplot2 3.5.1 tibble 3.2.1
lubridate 1.9.3 tidyr 1.3.1
purrr 1.0.2
── Conflicts ─────────────────────────────────── tidyverse_conflicts() ──
dplyr::filter() masks stats::filter()
dplyr::lag() masks stats::lag()
i: Use the conflicted package (http://conflicted.r-lib.org/) to force all conflicts to become errors
O carregamento da biblioteca pode gerar warnings (avisos) sobre bibliotecas que utilizam o mesmo nome para funções, mas isso não é uma preocupação no momento.
Para trazer os dados, utilizaremos a função read_csv()
na próxima célula. Essa função, quando parte do dplyr
, é interessante porque já traz o dataframe carregado, identificando seus tipos, o que facilita a análise.
Faremos um read_csv()
do arquivo transacoes_milhas.csv
. Abrindo a aba lateral por meio do ícone "Arquivos", clicaremos no botão de três pontos à direita do arquivo desejado e selecionaremos "Copiar caminho".
Entre os parênteses do read_csv()
, colaremos o caminho entre aspas duplas.
Precisamos salvar esse resultado em uma variável. Para isso, antes do read_csv()
, digitaremos transacoes_milhas <-
para atribuir o valor a essa variável.
transacoes_milhas <- read_csv("/content/transacoes_milhas.csv")
Ao rodar essa célula, ele informa que leu um dataframe com mil linhas e quatro colunas, incluindo:
data_venda_milhas
, cujo tipo de dado é data (date
);id_cliente
, milhas_vendidas
e valor_recebido
cujo tipo de dado é numérico (dbl
).Rows: 1000 Columns: 4
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
dbl (3): id_cliente, milhas_vendidas, valor_recebido
date (1): data_venda_milhas
Esses dados tratam de transações de clientes que vendem suas milhas aéreas por dinheiro. Precisamos entender como isso funciona.
Na próxima célula, faremos um read_csv()
do próximo dataframe, transacoes_passagens.csv
. Faremos o mesmo processo para copiar seu caminho, colar entre os parênteses do read_csv()
e envolvê-lo entre aspas duplas. A variável será transacoes_passagens
.
transacoes_passagens <- read_csv("/content/transacoes_passagens.csv")
Ao executar a célula, o relatório informa mil linhas e seis colunas, com tipos de dados como string (chr
), numérico e data.
Rows: 1000 Columns: 6
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (1): classe_voo
dbl (4): id_cliente, milhas_utilizadas, valor_pago, numero_voo
date (1): data_transacao
Essa base possui informações de clientes que realizaram compras de passagens utilizando milhas aéreas, utilizando o benefício conforme idealizado inicialmente.
Por fim, carregaremos a base clientes.csv
na célula seguinte, atribuindo seu valor com read_csv()
à variável clientes
, colando o caminho dessa base.
clientes <- read_csv("/content/clientes.csv")
Ao executar esse comando, o relatório informa mil clientes e cinco colunas que informam o ID, milhas acumuladas, gasto total, status de fidelidade e data de nascimento.
Rows: 1000 Columns: 5
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (1): status_fidelidade
dbl (3): id_cliente, milhas_acumuladas, gasto_total
date (1): data_nascimento
Essa base possui informações sobre a clientela. Entretanto, focaremos somente nos dados de transações por enquanto.
Para analisar os dados, podemos usar a função head
. Por exemplo, executando um transacoes_milhas %>% head()
, traremos uma amostra de seis linhas e quatro colunas do dataframe transacoes_milhas
.
transacoes_milhas %>% head()
Retorno:
id_cliente <dbl> data_venda_milhas <date> milhas_vendidas <dbl> valor_recebido <dbl> 350 2023-02-23 4131 536.88 109 2022-09-26 6525 113.70 376 2022-06-12 9955 466.73 443 2022-12-17 5913 1489.56 647 2023-10-06 284 1908.38 818 2023-05-29 4225 1339.10
O ID da clientela é um número que representa cada cliente de forma única. A data da venda da milha, a quantidade vendida e o valor recebido são informações que variam conforme a época do ano e o serviço utilizado para vender as milhas.
Na próxima célula, ao executar transacoes_milhas %>% glimpse()
, retornaremos os detalhes das transações ocorridas. Os dados exibidos não necessariamente serão úteis para a análise.
transacoes_passagens %>% head()
Retorno:
id_cliente <dbl> data_transacao <date> milhas_utilizadas <dbl> valor_pago <dbl> classe_voo <chr> numero_voo <dbl> 507 2023-01-30 9837 424.31 Economica 3705 86 2023-03-07 6067 513.52 Economica 9504 589 2022-02-11 2893 1320.34 Primeira Classe 1695 774 2022-09-23 2274 1000.44 Economica 2963 705 2023-06-08 6043 1607.35 Economica 9190 316 2023-05-13 1798 1802.67 Executiva 6242
Para uma análise mais objetiva, utilizaremos a função glimpse()
. Ao executar transacoes_milhas %>% glimpse()
na célula seguinte, retornaremos o nome das colunas, tipo e uma amostra de valores dessa base. Isso permite uma análise rápida dos dados.
transacoes_milhas %>% glimpse()
Retorno:
Rows: 1,000
Columns: 4
$ id_cliente <dbl> 350, 109, 376, 443, 647, 818, 32, 770, 707, 842, 170…
$ data_venda_milhas <date> 2023-02-23, 2022-09-26, 2022-06-12, 2022-12-17, 202…
$ milhas_vendidas <dbl> 4131, 6525, 9955, 5913, 284, 4225, 2854, 6127, 5091,…
$ valor_recebido <dbl> 536.88, 113.70, 466.73, 1489.56, 1908.38, 1339.10, 1…
Para entender como isso funciona, aplicaremos glimpse()
na tabela de clientes
com o comando abaixo.
clientes %>% glimpse()
A função informa que temos mil registros de pessoas clientes e cinco colunas, além do ID, data de nascimento, status de fidelidade, milhas acumuladas e gasto total de cada uma. Cada linha representa uma pessoa cliente, com informações atualizadas sobre milhas e status de fidelidade.
Retorno:
Rows: 1,000
Columns: 5
$ id_cliente <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 1…
$ data_nascimento <date> 1971-01-09, 1996-08-11, 1994-07-18, 2003-03-08, 196…
$ status_fidelidade <chr> "Diamante", "Diamante", "Diamante", "Prata", "Diaman…
$ milhas_acumuladas <dbl> 2833, 8864, 917, 8773, 1492, 6270, 2583, 8263, 8914,…
$ gasto_total <dbl> 1906.69, 493.58, 519.16, 1256.60, 410.37, 250.93, 92…
Com o glimpse()
, conseguimos obter informações rapidamente sobre tipos de colunas, quantidade de linhas e colunas, e um resumo dos dados.
Conhecemos nossos dados e os trouxemos para o notebook. A seguir, começaremos a transformá-los e tratá-los para ajudar o time de negócios a responder suas dúvidas.
Conseguimos carregar nossos dados no Jupyter Notebook presente no Colab. Durante conversas com o time de negócios, entendemos que este é o caminho. Precisamos carregar os dados no R e realizar nossa análise.
Um ponto de atenção que surgiu na discussão foi a quantidade de dados que temos. São mil registros em cada uma das tabelas, com diversas colunas. Será que precisamos de todas essas informações para nossa análise ou podemos focar mais para entender como esses dados estão se comportando?
Pensando nisso, faremos transformações no dataframe com o qual estamos trabalhando.
O primeiro foco será na base transacoes_milhas
. Criaremos uma nova célula no notebook, na qual utilizaremos o pipe (%>%
) mais o glimpse()
para relembrar esses dados.
transacoes_milhas %>% glimpse()
Temos mil registros, com as colunas de cliente, data da venda, milhas vendidas e valor recebido.
Retorno:
Rows: 1,000
Columns: 4
$ id_cliente <dbl> 350, 109, 376, 443, 647, 818, 32, 770, 707, 842, 170…
$ data_venda_milhas <date> 2023-02-23, 2022-09-26, 2022-06-12, 2022-12-17, 202…
$ milhas_vendidas <dbl> 4131, 6525, 9955, 5913, 284, 4225, 2854, 6127, 5091,…
$ valor_recebido <dbl> 536.88, 113.70, 466.73, 1489.56, 1908.38, 1339.10, 1…
Quanto à quantidade de colunas, parece que está tudo certo. Essas colunas são do nosso interesse.
Vamos olhar para a próxima base, transações de passagens
, por meio de um novo glimpse()
.
transacoes_passagens %>% glimpse()
Nessa base, também temos mil registros, mas com seis colunas, referentes a cliente, data da transação, milhas utilizadas, valor pago, classe do voo e número do voo.
Retorno:
Rows: 1,000
Columns: 6
$ id_cliente <dbl> 507, 86, 589, 774, 705, 316, 801, 149, 11, 154, 363,…
$ data_transacao <date> 2023-01-30, 2023-03-07, 2022-02-11, 2022-09-23, 202…
$ milhas_utilizadas <dbl> 9837, 6067, 2893, 2274, 6043, 1798, 4354, 6976, 6344…
$ valor_pago <dbl> 424.31, 513.52, 1320.34, 1000.44, 1607.35, 1802.67, …
$ classe_voo <chr> "Economica", "Economica", "Primeira Classe", "Econom…
$ numero_voo <dbl> 3705, 9504, 1695, 2963, 9190, 6242, 2415, 6747, 3509…
As informações de classe do voo e número do voo podem se mostrar relevantes futuramente. Entretanto, como o interesse atual é verificar como as milhas estão sendo utilizadas, talvez não precisemos dessas informações.
Para selecionar essas colunas, utilizaremos a função select()
, chamando transacoes_passagens
e um pipe para aplicar a função select()
. Entre os parênteses dessa função, podemos informar as colunas de interesse.
No caso da base transacoes_passagens
, temos interesse em id_cliente
, data_transacao
, milhas_utilizadas
e valor_pago
. As colunas classe_do_voo
e numero_do_voo
não são relevantes para nossa análise no momento, pois queremos focar nas milhas.
transacoes_passagens %>% select(id_cliente, data_transacao, milhas_utilizadas, valor_pago)
Podemos executar o código da seleção e verificar que o retorno exibiu um tibble com 4 colunas, em vez de todas.
Retorno:
id_cliente <dbl> data_transacao <date> milhas_utilizadas <dbl> valor_pago <dbl> 507 2023-01-30 9837 424.31 86 2023-03-07 6067 513.52 589 2022-02-11 2893 1320.34 774 2022-09-23 2274 1000.44 705 2023-06-08 6043 1607.35 316 2023-05-13 1798 1802.67
Após confirmar que essas são as colunas de interesse, podemos sobrescrever o transacoes_passagens
para receber esse valor e salvá-lo. Para isso, adicionaremos o transacoes_passagens
e o símbolo de atribuição (<-
) antes do comando anterior.
transacoes_passagens <- transacoes_passagens %>% select(id_cliente, data_transacao, milhas_utilizadas, valor_pago)
Ao executar com "Shift + Enter", o comando acima não retornará nada. Na célula seguinte, podemos utilizar o glimpse()
novamente para exibir o resultado.
transacoes_passagens %>% glimpse()
Com isso, constataremos que as mil linhas foram mantidas, mas reduzimos as colunas de 6 para 4.
Retorno:
Rows: 1,000
Columns: 4
$ id_cliente <dbl> 507, 86, 589, 774, 705, 316, 801, 149, 11, 154, 363,…
$ data_transacao <date> 2023-01-30, 2023-03-07, 2022-02-11, 2022-09-23, 202…
$ milhas_utilizadas <dbl> 9837, 6067, 2893, 2274, 6043, 1798, 4354, 6976, 6344…
$ valor_pago <dbl> 424.31, 513.52, 1320.34, 1000.44, 1607.35, 1802.67, …
Outra maneira de reduzir os dados é focar em um período específico. Conversando com o time de negócios, foi decido utilizar os dados do último ano para a análise.
Para isso, aplicaremos a função filter()
. Na célula seguinte, usaremos o transacoes_milhas
, atribuindo um valor a ele por meio do símbolo de atribuição.
Atribuiremos a ele o transacoes_milhas
, um pipe e a função filter()
, em vez de select()
, para filtrar os dados com uma regra. A regra adicionada entre parênteses será: filtrar um período específico na coluna data_venda_milhas
, que seja menor ou igual ao ano de 2022.
Para essa regra, formataremos a data conforme os dados existentes na coluna, criando as strings "2022-01-01"
para o início do ano de 2022 e "2022-12-1"
para o final.
Compararemos data_venda_milhas
à data inicial por meio do símbolo >=
(maior ou igual) e à data final por meio do símbolo <=
(menor ou igual). Por fim, adicionaremos um sinal &
entre ambas as regras para uni-las.
transacoes_milhas <- transacoes_milhas %>% filter(data_venda_milhas >= '2022-01-01' & data_venda_milhas <= '2022-12-31')
Após pressionar "Shift + Enter", verificaremos o dataframe com o comando abaixo.
transacoes_milhas %>% glimpse()
No retorno, o transacoes_milhas
terá 485 linhas, reduzindo bastante os dados para uma análise mais focada.
Retorno:
Rows: 485
Columns: 4
$ id_cliente <dbl> 109, 376, 443, 32, 842, 609, 391, 600, 101, 761, 959…
$ data_venda_milhas <date> 2022-09-26, 2022-06-12, 2022-12-17, 2022-12-06, 202…
$ milhas_vendidas <dbl> 6525, 9955, 5913, 2854, 5686, 937, 1190, 8295, 635,…
$ valor_recebido <dbl> 113.70, 466.73, 1489.56, 1983.85, 191.69, 183.50, 47…
Os dados de vendas e milhas podem variar ao longo dos anos, com quedas e aumentos. Queremos focar no ano anterior e, analisando esse período específico, entenderemos melhor o comportamento ao longo do ano.
Não podemos fazer isso apenas para um dataframe. Nossa análise também incluirá o transacoes_passagens
. Podemos copiar a consulta para a próxima célula e substituir transacoes_milhas
por transacoes_passagens
e a coluna data_da_venda
por data_transacao
, mantendo o mesmo período de análise.
transacoes_passagens <- transacoes_passagens %>% filter(data_transacao >= '2022-01-01' & data_transacao <= '2022-12-31')
Após executar a célula acima, verificaremos o resultado com o glimpse()
.
transacoes_passagens %>% glimpse()
Após filtrar esse período específico, temos 502 linhas na base consultada. Reduzimos para 400 em transações de milhas e 502 em passagens.
Retorno:
Rows: 502
Columns: 5
$ id_cliente <\dbl> 589, 774, 149, 620, 96, 449, 693, 242, 358, 317, 633…
$ data_transacao <date> 2022-02-11, 2022-09-23, 2022-11-07, 2022-08-12, 202…
$ milhas_utilizadas <dbl> 2893, 2274, 6976, 6479, 9444, 8102, 5335, 7139, 7280…
$ valor_pago <dbl> 1320.34, 1000.44, 309.56, 1869.74, 267.63, 268.38, 1…
$ classe_voo <chr> "Primeira Classe", "Economica", "Primeira Classe", "…
Com essas transformações no dataframe, tanto na seleção de linhas quanto de colunas, teremos uma exploração mais específica dos dados.
A seguir, começaremos a explorar esses dados e gerar insights com o que temos.
O curso R: utilizando o Tidyverse e transformando dados com dplyr possui 97 minutos de vídeos, em um total de 46 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.