ComenzarEmpieza gratis

Transformar variables continuas a lógicas

Las variables lógicas son muy útiles porque a menudo es más fácil pensar en términos de "sí o no" que en términos numéricos. Por ejemplo, si alguien te pregunta «¿Quieres una taza de té?», una respuesta de sí o no es preferible a «Hay una probabilidad de 0,73 de que quiera una taza de té». Esto también tiene aplicaciones reales en ciencia de datos. Por ejemplo, una prueba de diabetes puede devolver la concentración de glucosa en el plasma sanguíneo de un paciente como un número. Lo que realmente te importa es «¿El paciente tiene diabetes?», así que necesitas convertir ese número en un valor lógico, en función de algún umbral.

En R base, esto se hace de forma bastante simple, con algo como esto:

threshold_mmol_per_l <- 7
has_diabetes <- plasma_glucose_concentration > threshold_mmol_per_l

Todas las funciones de transformación de características de sparklyr tienen una interfaz de usuario similar. Los tres primeros argumentos son siempre un tibble de Spark, una cadena con el nombre de la columna de entrada y una cadena con el nombre de la columna de salida. Es decir, siguen este patrón.

a_tibble %>%
  ft_some_transformation("x", "y", some_other_args)

La forma en sparklyr de convertir una variable continua a lógica usa ft_binarizer(). El ejemplo anterior de diabetes se puede reescribir así. Nota: el valor del umbral debe ser un número, no una cadena que haga referencia a una columna del conjunto de datos.

diabetes_data %>%
  ft_binarizer("plasma_glucose_concentration", "has_diabetes", threshold = threshold_mmol_per_l)

Siguiendo la filosofía de Spark de usar DoubleType en todas partes, la salida de ft_binarizer() no es realmente lógica; es numeric. Este es el enfoque correcto para que puedas seguir trabajando en Spark y realizar otras transformaciones, pero si quieres procesar los datos en R, recuerda convertir explícitamente los datos a lógicos. El siguiente es un patrón de código común.

a_tibble %>%
  ft_binarizer("x", "is_x_big", threshold = threshold) %>%
  collect() %>%
  mutate(is_x_big = as.logical(is_x_big))

Este ejercicio trata el terriblemente nombrado campo artist_hotttnesss, que proporciona una medida del nivel de repercusión mediática que tenía el artista cuando se creó el conjunto de datos. Si te interesa aprender más sobre cómo dibujar gráficos con el paquete ggplot2, echa un vistazo al curso Introduction to Data Visualization with ggplot2.

Este ejercicio forma parte del curso

Introducción a Spark con sparklyr en R

Ver curso

Instrucciones del ejercicio

Ya tienes creada una conexión a Spark como spark_conn. Se ha predefinido un tibble asociado a los metadatos de las pistas almacenados en Spark como track_metadata_tbl.

  • Crea una variable llamada hotttnesss a partir de track_metadata_tbl.
    • Selecciona el campo artist_hotttnesss.
    • Usa ft_binarizer() para crear un nuevo campo, is_hottt_or_nottt, que sea verdadero cuando artist_hotttnesss sea mayor que 0.5.
    • Recoge el resultado con collect().
    • Convierte el campo is_hottt_or_nottt a lógico.
  • Dibuja un gráfico de barras con ggplot() de is_hottt_or_nottt.
    • El primer argumento de ggplot() es el argumento de datos, hotttnesss.
    • El segundo argumento de ggplot() es la estética, is_hottt_or_nottt envuelto en aes().
    • Añade geom_bar() para dibujar las barras.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

# track_metadata_tbl has been pre-defined
track_metadata_tbl

hotttnesss <- track_metadata_tbl %>%
  # Select artist_hotttnesss
  ___ %>%
  # Binarize to is_hottt_or_nottt
  ___ %>%
  # Collect the result
  ___ %>%
  # Convert is_hottt_or_nottt to logical
  ___

# Draw a barplot of is_hottt_or_nottt
ggplot(___, aes(___)) +
  ___()
Editar y ejecutar código