Cómo programar con Python y R en el mismo Jupyter Notebook

Share on linkedin
Share on twitter
Share on email

Seguramente hayas leído muchas comparativas entre Python y R, diciendo cuál de los dos es mejor que el otro de cara a Data Science. En mi opinión, cada uno es bueno para una cosa en concreto. Por ejemplo, para Deep Learning Python es el rey, mientras que para visualización de datos, yo prefiero R. Entonces, ¿no habría alguna forma de usar los dos indistintamente? Pues sí, se puede programar con Python y R en el mismo Jupyter Notebook. ¡Vamos a ellos!

Como programar en Python y R en el mismo Jupyter Notebook

Prerrequisitos de la instalación

1. Prerrequisitos Básicos

Para poder programar con R y Python en el mismo Jupyter Notebook necesitamos 3 cosas básicas, que daremos por hecho en este tutorial:

  1. Tener Python Instalado en su versión 3.5 o superior. En mi caso uso Python 3.7.3. (Cómo conocer tu versión de Python)
  2. Tener R Instalado en su versión 3.2 o superior. En mi caso uso la versión 3.6.1. (Cómo conocer tu versión de R).
  3. Tener Jupyter instalado: en mi caso tengo la verión 6.0 (cómo conocer tu versión de Jupyter Notebook).

Si no tienes Python y Jupyter instalado, te recomiendo los instales desde Anaconda.

Esta es la parte fácil. Vayamos ahora con lo interesante;)

2. Instalar R dentro de Jupyter Notebook

Una vez hayas instalado Python, R y Jupyter Notebook tendrás que instalar R dentro de Jupyter Notebook. Esto te permitirá crear Jupyter Notebooks en R. Esto, en sí mismo, no es un gran avance, puesto que con R puedes crear R Markdown, que viene a ser algo similar a Jupyter. A menos que seas un gran fran de Jupyter, claro.

Para poder usar R con los Jupyter Notebooks debes instalar los paquetes dentro de R essentials. Para ello, debes ejecutar la siguiente línea de comando en Anaconda Prompt:

$ conda install -c r r-essentials

Con esto, ya deberías poder crear Jupyter Notebooks con R. Para comprobarlo, simplemente ejecuta Jupyter y crea un nuevo notebook. Si se despliega R como opción, entonces lo has hecho bien. Sino este enlace te será de ayuda.

Hecho esto llega lo interesante: cómo programar con Python y R en el mismo Jupyter Notebook.

Cómo programar con Python y R en el mismo Jupyter Notebook

Hay que entender que R y Python guardan las variables en estructuras diferentes. Por tanto, si queremos usar ambos, necesitamos un paquete que nos sirva de traductor, es decir, que «convierta» una lista de Python en un vector en R para poder trabajar con ello, por ejemplo.

Para ello utilizaremos el paquete rpy. Este paquete genera una interfaz en Python en la que trabajar con R. Otra opción sería usar el paquete reticulate, que básicamente es lo contrario: una interfaz en R para Python, por si prefieres programar en RStudio, aunque lo dejamos para otro post;)

Instalar el paquete rpy

Lo primero que debes hacer es instalar el paquete rpy. Para ello, estaríamos tentados a instalarlo desde el repositorio, pero yo no lo recomiendo. A mi, lo que me ha funcionado ha sido:

1. Descargar el último archivo (.whl) desde aquí. (Usar Cntrl + F o Cmd + F para encontrarlo, puesto que está bastante abajo).

2. Instalar el archivo en Anaconda Promp . Para ello, sitúate en la carpeta donde esté descargado con el código «cd ruta». Una vez ahí, ejecuta » pip install [nombre del archivo .whl] «. Ejemplo:

cd "C:\Users\Ander\Documents\Example"
pip install rpy2-2.9.5-cp37-cp37m-win_amd64

3. Añadir la ruta de la carpeta bin de R a la variable de entorno PATH. Para ello, lo primero que debes hacer es encontrar cuál es la ruta de la carpeta bin de R. En mi caso, se encuentra en: «C:\Program Files\R\R-3.6.1\bin». Una vez la tengas, tienes que añadirla como variable de entorno de PATH. Aquí se explica cómo hacerlo, tanto en Windows como en Mac.

4. Crea las variables de entorno: R_HOME, R_USER y R_LIBS_USER. Cada una indicara, dónde se encuentra R, cúal es el usuario que lo ejecuta y dónde se encuentran los paquetes, respectivamente. En cada una de ellas añade lo siguiente:

  • R_HOME: la raíz de R. En mi caso: C:\Program Files\R\R-3.6.1\
  • R_USER: los usuarios que usarán R. Si quieres usar R más allá de Jupyter, debes añadir dos variables, la localización de R Studio (C:\Program Files\RStudio\bin) y la localización del paquete rpy2 (C:\Users\Ander\Anaconda3\Lib\site-packages\rpy2)
  • R_LIBS_USER: dónde se encuentran las librerías. En mi caso: C:\Users\Ander\Documents\R\win-library\3.6

Una vez hecho esto, simplemente lanzamos un Jupyter notebook en Python y cargamos el paquete con el siguiente comando:

%load_ext rpy2.ipython

Si todo está OK, ¡enhorabuena! Ya puedes usar R dentro de Python. ¿Cómo? Pues sencillo: cada vez que quieras usar una variable con R (por ejemplo, el dataframe df), deberás «llevarla» a R usando el siguiente código:

%%R -i df 

Así, ya podrás operar con R dentro de Python. Si esto te gusta y no quieres esperar a más tutoriales, aquí, puedes profundizar en el paquete rpy2. En cualquier caso, te dejo un notebook para que veáis un ejemplo.

In [1]:
%load_ext rpy2.ipython
In [2]:
import pandas as pd
import numpy as np
df = pd.DataFrame({
    'cups_of_coffee': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
    'productivity': [2, 5, 6, 8, 9, 8, 0, 1, 0, -1]
})
df.transpose()
Out[2]:
0123456789
cups_of_coffee0123456789
productivity256898010-1
In [4]:
%%R -i df 
library(ggplot2)
ggplot(df, aes(x=reorder(cups_of_coffee,productivity), y=productivity)) + geom_col() + coord_flip()