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
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
hotttnesssa partir detrack_metadata_tbl.- Selecciona el campo
artist_hotttnesss. - Usa
ft_binarizer()para crear un nuevo campo,is_hottt_or_nottt, que sea verdadero cuandoartist_hotttnessssea mayor que 0.5. - Recoge el resultado con
collect(). - Convierte el campo
is_hottt_or_nottta lógico.
- Selecciona el campo
- Dibuja un gráfico de barras con
ggplot()deis_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_notttenvuelto enaes(). - Añade
geom_bar()para dibujar las barras.
- El primer argumento de
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(___)) +
___()