Tubería con R

Jan 22 2023
¿Qué es Piping? Las tuberías también pueden denominarse encadenamiento. En R, el operador de tubería (%>%) se usa para pasar el resultado de una operación como entrada a otra.
Foto de iSawRed en Unsplash

¿Qué es Piping?

Las tuberías también pueden denominarse encadenamiento.

En R, el operador de tubería ( %>%) se usa para pasar el resultado de una operación como entrada a otra. Es parte del paquete tidyverse y se usa para crear un código más legible y conciso.

El operador de tubería le permite encadenar varias operaciones de una manera que es más fácil de leer y comprender que las llamadas a funciones anidadas. Puede hacer que su código sea más conciso y fácil de mantener.

¿Por qué usamos tuberías / encadenamiento?

Las tuberías o el encadenamiento se utilizan en la programación para permitirle realizar múltiples operaciones en una pieza de datos de una manera concisa y legible. Al encadenar varias operaciones mediante un operador de canalización u otra sintaxis, puede expresar tareas complejas de una forma más lineal y comprensible, en lugar de tener que anidar varias llamadas a funciones o escribir varias líneas de código.

Las canalizaciones y el encadenamiento pueden ser especialmente útiles en tareas de análisis y manipulación de datos, en las que a menudo es necesario aplicar una serie de operaciones a un conjunto de datos para prepararlo para el análisis o la visualización . Pueden hacer que su código sea más modular y más fácil de mantener, y pueden mejorar su productividad al permitirle escribir y probar diferentes combinaciones de operaciones más rápidamente.

En general, las canalizaciones y el encadenamiento son herramientas útiles para crear código más legible, modular y flexible, lo que puede ayudarlo a comprender y resolver mejor problemas complejos.

Los operadores de tubería se utilizan para pasar parámetros a una función de una manera simple y elegante. Permite al codificador eliminar valores intermedios y hacer que las llamadas a funciones sean más fáciles de leer.

¿Hay beneficios para las tuberías?

Hay varios beneficios al usar el operador de tubería:

  1. Legibilidad mejorada: el operador de tubería puede hacer que su código sea más legible al permitirle expresar operaciones complejas de una manera más concisa y lineal. También puede ayudarlo a evitar el anidamiento profundo de llamadas a funciones, lo que puede hacer que su código sea más difícil de seguir.
  2. Mayor modularidad: puede usar el operador de tubería para crear bloques de código reutilizables que se pueden combinar fácilmente de diferentes maneras para realizar diferentes tareas. Esto puede hacer que su código sea más modular y más fácil de mantener.
  3. Colaboración mejorada: el operador de tubería es una herramienta familiar y ampliamente utilizada en la comunidad de R, y usarlo en su código puede facilitar que otros lo entiendan y contribuyan a su trabajo.
  4. Mayor flexibilidad: el operador de tubería le permite intercambiar fácilmente diferentes componentes de su código y probar diferentes combinaciones de operaciones sin tener que volver a escribir grandes porciones de su código. Esto puede ahorrarle tiempo y facilitar la experimentación y la iteración de su análisis.

Los operadores de tuberías se utilizan en varios lenguajes de programación, que incluyen:

  1. Shells de Unix (como bash): en los shells de Unix, el operador de canalización ( |) se usa para redirigir la salida de un comando como entrada a otro comando. Por ejemplo, el comando ls -l | grep "^d"enumera los directorios en el directorio actual.
  2. R: En R, el operador de tubería ( %>%) se usa para pasar el resultado de una operación como entrada a otra. Es parte del paquete tidyverse y se usa para crear un código más legible y conciso.
  3. Elixir: En Elixir, el operador de tubería ( |>) se usa para pasar el resultado de una función como entrada a otra. Es similar al operador de tubería R.
  4. F#: en F#, el operador de canalización ( |>) se usa para pasar el resultado de una función como entrada a otra. Es similar a los operadores de tubería Elixir y R.
  5. PowerShell: en PowerShell, el operador de canalización ( |) se usa para pasar la salida de un comando como la entrada de otro comando. Es similar al operador de tubería de Unix.
  6. En Julia, el operador de tubería ( |>) se usa para pasar el resultado de una función como entrada a otra. Es similar a los operadores de canalización que se usan en otros lenguajes, como R, Elixir y F#.

