Cómo ser bilingüe en ciencia de datos

En este artículo, quiero demostrar R Markdown, un complemento útil para programar su proyecto tanto en R como en Python, que le permite programar algunos elementos de su proyecto en dos idiomas y manipular objetos creados en un idioma usando otro idioma. Esto puede resultar útil porque:



  1. Le permite escribir código en un idioma familiar, pero al mismo tiempo utilizar funciones que existen solo en otro idioma.
  2. Permite la colaboración directa con un colega que está programando en otro idioma.
  3. Hace posible trabajar con dos idiomas y eventualmente aprender a dominarlos.









Qué necesitamos



Necesitará estos componentes para funcionar:



  1. R y Python, por supuesto.
  2. IDE RStudio (puede hacer esto en otros IDE, pero en RStudio es más fácil).
  3. Su administrador de entorno Python favorito (estoy usando conda aquí).
  4. Paquetes rmarkdown



    e reticulate



    instalados en R.


Al escribir documentos de R Markdown, estaremos trabajando en RStudio, pero al mismo tiempo navegaremos entre los fragmentos de código escritos en R y en Python. Te mostraré un par de ejemplos sencillos.



Configurar el entorno de Python



Si está familiarizado con la programación de Python, entonces sabe que cualquier trabajo realizado en Python debe referirse a un entorno específico que contenga todos los paquetes necesarios para el trabajo. Hay muchas formas de administrar paquetes en Python, las dos más populares son virtualenv y conda. Aquí estoy asumiendo que estamos usando conda y que está instalado como el administrador de entorno de Python.

Puede usar el paquete reticulate en R para configurar entornos conda a través de la línea de comando R si lo desea (usando características como conda_create()



), pero como programador regular de Python, prefiero configurar mis entornos manualmente.



Supongamos que creamos un entorno conda llamado r_and_python



e instalamos en él pandas



y statsmodels



... Entonces los comandos en la terminal:



conda create -name r_and_python
conda activate r_and_python
conda install pandas
conda install statsmodels
      
      





Después de la instalación pandas



, statsmodels



(y cualquier otro paquete que pueda necesitar), la configuración del entorno se ha completado. Ahora ejecute conda info en la terminal y seleccione la ruta a su entorno. Lo necesitará en el siguiente paso.



Configurando su proyecto R para trabajar con R y Python



Comenzaremos un proyecto R en RStudio, pero queremos poder ejecutar Python en el mismo proyecto. Para asegurarnos de que el código de Python se ejecute en el entorno que queremos, debemos configurar la variable de entorno del sistema RETICULATE_PYTHON



para el ejecutable de Python en ese entorno. Esta será la ruta que eligió en la sección anterior, seguida de /bin/python3



.



La mejor manera de asegurarse de que esta variable se establezca permanentemente en su proyecto es crear un archivo de texto con el nombre del proyecto .Rprofile



y agregarle esta línea.



Sys.setenv(RETICULATE_PYTHON=”path_to_environment/bin/python3")
      
      





Reemplace ruta al entorno con la ruta que eligió en la sección anterior. Guarde el archivo .Rprofile



y reinicie la sesión R. Cada vez que reinicia una sesión o proyecto, se inicia .Rprofile



, configurando su entorno Python. Si desea probar esto, puede ejecutar la línea Sys.getenv ("RETICULATE_PYTHON").



Código de escritura: primer ejemplo



Ahora puede configurar un documento R Markdown en su proyecto .Rmd



y escribir código en dos idiomas diferentes. Primero debe cargar la biblioteca reticulada en su primer fragmento de código.



```{r}
library(reticulate)
```
      
      





Ahora, cuando desee escribir código Python, puede envolverlo con comillas inversas normales, pero marcarlo como un fragmento de código Python con {python}



, y cuando desee escribir en R, use {r}



.



Para nuestro primer ejemplo, suponga que ejecuta un modelo de Python en un conjunto de datos de calificaciones de exámenes de estudiantes.



```{python}
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
# obtain ugtests data
url = “http://peopleanalytics-regression-book.org/data/ugtests.csv"
ugtests = pd.read_csv(url)
# define model
model = smf.ols(formula = “Final ~ Yr3 + Yr2 + Yr1”, data = ugtests)
# fit model
fitted_model = model.fit()
# see results summary
model_summary = fitted_model.summary()
print(model_summary)
```
      
      









Esto es genial, pero digamos que tuvo que dejar su trabajo debido a algo más urgente y entregárselo a su colega, el programador de R. Esperaba poder diagnosticar el modelo.



No tengas miedo. Puede acceder a todos los objetos de Python que ha creado en la lista general llamada py. Entonces, si se crea un bloque R dentro de su documento R Markdown, los colegas tendrán acceso a los parámetros de su modelo:



```{r}
py$fitted_model$params
```
      
      









o las primeras sobras:



```{r}
py$fitted_model$resid[1:5]
```
      
      









Ahora puede realizar fácilmente algunos diagnósticos en el modelo, como trazar los residuos de su modelo de cuantiles-cuantiles:



```{r}
qqnorm(py$fitted_model$resid)
```
      
      









Código de escritura - segundo ejemplo



Analizó algunos datos de citas de Python y creó un marco de datos de pandas con todos los datos en él. Para simplificar, carguemos los datos y veamos:



```{python}
import pandas as pd
url = “http://peopleanalytics-regression-book.org/data/speed_dating.csv"
speed_dating = pd.read_csv(url)
print(speed_dating.head())
```
      
      







Ahora ha ejecutado un modelo de regresión logística simple en Python para intentar asociar la solución de dec con algunas otras variables. Sin embargo, comprende que estos datos son en realidad jerárquicos y que el mismo iid individual puede tener varios conocidos.



Entonces sabe que necesita ejecutar un modelo de regresión logística de efectos mixtos, ¡pero no puede encontrar ningún programa de Python que lo haga!



Y de nuevo, no tengas miedo, envía el proyecto a un colega y él escribirá la solución en R.



```{r}
library(lme4)
speed_dating <- py$speed_dating
iid_intercept_model <- lme4:::glmer(dec ~ agediff + samerace + attr + intel + prob + (1 | iid),
 data = speed_dating,
 family = “binomial”)
coefficients <- coef(iid_intercept_model)$iid
```
      
      





Ahora puede obtener el código y ver las probabilidades. También es posible acceder a los objetos Python R dentro de un objeto r genérico.



```{python}
coefs = r.coefficients
print(coefs.head())
```
      
      







Estos dos ejemplos muestran cómo puede navegar sin problemas entre R y Python en el mismo documento de R Markdown. Entonces, la próxima vez que piense en trabajar en un proyecto en varios idiomas, piense en ejecutar todos los pasos en R Markdown. Esto puede evitarle la molestia de cambiar entre dos idiomas y ayudar a mantener todo su trabajo en un solo lugar como una narración continua.



Puede ver el documento R Markdown terminado creado en torno a la integración del lenguaje, con fragmentos de R y Python y objetos que se mueven entre ellos, publicado aquí . El repositorio de Github con el código fuente está aquí .



Los datos de muestra en el documento son de mi Referencia de modelado de regresión de People Analytics .



imagen




Otras profesiones y cursos
PROFESIÓN








CURSOS








All Articles