ComeçarComece de graça

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

Ver curso

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_time a partir de track_metadata_tbl.
    • Selecione os campos artist_hotttnesss e year.
    • Converta a coluna year para numeric.
    • Use ft_bucketizer() para criar um novo campo, decade, que divide os anos usando decades.
    • Colete o resultado.
    • Converta o campo decade em um fator com os rótulos decade_labels.
  • Desenhe um gráfico de barras com ggplot() de artist_hotttnesss por decade.
    • O primeiro argumento de ggplot() é o argumento de dados, hotttnesss_over_time.
    • O segundo argumento de ggplot() é a estética, que recebe decade e artist_hotttnesss dentro de aes().
    • Adicione geom_boxplot() para desenhar as barras.

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(___, ___)) +
  ___()  
Editar e executar o código