Este año, en PyCon 2017, dos charlas principales corrieron a cargo de miembros de la comunidad de Python científico: Jake VanderPlas, PhD, habló sobre por qué la comunidad científica ha adoptado —y debería adoptar— Python; y Kathryn Huff, PhD, explicó cómo puede ayudar la comunidad de Python a las comunidades científicas y por qué debería hacerlo. Juntas, ambas ponencias ofrecen una visión coherente y completa de cómo la investigación científica y la programación en Python se potencian mutuamente, por qué a muchos científicos en activo hoy les conviene adoptar Python y de qué manera la comunidad de Python puede impulsar eficazmente la investigación.

La eficacia inesperada de Python en la computación científica
Jake VanderPlas es astrónomo en el eScience Institute de la Universidad de Washington (Seattle). Además, es activo en la comunidad de Python científico y ha contribuido a SciPy, scikit-learn y altair, entre otros paquetes.
Mucha gente imagina a los astrónomos al pie de telescopios gigantes mirando por el ocular, pero Jake nos aseguró que la mayoría nunca ha mirado por un telescopio en su vida profesional: dedican la mayor parte del tiempo de captación de datos a hacer consultas a bases de datos. Y eso es solo la punta del iceberg en cuanto a las competencias computacionales que requieren por las tareas que afrontan. Jake compartió varios ejemplos reveladores. Fíjate en esta visualización del sistema exoplanetario TRAPPIST-1:

Puede parecer una imagen fotorrealista, pero en realidad es una interpretación artística: no son los datos originales. La existencia del planeta se infirió por el oscurecimiento de una estrella y mediante modelado estadístico del sistema a partir de los siguientes datos y otros posteriores (en imagen, datos de Ethan Kruse):

¿Cómo se hizo toda esa inferencia y análisis estadístico? En Python, por supuesto. Y mediante un «modelado estadístico del sistema increíblemente intrincado». Además, encontrar este tipo de sistemas, nos dijo Jake, «se reduce a escribir código estadístico dentro de una canalización de análisis de datos compleja».
Este es uno de varios proyectos científicos (en astronomía) que Jake mostró y que usan Python en su canalización de procesamiento y análisis de datos. Importa señalar que no solo están escritos en un lenguaje de código abierto: su código está en GitHub; por ejemplo, Kepler y JWST. Este último intenta detectar gases en atmósferas de otros planetas para identificar su composición química y buscar firmas de vida. Estos proyectos están en Python, alojados en GitHub y usan Jupyter Notebooks, entre otras herramientas.
¿Podría ser anecdótico, es decir, unos pocos proyectos en Python que son la excepción y no la norma? En astronomía, no. Jake analizó publicaciones y demostró que las que usan Python han aumentado de forma sostenida:

¡Ese hockey stick de Python! Ya hemos visto que cada vez más científicos usan Python, pero ¿por qué lo usan?
4 motivos para usar Python en computación científica
Jake preguntó: «¿Por qué es Python una herramienta tan eficaz en ciencia?»
1. Interoperabilidad con otros lenguajes
Python como pegamento: históricamente, muchos científicos en activo han tenido canalizaciones de datos engorrosas y complicadas para ir del experimento y/o los datos a resultados comunicables: consultas a bases de datos, comandos en terminal, software especializado o propietario y, al final, herramientas de visualización. Jake VanderPlas citó a Dave Beazley porque lo resume muy bien:
«Los científicos... trabajan con una gran variedad de sistemas, desde códigos de simulación, paquetes de análisis de datos, bases de datos, herramientas de visualización y software casero; cada uno con diferentes interfaces y formatos. Como resultado, un científico puede pasar mucho tiempo intentando que todos esos componentes funcionen juntos de algún modo...»
Y Python puede interoperar con la mayoría de herramientas que puedas necesitar en investigación: conecta, hace de pegamento. Como dijo Jake, Python se usa para «unir el batiburrillo de herramientas con las que trabaja la gente; la sintaxis de alto nivel envuelve librerías de C/Fortran de bajo nivel».
2. «Pilas incluidas» + módulos de terceros
Otra razón por la que tantos investigadores han abrazado Python (y por la que quienes no lo han hecho «deberían») es que
- incluye muchísimas utilidades de serie y
- para lo que no incluye, existe un enorme ecosistema de Python científico (
SciPy) disponible como módulos de terceros.
Con las «pilas incluidas» puedes hacer web scraping, lanzar servidores web, trabajar con sistemas de ficheros y bases de datos, leer JSON y mucho más.
Y los módulos de terceros son donde empieza lo realmente interesante. Algunos ejemplos (no exhaustivos):
- NumPy para computación con arrays;
- IPython y Jupyter como entorno interactivo, además de escribir documentos científicos y comunicar y colaborar en resultados;
- Numba y Dask para escalado y computación distribuida;
- Pandas para DataFrames;
- Matplotlib y Bokeh (por ejemplo) para visualización de datos (hay todo un ecosistema de librerías de dataviz en Python);
- Scikit-learn para machine learning;
- NetworkX para crear, manipular y estudiar redes complejas;
- Scikit-image para procesamiento de imagen;
- PyMC para cadenas de Markov Monte Carlo;
- La lista sigue.
Como dijo Jake, «si tienes un problema que resolver, lo más probable es que exista una librería que te ayude, y seguramente esté en GitHub».

