Transformando variáveis contínuas em categóricas (1)
Uma generalização da ideia anterior é ter múltiplos limiares; isto é, você divide uma variável contínua em “baldes” (ou “bins”), assim como um histograma faz. No R base, você usaria cut() para essa tarefa. Por exemplo, em um estudo sobre hábitos de fumo, você poderia pegar o número típico de cigarros fumados por dia e transformá-lo em um fator.
smoking_status <- cut(
cigarettes_per_day,
breaks = c(0, 1, 10, 20, Inf),
labels = c("non", "light", "moderate", "heavy"),
right = FALSE
)
O equivalente em sparklyr é usar ft_bucketizer(). O código tem um formato semelhante ao de ft_binarizer(), mas desta vez você deve passar um vetor de pontos de corte para o argumento splits. Aqui está o mesmo exemplo reescrito no estilo sparklyr.
smoking_data %>%
ft_bucketizer("cigarettes_per_day", "smoking_status", splits = c(0, 1, 10, 20, Inf))
Há alguns pontos importantes a observar. Você pode ter notado que o argumento breaks de cut() é o mesmo que o argumento splits de ft_bucketizer(). Há uma pequena diferença em como os valores na fronteira são tratados. Em cut(), por padrão, a fronteira superior (direita) é incluída em cada faixa, mas não a esquerda. ft_bucketizer() inclui a fronteira inferior (esquerda) em cada faixa, mas não a direita. Isso significa que é equivalente a chamar cut() com o argumento right = FALSE.
Uma exceção é que ft_bucketizer() inclui valores em ambas as fronteiras para a faixa mais alta. Então ft_bucketizer() também é equivalente a definir include.lowest = TRUE ao usar cut().
O último ponto é que, enquanto cut() retorna um fator, ft_bucketizer() retorna um vetor numeric, com valores no primeiro “balde” retornados como zero, no segundo como um, no terceiro como dois e assim por diante. Se você quiser trabalhar com os resultados no R, precisa converter explicitamente para fator. Este é um padrão de código comum:
a_tibble %>%
ft_bucketizer("x", "x_buckets", splits = splits) %>%
collect() %>%
mutate(x_buckets = factor(x_buckets, labels = labels))
Este exercício faz parte do curso
Introdução ao Spark com sparklyr em R
Instruções do exercício
Uma conexão Spark foi criada para você como spark_conn. Um tibble vinculado aos metadados das faixas armazenados no Spark foi pré-definido como track_metadata_tbl. decades é uma sequência numérica de 1920, 1930, …, 2020, e decade_labels é uma descrição em texto dessas décadas.
- Crie uma variável chamada
hotttnesss_over_timea partir detrack_metadata_tbl.- Selecione os campos
artist_hotttnessseyear. - Converta a coluna
yearparanumeric. - Use
ft_bucketizer()para criar um novo campo,decade, que divide os anos usandodecades. - Colete o resultado.
- Converta o campo
decadeem um fator com os rótulosdecade_labels.
- Selecione os campos
- Desenhe um gráfico de barras com
ggplot()deartist_hotttnessspordecade.- O primeiro argumento de
ggplot()é o argumento de dados,hotttnesss_over_time. - O segundo argumento de
ggplot()é a estética, que recebedecadeeartist_hotttnesssdentro deaes(). - Adicione
geom_boxplot()para desenhar as barras.
- O primeiro argumento de
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
# track_metadata_tbl, decades, decade_labels have been pre-defined
track_metadata_tbl
decades
decade_labels
hotttnesss_over_time <- track_metadata_tbl %>%
# Select artist_hotttnesss and year
___ %>%
# Convert year to numeric
___ %>%
# Bucketize year to decade using decades vector
___ %>%
# Collect the result
___ %>%
# Convert decade to factor using decade_labels
___
# Draw a boxplot of artist_hotttnesss by decade
ggplot(___, aes(___, ___)) +
___()