tipos de tuberias

Hay varios tipos de tuberías que se utilizan en la programación:

  1. Conductos de datos : estos conductos se utilizan para pasar la salida de un comando o función como entrada a otro. Se usan comúnmente en shells de Unix (como bash) y en lenguajes de programación que tienen un operador de canalización (como R y Elixir).
  2. Conductos de redirección : estos conductos se utilizan para redirigir la salida de un comando o función a un archivo oa otra ubicación. Se usan comúnmente en shells de Unix (como bash) y en lenguajes de programación que tienen un operador de redirección (como PowerShell).
  3. Conductos condicionales : estos conductos se utilizan para pasar la salida de un comando o función a otro comando o función solo si se cumple una determinada condición. Se usan comúnmente en shells de Unix (como bash) y en lenguajes de programación que tienen un operador condicional (como PowerShell).
  4. Conductos de paso de mensajes : estos conductos se utilizan para pasar mensajes o datos entre procesos o subprocesos. Se usan comúnmente en lenguajes de programación concurrentes para permitir que diferentes partes de un programa se comuniquen entre sí.
  5. Las tuberías directas son un tipo de operador de tubería que pasa la salida de una función como la entrada a otra función. Se denominan conductos "hacia adelante" porque la salida fluye hacia adelante a través de la cadena de funciones, en lugar de hacia atrás.
  6. En R, el %>%operador es un operador de tubería directa. Se utiliza para pasar el resultado de una operación como primer argumento a otra operación. Por ejemplo:

Las canalizaciones directas pueden ser particularmente útiles en el contexto de tidyverse, una colección de paquetes R para la manipulación y el análisis de datos.

En R, las " tuberías de avance " son una forma de pasar la salida de una función como entrada a otra función sin asignar el resultado intermedio a una variable. Esto se hace usando el %$%operador, que es similar al %>%operador, pero pasa la entrada al lado derecho del operador como un argumento a la función del lado izquierdo, en lugar de como el primer argumento.

Julia también tiene un operador de " tubo hacia atrás<| " ( ) que se puede usar para pasar la entrada a una función como el primer argumento, en lugar del último. Esto puede ser útil en los casos en los que desea pasar la entrada a una función que la espera como el primer argumento, en lugar del último.

En general, el operador de tubería puede ser una herramienta útil para escribir código más legible y conciso en Julia.

Echemos un vistazo a algunos ejemplos:

url='https://raw.githubusercontent.com/NicJC/Country-Sales/main/Country_Sales.csv'
data <- read_csv(url,show_col_types = FALSE)
data %>%
  head(10)

      
                
image by author

url='https://raw.githubusercontent.com/NicJC/Country-Sales/main/Country_Sales.csv'

data <- read_csv(url,show_col_types = FALSE)
data %>%

  head(10) %>%

  select(c(1,2,3,6,7))

      
                
image by author

Debido a que enumeramos las 10 filas principales del marco de datos antes de pasar más parámetros al marco de datos, solo tendremos las primeras 10 filas para trabajar, que podemos ver en la imagen anterior, ya que solo tiene

1–10 de 10 filas

data %>%
  
  select(c(1,2,3,6,7)) %>% 
  
  rename(Units_Sold = 'Units Sold',Item_Type = 'Item Type',Order_Date = 'Order Date')

      
                
image by author

data %>%
  
  select(c(1,2,3,6,7)) %>% 
  
  rename(Units_Sold = 'Units Sold',Item_Type = 'Item Type',Order_Date = 'Order Date') %>%
  
  filter(Country == "Australia" & Item_Type != ("Vegetables"))

      
                
image by author

