R y Python
Una polémica estéril, pero real: ¿R o Python?
Ensamblador, Fortran, Basic, APL, Cobol, C, C++, SQL, Lisp, Pascal, Java, JavaScript, Python, Go, así como los distintos lenguajes de comandos o shells de Unix como Bash, forman una lista no exhaustiva de los lenguajes que hemos practicado con entusiasmo y determinación. Con este bagaje, podemos sacar algunas conclusiones sobre la elección personal de un lenguaje de programación:
-
Cuando adoptamos un lenguaje, adoptamos sobre todo su biotopo.
-
Es fácil aprender un nuevo lenguaje cuando ya se domina otro.
-
Puede parecer paradójico, pero el estudio de un nuevo lenguaje le permite mejorar sus prácticas sobre los demás.
-
Es mejor utilizar el lenguaje que le permita construir lo que quiere, en las mejores condiciones (biotopo y herramientas, adaptación de este biotopo a su objetivo, placer, velocidad de ejecución, etc.).
En cuanto al aspecto «carrera profesional» o lo conveniente que sea para su CV, elegir un lenguaje no es sencillo, pero le proponemos que considere lo siguiente:
-
Cuanto más raro es un lenguaje, menos oportunidades hay, pero más rentable es en general.
-
Es fundamental adquirir un conocimiento, al menos parcial, de varios lenguajes para poder encajar en los equipos.
-
En última instancia, lo que le permitirá tener una buena reputación es la fiabilidad de su codificación, su velocidad, la calidad de la documentación y la previsibilidad del comportamiento de su código, así como respetar los criterios de calidad que perciben sus compañeros.
-
En el marco estricto de las data sciences, las personas que se dedican a la informática usan con mayor frecuencia el lenguaje Python, mientras que las personas especializadas en temas estadísticos...
Ejemplos de códigos R y Python comparables
Vamos a mostrar que, en cuanto a la lectura de código, R y Python son similares. Obviamente, al escribir código o para códigos especializados, no siempre es trivial pasar de uno a otro sin error.
R y Python son dos lenguajes que implementan bien los paradigmas del lenguaje funcional. Los dos lenguajes permiten tratar los paradigmas de orientación a objetos de manera similar (en lo que respecta a R, lo hemos demostrado anteriormente en el libro). En data sciences, así como en programación matemática, la programación de objetos no es predominante.
Un algoritmo clásico se basa en una estructura de datos (vectores, tensores/matrices), escalares y booleanos. Tanto en Python como en R, las estructuras de lista se usan ampliamente para la programación de alto nivel, cuando se requiere un buen rendimiento, pero muchos data scientist nunca han tenido que usarlas (excepto para leerlas o construirlas cuando una función lo requiere).
Además, los dos lenguajes saben cómo explotar de manera eficiente estructuras de datos específicas administradas como dataframe (en Python usamos el paquete pandas para esto).
En esta sección, hemos elegido mostrarle que es posible adoptar un estilo de programación similar en Python y en R para convencerle de que muchos reflejos de programación adquiridos en uno de los dos contextos se pueden transferir al otro.
Podemos utilizar este apartado y el siguiente como los aspectos básicos sintácticos mínimos que es necesario conocer, en uno u otro de los lenguajes.
1. Códigos triviales
Los siguientes dos códigos son casi idénticos: en el código R usamos la flecha de asignación porque es una buena práctica, pero el mismo signo, igual que en Python, hubiera funcionado perfectamente.
# >>>> un código R <<<<
a <- 1
b <- 10
c <- 2 * a + b
c
##> [1] 12
c**2
##> [1] 144
# >>>> un código Python <<<<
a = 1
b = 10
c = 2 * a + b
c
##> 12
c**2
##> 144
2. Paquetes
En ambos lenguajes existen varias sintaxis para cargar o usar paquetes. A continuación se muestra los que tienen...
Acceder a Python desde R
1. Instalar e inicializar el contexto técnico
No dude en hacer un punto de situación de su contexto antes de comenzar su trabajo, verificando su configuración de Python y su correcto funcionamiento.
getwd() # ¿dónde estoy?
library(reticulate) # carga de reticulate
¿Python está disponible?
py_available(initialize = FALSE)
¿Qué versión de Python estoy usando en mi máquina?
py_config() # la configuración python local
python: C:/Users/xxx/AppData/Local/r-miniconda/envs/
r-reticulate/python.exe
libpython: C:/Users/xxx/AppData/Local/r-miniconda/envs/
r-reticulate/python36.dll
pythonhome: C:/Users/xxx/AppData/Local/r-miniconda/envs/
r-reticulate
version: 3.6.13 (default, Feb 19 2021, 05:17:09) [MSC v.1916
64 bit (AMD64)]
Architecture: 64bit
numpy: C:/Users/xxx/AppData/Local/r-miniconda/envs/
r-reticulate/Lib/site-packages/numpy
numpy_version: 1.19.4
¿Qué entornos virtuales conda tengo disponibles?
conda_list() # posible configuración conda
tf-gpu-initial C:\\Users\\boss-hp\\.conda\\envs\\
tf-gpu-initial\\python.exe
r-reticulate C:\\Users\\boss-hp\\AppData\\Local\\r-miniconda\\
envs\\r-reticulate\\python.exe
Compruebe si su entorno funciona:
os <- reticulate::import("os") # una pequeña prueba
de funcionamiento
os$listdir(".") # si todo va bien: dir local
[1] "00 R y ML.lnk"
[2] "00 LIBRO3 EN CURSO.lnk"
Es correcto, es completamente operativo.
2. Interacciones R y Python desde el punto de vista de R
a. Compartir variables y ejecución de código Python en el biotipo R
Todo el código que ve aquí se ejecutó en RStudio, en archivos Rmarkdown; le recomendamos que haga lo mismo.
Primero crearemos un archivo Python en el que introducimos una línea...
Consideraciones sobre los casos complicados
Hemos utilizado como ejemplo las librerías de NLP para completar los elementos que se aportan previamente en el libro. La instalación y uso de estas librerías de Python no supuso ningún problema, sobre todo porque no cuentan con una interfaz gráfica.
La traducción de los formatos de datos y las funciones queda garantizada automáticamente por el paquete reticulate en la mayoría de los casos. Para casos complicados, o si desea crear estructuras Python directamente e intercambiarlas (como los diccionarios de Python, que son buenas estructuras), puede usar: r_to_py y py_to_r, py_dict, py_save_object y py_load_object, que utilizan el formato Python pickle, así como py_eval, py_run_xxx, py_set_item/py_get_item, py_func, py_call... Probablemente no necesite estas funciones muy a menudo, aunque son fáciles de usar, pero debe conocer su existencia para tratar ciertos casos especiales raros o cuando desee crear una interfaz particular usted mismo, con un módulo de Python.
Puede capturar la salida estándar de un programa Python usando py_capture_output.
Cuando el paquete de Python tiene una interfaz gráfica, algunas veces las cosas se complican en función del caso:
-
El paquete se utiliza para crear gráficos no interactivos, parecido a nuestros «plots»; entonces no hay problema, existen diferentes soluciones obvias...