Skip to content

Instantly share code, notes, and snippets.

@beatrizmilz
Last active February 21, 2024 13:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save beatrizmilz/e8a856f855ebed1af3dcdca809923659 to your computer and use it in GitHub Desktop.
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.
# 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