Como continuación de la reflexión sobre investigación reproducible, en esta entrega se presenta una herramienta concreta que permite dar un paso firme hacia una práctica más transparente, organizada y automatizable: Babel, un sistema de Emacs que trabaja dentro del formato Org-mode.
¿Qué es Babel en Emacs?
Babel es un módulo de Org-mode —el sistema de organización de documentos dentro de Emacs— que permite insertar bloques de código dentro de un texto, ejecutarlos y recibir los resultados directamente en el mismo archivo. Esto significa que mientras se escribe un documento, también se pueden realizar cálculos, generar gráficos, analizar datos, consultar bases externas o automatizar tareas, todo sin abandonar el entorno de edición.
Este enfoque implica la posiblididad de crear textos más ricos, más dinámicos. También representa una forma distinta de hacer investigación computacional: más integrada, reproducible y documentada. Además, Babel permite trabajar con múltiples lenguajes de programación en un mismo archivo, algo que no todos los entornos ofrecen. Mientras sistemas como Jupyter Notebooks se enfocan en un solo lenguaje por cuaderno, Babel permite que varios lenguajes se comuniquen entre sí dentro de un mismo documento.
La página oficial de Org lo explica así:
“Babel se trata de dejar que muchos lenguajes diferentes trabajen juntos. Los lenguajes de programación viven en bloques de código dentro de documentos Org. Un dato puede pasar de una tabla Org a un bloque de código Python, luego tal vez pasar a un bloque de código R, y finalmente terminar incrustado como un valor en el medio de un párrafo o posiblemente pasar a través de un bloque de código Gnuplot y terminar como un gráfico incrustado en el documento.”
De una tabla Org a un análisis en Python
Org-mode permite incorporar tablas directamente en el texto con una sintaxis simple y efectiva. Por ejemplo:
a | b | c |
---|---|---|
1 | 1 | 1 |
2 | 4 | 8 |
3 | 9 | 27 |
4 | 16 | 64 |
5 | 25 | 125 |
6 | 36 | 216 |
7 | 49 | 343 |
8 | 64 | 512 |
9 | 81 | 729 |
10 | 100 | 1000 |
Esta tabla, además de ser parte del documento, puede ser utilizada como fuente de datos para el análisis. A continuación, se muestra un bloque de código en Python que toma los datos de la tabla anterior y calcula una nueva columna:
import pandas as pd
D = pd.DataFrame(tbl, columns=['Uno', 'Dos', 'Tres'])
D2 = D.assign(Cuatro = D["Uno"] ** 4)
D2
Uno | Dos | Tres | Cuatro | |
---|---|---|---|---|
0 | 1 | 1 | 1 | 1 |
1 | 2 | 4 | 8 | 16 |
2 | 3 | 9 | 27 | 81 |
3 | 4 | 16 | 64 | 256 |
4 | 5 | 25 | 125 | 625 |
5 | 6 | 36 | 216 | 1296 |
6 | 7 | 49 | 343 | 2401 |
7 | 8 | 64 | 512 | 4096 |
8 | 9 | 81 | 729 | 6561 |
9 | 10 | 100 | 1000 | 10000 |
Gráficos generados en el documento
Además de cálculos, Org-mode permite generar gráficos directamente en el texto. El siguiente ejemplo, esta vez en R, produce una gráfica utilizando datos de la base mtcars
incluída en la librería ggplot2
y la inserta ahí mismo:
# Libraries
library(ggplot2)
library(hrbrthemes)
# Dummy data
data <- data.frame(
var1 = rnorm(1000),
var2 = rnorm(1000, mean = 2)
)
# Chart
p <- ggplot(data, aes(x = x)) +
# Top
geom_density(aes(x = var1, y = ..density..), fill = "#69b3a2") +
geom_label(aes(x = 4.5, y = 0.25, label = "variable1"), color = "#69b3a2") +
# Bottom
geom_density(aes(x = var2, y = -..density..), fill = "#404080") +
geom_label(aes(x = 4.5, y = -0.25, label = "variable2"), color = "#404080") +
theme_ipsum() +
xlab("value of x")
p
Figura 1: Aquí está el código de una gráfica divertida. Tomado de: https://r-graph-gallery.com/density_mirror_ggplot2.html
Un enfoque integrado de documentación y análisis
Este tipo de flujo de trabajo permite integrar en un solo documento:
- Texto explicativo.
- Código fuente.
- Datos tabulares.
- Resultados computacionales.
- Imágenes o visualizaciones generadas dinámicamente.
La posibilidad de ejecutar código libremente, hacer explícitos los cálculos y finalmente exportar todo el contenido (texto, resultados y gráficos) en múltiples formatos —HTML, PDF, LaTeX o incluso Word— convierte a Org-mode y Babel en herramientas particularmente poderosas para la documentación técnica, la escritura científica y la publicación reproducible.
Este enfoque, heredero de la filosofía del Literate Programming de Donald Knuth, permite escribir código como si se estuviera narrando una historia: con contexto, con intención y con trazabilidad.
¿Por qué importa esto?
En tiempos en los que se discute con urgencia la necesidad de transparencia en la investigación y se cuestiona la confiabilidad de ciertos resultados científicos, herramientas como Org-mode no solo ayudan a programar mejor, sino a investigar con más claridad y responsabilidad.
Frente a la desorganización y la opacidad que muchas veces caracterizan los procesos académicos, estos entornos ofrecen una alternativa práctica, eficiente y —sobre todo— reproducible.