3. Simplicidad y naturaleza dinámica
Python es relativamente fácil de escribir, sobre todo frente a lenguajes como C. Como dijo Jake, «en Python, especialmente si vienes de C, escribes lo que quieres que pase y pasa; es casi como escribir pseudocódigo ejecutable».
También citó a Perry Greenfield: «Python es un lenguaje muy potente para desarrolladores, pero también accesible para astrónomos. Conseguir que esos dos perfiles usen las mismas herramientas aporta un beneficio enorme que no siempre se nota o se menciona».
Gracias a herramientas como IPython y los Jupyter Notebooks, existe una oportunidad fantástica para programar de forma dinámica y hacer análisis exploratorios e iterativos sobre la marcha. Esto reduce la barrera de entrada porque la programación científica es no lineal y exploratoria. Jake señaló que algunos pueden quejarse de que estas herramientas son lentas, pero en investigación importa la velocidad de desarrollo, no la velocidad de ejecución, lo que las hace ideales.
4. Un espíritu abierto que encaja con la ciencia
El software de código abierto tiene un espíritu que encaja con la apertura que exige la investigación científica (de hecho, quizá más que buena parte de la propia investigación). Volveremos sobre ello al hablar de la charla de Katy Huff, pero la ciencia no sucede solo en los artículos publicados: sucede en el resultado y en las instrucciones/protocolos y la capacidad de reproducirlo; exactamente lo que busca el desarrollo de software abierto. Jake citó a Buckheit y Donoho (1995, parafraseando a Jon Claerbout):
«Un artículo sobre un resultado computacional es publicidad, no erudición. La auténtica erudición es todo el entorno de software, código y datos que produjeron el resultado». — Buckheit y Donoho, 1995
Lo que aporta el software abierto y el espíritu de la comunidad de Python (científica y más allá) es un marco que puede ayudarnos a salir de la crisis de reproducibilidad: «resolver la reproducibilidad va de ciencia abierta», y la naturaleza colaborativa, con revisión por pares y publicable en GitHub de la investigación científica en el ecosistema de Python es clave para esa apertura. Si quiero ver cómo se detectaron en 2016 las ondas gravitacionales (predichas por Einstein), solo tengo que ir al repositorio de LIGO aquí. O, si eres una de las muchas personas en astronomía que usan Astropy en su investigación, puedes encontrar el código y la comunidad que lo impulsa aquí; su apertura es consecuencia directa de una comunidad que toma como modelo el software y la ciencia abiertos de la comunidad de Python. Mira esta tabla con lo que, según Jake (adaptado de Perry Greenfield), la comunidad astronómica ha aprendido de la comunidad de Python:

Hazlo por la ciencia
«He venido a canalizar vuestro poder para mis propios fines», dijo la Dra. Kathryn Huff a la comunidad de PyCon, para luego exponer un argumento contundente sobre cómo y por qué la comunidad de programación en Python puede ayudar a la ciencia a salvar el mundo. Su charla explicó en detalle y con pasión por qué el desarrollo de software abierto, en general, y Python, en particular, han resultado tan eficaces en la computación científica y la investigación en su conjunto. Fue más allá y mostró multitud de ámbitos en los que la comunidad de desarrollo en Python puede poner sus habilidades al servicio de la comunidad científica y del planeta. Si crees que el agua, la salud o la energía son retos graves para la humanidad, Kathryn tenía proyectos y repositorios en GitHub con issues abiertas en los que puedes entrar a colaborar ya mismo. Compartió decenas de ejemplos de proyectos y paquetes abiertos con tareas a las que puedes contribuir.
Kathryn (Katy) es ingeniera nuclear, colabora desde hace años con la comunidad SciPy, participa en el Journal of Open Source Software y dedica gran parte de su tiempo a The Hacker Within y a Software y Data Carpentry, que ayudan a los científicos a aprovechar mejor los ordenadores y hacer descubrimientos, mejorando la reproducibilidad y facilitando su trabajo computacional.
La misión de Katy es mejorar la forma en que se produce la energía nuclear; ¿y cuál es su herramienta de referencia? ¡Python! Antes de entrar en las múltiples formas en que la comunidad de Python puede ayudar a la investigación, Katy explicó por qué esto es necesario. Citó a R. K. Merton (1945), que describía la ciencia como una práctica que requiere rigor, estructura y escrutinio comunitario (una buena definición de escepticismo organizado); todas son cualidades indiscutibles de la comunidad de código abierto de Python.

Katy remarcó su importancia al enumerar los principios básicos de la ciencia y dejó claro que el desarrollo de software abierto es la comunidad que mejor se ha ceñido a ellos desde la era pitagórica (siglo VI a. C.). Estos principios son:
- revisión por pares
- escepticismo
- transparencia
- atribución
- responsabilidad
- colaboración
- impacto
Los ordenadores «deberían» ayudar a los científicos a hacer lo siguiente:

Entonces, ¿cuál es el reto para conseguir que más científicos usen software abierto como Python y que los ordenadores realmente les ayuden?
- Los científicos no están formados para usar los ordenadores de forma eficaz.
De ahí el llamamiento de Katy a la comunidad de Python:
«Me gustaría contar contigo».
Y esta movilización es otra razón para que los investigadores en activo usen Python: hay una comunidad enorme de programadores de código abierto a su disposición. Katy, además, trabaja en la formación de científicos para que utilicen mejor los ordenadores en su trabajo. Hay varios programas. Te animamos a consultar Software Carpentry y Data Carpentry para ver si pueden ayudar a tu grupo, departamento o universidad (respuesta: si haces computación, probablemente sí).
¿Cómo sugiere la Dra. Katy Huff que los programadores pueden ayudar? En cuatro pasos sencillos:
- Siente curiosidad;
- Elige un proyecto;
- Contribuye a la ciencia;
- Salva el mundo.
¿Por qué Python para investigación?
- El ecosistema de Python reúne un conjunto maduro —y en evolución constante— de herramientas computacionales para científicos en activo.
- Cada vez más científicos se pasan a Python por su
- interoperabilidad con otros lenguajes;
- «pilas incluidas» y módulos de terceros para casi todo lo que quieras hacer;
- simplicidad y naturaleza dinámica;
- espíritu abierto que encaja con la ciencia.
- La comunidad de Python científico crece y las librerías se desarrollan continuamente; es una comunidad abierta.
- La comunidad de desarrollo de código abierto se ciñe a los principios básicos de la investigación científica más que ninguna otra; estos principios son:
- revisión por pares
- escepticismo
- transparencia
- atribución
- responsabilidad
- colaboración
- impacto
- Existe una comunidad más amplia de programadores de Python que no son científicos y quieren contribuir al impacto de Python en la ciencia y en los retos que les importan; parafraseando levemente a Perry Greenfield,
«Python es un lenguaje muy potente para desarrolladores, pero también accesible para [científicos]. Conseguir que esos dos perfiles usen las mismas herramientas aporta un beneficio enorme que no siempre se nota o se menciona».
Si tienes ideas, comentarios o reflexiones, escríbeme en Twitter: @hugobowne.