Tenga en cuenta el '==' para la asignación y '!= 'para la exclusión.

Ahora podemos agregar algo de agregación y agrupación.

data %>%
  
  select(c(1,2,3,6,7)) %>% 
  
  rename(Units_Sold = 'Units Sold',Item_Type = 'Item Type',Order_Date = 'Order Date') %>%
  
  filter(Country == "Australia" & Item_Type != ("Vegetables")) %>%
  
  group_by(Item_Type, Year) %>%
  
  summarise(Avg_Sales = mean(Units_Sold))

      
                
image by author

data %>%
  
  select(c(1,2,3,6,7)) %>% 
  
  rename(Units_Sold = 'Units Sold',Item_Type = 'Item Type',Order_Date = 'Order Date') %>%
  
  filter(Country == "Australia" & Item_Type != ("Vegetables")) %>%
  
  group_by(Item_Type, Year) %>%
  
  summarise(Avg_Sales = mean(Units_Sold)) %>%
  
  ggplot() +
  
  geom_point(mapping = aes(x = Year , Avg_Sales , col = Item_Type)) +
  
  labs( title = "Average sales by item", subtitle = "Australian Sales" , 
        col = "Item Type" , y = "Average sales" , caption = "Vegetables excluded from sales")

imagen por autor

Podemos asignar todos estos datos manipulados a un nuevo marco de datos que debería ahorrarnos algo de tiempo: -

df <- datos

esto no nos permitirá acceder a ninguno de los datos en el marco de datos original.

Esto puede ser útil si solo queremos conservar los datos manipulados.

df <- data %>%
  
  select(c(1,2,3,6,7)) %>% 
  
  rename(Units_Sold = 'Units Sold',Item_Type = 'Item Type',Order_Date = 'Order Date') %>%
  
  filter(Country == "Australia" & Item_Type != ("Vegetables")) %>%
  
  group_by(Item_Type, Year) %>%
  
  summarise(Avg_Sales = mean(Units_Sold))

df

      
                
image by author

de R para ciencia de datos

La tubería es una herramienta poderosa, pero no es la única herramienta a tu disposición, ¡y no resuelve todos los problemas! Las tuberías son más útiles para reescribir una secuencia lineal de operaciones bastante corta. Creo que deberías buscar otra herramienta cuando:

  • Sus tuberías son más largas que (digamos) diez pasos. En ese caso, cree objetos intermedios con nombres significativos. Eso hará que la depuración sea más fácil, porque puede verificar más fácilmente los resultados intermedios y facilita la comprensión de su código, porque los nombres de las variables pueden ayudar a comunicar la intención.
  • Tiene múltiples entradas o salidas. Si no se está transformando un objeto principal, sino que se están combinando dos o más objetos, no use la canalización.
  • Está empezando a pensar en un gráfico dirigido con una estructura de dependencia compleja. Las canalizaciones son fundamentalmente lineales y expresar relaciones complejas con ellas normalmente producirá un código confuso.

Hay muchos operadores de tuberías diferentes en uso en una variedad de lenguajes de programación, cada uno con su propio conjunto de características y capacidades.

Puede llevar algún tiempo acostumbrarse a trabajar con tuberías, pero su uso tiene muchas ventajas, a saber:

  1. Legibilidad mejorada
  2. Flexibilidad
  3. Depuración más fácil
  4. Modularidad

El concepto de tubería no es específico de la programación y tiene una larga historia en matemáticas e ingeniería. En un contexto matemático, una tubería es un dispositivo que se utiliza para transmitir un fluido (como agua o gas) de un lugar a otro. Las tuberías se usan comúnmente para transportar fluidos a través de un sistema de canales o tubos interconectados y, a menudo, se usan para controlar el flujo y la presión del fluido de una etapa a la siguiente...

¡Espero que hayas disfrutado del artículo!

Consulte mi artículo sobre canalización y manipulación de datos:

Canalizando sus datos con R — parte 1

Conectémonos en Linkedin o github