1. Inicio
  2. Blog Refinitiv
  3. Inversiones y Trading
  4. Cómo acelerar el código Python

IDEAS DE INVERSIÓN

Cómo acelerar el código Python

03 de Julio de 2020

Python se está convirtiendo en el lenguaje de programación más popular en la industria de servicios financieros porque es relativamente fácil de codificar. Sin embargo, es lento en comparación con otros lenguajes. En este blog de invitados, Saeed Amen, quant y co-autor de “The Book of Alternative Data”, analiza los enfoques que puede adoptar para acelerar su código Python.

  1. Si bien Python es más simple de escribir que lenguajes como Java o C++, tiende a ser mucho más lento. Hay maneras de acelerar su código Python, algún elemento de reescritura de su código pero cada una requiere alguna modificación de su código. 
  2. Las técnicas incluyen reemplazar los bucles por código vectorizado usando Pandas o NumPy. Puede también paralelizar su código usando bibliotecas de Python y cambiar el cálculo de datos fuera de Python.
  3. Se puede usar Cython para escribir código en Python que genere código C, logrando ejecutar en un lenguaje más rápido. Numba también puede convertir el código Python y NumPy en código bajo nivel que compile más rápido.

Python está ganando popularidad en la industria de los servicios financieros.

Entre las razones de este crecimiento está la gran cantidad de bibliotecas de ciencias de datos en Python. Por ejemplo, hace años, hubiese tenido que pasar meses escribiendo una biblioteca de series temporales si hubiese querido hacer algún análisis financiero. Hoy en día, tenemos Pandas, una biblioteca de series temporales muy completa.

Python es comparativamente más fácil de escribir que lenguajes como C++. Por lo tanto, muchas personas en organizaciones financieras que no son tecnólogos están aprendiendo Python, como los operadores y los gerentes de riesgo.

Sin embargo, si bien Python es relativamente intuitivo y rápido de escribir, también es relativamente lento en comparación con otros lenguajes. Aunque es más rápido que lenguajes como R, es mucho más lento que lenguajes como Java y C++. 

Por otro lado, escribir algo en C++ llevará mucho más tiempo.

Cómo están los laboratorios de Refinitiv utilizando los datos de Refinitiv(EN)

Consejos para un código Python más rápido

Entonces, ¿cómo puede acelerar el código Python?

El perfil del código identifica qué partes de nuestro código son cuellos de botella particulares, tanto en términos de tiempo de cálculo como de uso de la memoria. Cuando encuentre un cuello de botella, puede probar varias soluciones.

Si tiene muchos bucles FOR en los cálculos de datos, lo primero que debe intentar es vectorizar su código usando bibliotecas como Pandas (o NumPy, que puede ser más rápido).

También puede paralelizar su código usando bibliotecas de Python, como subprocesos y multiprocesamiento (y hay muchas capas de alto nivel que simplifican este proceso, como los módulos de concurrent.futures).

El subproceso es ideal para operaciones más vinculadas a la E/S, como la lectura desde el disco o la descarga de datos. El multiprocesamiento, por su parte, es más adecuado para tareas computacionalmente pesadas, como los cálculos de riesgo.

Puede elegir ejecutar estas tareas a través de más núcleos informáticos para acelerarlas. Ejecutar en la nube puede escalar el código aún más. También hay otras formas de paralelizar su código, como el uso de Dask, que también le permite trabajar con conjuntos de datos mucho más grandes que la memoria.

Hacer más cálculos en una base de datos

Alternativamente, puede elegir ejecutar sus cálculos de datos muy pesados tanto fuera de Python como dentro de una base de datos SQL. SQLAlchemy puede crear consultas SQL de forma pythonica.

Si está usando datos de ticks de alta frecuencia, entonces una base de datos KDB podría ser la respuesta, aunque necesitará entender q, que es un lenguaje desafiante. La idea es hacer el cálculo dentro de KDB, y luego generar los resultados en Python, a través de qPython.

Obviamente, cuanto más cálculo descargue en KDB (y menos haga en Python), más q necesitará escribir. A diferencia de muchas de las otras soluciones analizadas, KDB no es de código abierto.

El motor de análisis Spark también podría ser usado para el procesamiento de datos, y la biblioteca Koalas le brinda una interfaz similar a Pandas. Para trabajar con series de tiempo en Spark, lo que hace todo más fácil.

Cython y el código C

Reescribir partes específicas del código con Cython también podría ayudar. El lenguaje Cython es un superconjunto de código Python que también le permite llamar a funciones de C y declarar tipos de C. El código C puede ser generado por Cython, que se compila en código máquina en tiempo estático.

Numba es un compilador “just-in-time”, que puede convertir el código Python y NumPy en código máquina mucho más rápido. Al igual que con Cython, a menudo necesitará reescribir su código para que Numba lo acelere. 

PyPy es una alternativa al uso de CPython, y es mucho más rápido. Sin embargo, no es compatible con todas las bibliotecas de Python, aunque recientemente ha empezado a ser compatible con Pandas y NumPy.

Hay muchas formas de acelerar el código Python, pero normalmente requieren que se reescriba parte de su base de código. El truco está en pasar el tiempo suficiente para lograr la velocidad decente deseada. Si termina dedicándole mucho más tiempo, podría haber escrito en un lenguaje como C++ o Java en primer lugar.

>>> Acceda a Nuestra Serie de Webinars de Capacitación Python

Saeed Amen

Saeed Amen

Fundador de Cuemacro

Share