Last active
February 21, 2024 13:36
-
-
Save beatrizmilz/e8a856f855ebed1af3dcdca809923659 to your computer and use it in GitHub Desktop.
Código R utilizado no sorteio de brindes do evento da R-Ladies, que aconteceu em 20/02/2024.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Sobre esse script ------------------------------------- | |
# Este código foi utilizado para sortear os brindes do evento de 20/02/2024, | |
# organizado pela R-Ladies São Paulo. | |
# Autoria: Beatriz Milz | |
# Data: 20/02/2024 | |
# Comentário sobre reprodutibilidade: esse código não é reprodutível, | |
# por dois fatores: 1) o formulário de inscrição não está compartilhado com | |
# todas as pessoas, apenas as co-organizadoras do evento. Esse formulário | |
# tem dados sensíveis sobre participantes. 2) O sorteio não foi feito usando | |
# a função set.seed() - portanto, a cada vez que executar o código de sorteio, | |
# uma pessoa diferente poderá ser sorteada. | |
# Sobre a tabela: | |
# Houve um formulário do Google Forms para inscrição no evento, | |
# que foi preenchido pelas pessoas participantes. | |
# Esse formulário foi vinculado a uma planilha no Google Sheets. | |
# Para saber como fazer isso, esse texto escrito por mim pode ajudar: | |
# https://beamilz.com/posts/2022-03-08-googlesheets4/pt/ | |
# Sobre o compartilhamento desse código: | |
# Esse código foi compartilhado para fins de transparência e para mostrar | |
# como foi feito o sorteio. Não é um código reprodutível, pois os dados | |
# não estão disponíveis para todas as pessoas. | |
# Pode ser útil para quem quiser realizar importação de dados do Google Sheets :) | |
# Veja no vídeo do YouTube como foi feito o sorteio: | |
# https://www.youtube.com/live/8QD7PXg5YYY?si=CG-UcITGWS8dZTrs&t=7286 | |
# Pacotes ----------------------------------- | |
# Carregando o pacote tidyverse, usado em vários momentos do código | |
library(tidyverse) | |
# Importando os dados ------------------------ | |
# URL do Google Sheets vinculado ao formulário de inscrição | |
# Esse arquivo não é aberto, e é proposital: | |
# Apresenta dados sensíveis das pessoas participantes. | |
sorteio_rladies <- | |
"https://docs.google.com/spreadsheets/d/1JcT4EyPcUEiUG36HIOy9xvciHLSYDvtGEl5fg3V9a2w/edit?resourcekey#gid=577442284" | |
# Importando os dados do Google Sheets | |
# Aqui, o uso dos :: indica que estamos usando uma função de um pacote específico | |
# Para que não fosse necessário usar os ::, poderíamos ter carregado os | |
# pacotes googlesheets4 e janitor. | |
# Por costume da pessoa que escreveu o código (Beatriz), ela prefere usar os :: | |
# para deixar claro de onde vem cada função. | |
# Mas isso não é uma regra, e você pode usar como preferir. | |
formulario <- googlesheets4::read_sheet(sorteio_rladies) |> | |
# limpar nomes das colunas - IMPORTANTE! | |
janitor::clean_names() | |
# Entendendo os dados ------------------------ | |
# Sobre os dados: | |
# Cada linha representa uma resposta do formulário. | |
# Quantas respostas temos? | |
nrow(formulario) | |
# [1] 45 | |
# Quais são os nomes das colunas? | |
# colnames(formulario) | |
# | |
# [1] "carimbo_de_data_hora" | |
# [2] "endereco_de_e_mail" | |
# [3] "email" | |
# [4] "qual_e_o_seu_nome_completo" | |
# [5] "segundo_a_classificacao_do_ibge_a_sua_cor_raca_etnia_e" | |
# [6] "com_qual_genero_voce_se_identifica" | |
# [7] "voce_faz_parte_de_outros_grupos_sub_representados_na_area_de_ciencia_de_dados_se_sim_qual" | |
# [8] "voce_gostaria_de_participar_do_sorteio_do_livro_algoritmos_da_autora_nina_da_hora" | |
# [9] "voce_gostaria_de_participar_do_sorteio_de_uma_camiseta_da_r_ladies_sp_tamanho_m" | |
# [10] "voce_gostaria_de_participar_do_sorteio_de_uma_camiseta_da_r_ladies_sp_tamanho_gg" | |
# Possivelmente, alguém pode ter respondido mais de uma vez | |
# (pois escreveu o nome ou email errado, por exemplo) | |
# Isso aumentaria a probabilidade dela ser sorteada. | |
# Nós não verificamos isso durante o sorteio, | |
# mas é algo que é interessante ser feito em sorteios futuros. | |
# Poderia ser feito da seguinte forma: | |
nomes_unicos <- formulario |> | |
# Padronizando o nome | |
mutate(nome = qual_e_o_seu_nome_completo |> | |
# deixando em letras minúsculas | |
stringr::str_to_lower() |> | |
# removendo acentos | |
abjutils::rm_accent()) |> | |
# fazendo a contagem e deixando em ordem decrescente | |
count(nome, sort = TRUE) | |
# Importante olhar a lista de nomes únicos e verificar se há repetições | |
# que não foram removidas apenas padronizando os textos. | |
nomes_unicos |> | |
# quais nomes aparecem mais de uma vez? | |
filter(n > 1) | |
# # A tibble: 3 × 2 | |
# nome n | |
# <chr> <int> | |
# 1 [OMITIDO] 2 | |
# 2 [OMITIDO] 2 | |
# 3 [OMITIDO] 2 | |
# Existem 3 pessoas respostas repetidas. | |
# Essas pessoas teriam mais chances de serem sorteadas. | |
# Limpando e organizando os dados ------------------------ | |
# Essa etapa foi bem breve, e menor do que costumamos fazer no dia-a-dia. | |
# Isso porque a organização feita foi pensada para unicamente | |
# realizar o sorteio durante a live. | |
# Quando formos usar esses dados com outros objetivos, a limpeza deverá abranger | |
# mais questões. | |
form_arrumado <- formulario |> | |
# criando uma coluna com o número da linha | |
# (função do pacote tibble, que faz parte do tidyverse) | |
rowid_to_column() |> | |
# renomeando as colunas para facilitar a leitura | |
rename( | |
nome = qual_e_o_seu_nome_completo, | |
sorteio_livro = voce_gostaria_de_participar_do_sorteio_do_livro_algoritmos_da_autora_nina_da_hora, | |
sorteio_camiseta_m = voce_gostaria_de_participar_do_sorteio_de_uma_camiseta_da_r_ladies_sp_tamanho_m, | |
sorteio_camiseta_gg = voce_gostaria_de_participar_do_sorteio_de_uma_camiseta_da_r_ladies_sp_tamanho_gg | |
) | |
# Selecionando apenas as colunas que queremos mostrar no video, | |
# Para não expor na gravação os emails das pessoas e | |
# outros dados possivelmente sensíveis (como os grupos representados que | |
# a pessoa faz parte) | |
form_sem_email <- form_arrumado |> | |
# queremos as colunas rowid, nome, e todas as que o nome da coluna começa com "sorteio" | |
select(rowid, nome, starts_with("sorteio")) | |
# Sorteando os brindes ------------------------ | |
# Sorteando o livro! | |
form_sem_email |> | |
# filtrando as pessoas que querem participar do sorteio do livro | |
filter(sorteio_livro == "Sim") |> | |
# sorteando uma pessoa. O n = 1 indica que queremos sortear 1 pessoa. | |
slice_sample(n = 1) | |
# # A tibble: 1 × 5 | |
# rowid nome sorteio_livro sorteio_camiseta_m | |
# <int> <chr> <chr> <chr> | |
# 1 38 Glaucia Pereira Sim Não | |
# # ℹ 1 more variable: sorteio_camiseta_gg <chr> | |
# Sorteando a camiseta M! | |
form_sem_email |> | |
filter(sorteio_camiseta_m == "Sim") |> | |
slice_sample(n = 1) | |
# # A tibble: 1 × 5 | |
# rowid nome sorteio_livro sorteio_camiseta_m | |
# <int> <chr> <chr> <chr> | |
# 1 32 Izadora Santos de… Sim Sim | |
# # ℹ 1 more variable: sorteio_camiseta_gg <chr> | |
# Sorteando a camiseta GG! | |
form_sem_email |> | |
filter(sorteio_camiseta_gg == "Sim") |> | |
slice_sample(n = 1) | |
# # A tibble: 1 × 5 | |
# rowid nome sorteio_livro sorteio_camiseta_m | |
# <int> <chr> <chr> <chr> | |
# 1 29 Aline Freire Anho… Sim Sim | |
# # ℹ 1 more variable: sorteio_camiseta_gg <chr> | |
# Comunicação pós evento ------------------------ | |
# Buscando os emails únicos de participantes, | |
# para enviar a mensagem de agradecimento e | |
# informar sobre os materiais | |
emails_unicos <- formulario |> | |
# temos duas colunas de email | |
select(endereco_de_e_mail, email) |> | |
# deixando em formato longo, para termos apenas uma coluna de email | |
pivot_longer(cols = c(endereco_de_e_mail, email), values_to = "email") |> | |
# removendo duplicacoes | |
distinct(email) | |
nrow(emails_unicos) | |
# [1] 71 | |
# colando os emails separados por vírgula, | |
# para usar no gmail (campo BCC - cópia oculta) | |
paste0(emails_unicos$email, collapse = ", ") | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment