Regular

Esta charla la di 3 veces en el año, pero sólo recientemente pude grabarla. La charla fue originalmente pensada en el marco de la FLISoL Córdoba 2023. Pero por un problema técnico no pudo ser grabada. Luego la volví a dar en el marco del XI CIAI, y en ese evento no se grababan las charlas. Finalmente pude darla la semana pasada en el marco del Mes de la Ciencia 2023, organizada por CEIMAF, en FaMAFyC, y pudimos grabarla y esta vez sí subirla.

En la charla hablo de la librería Hugging Face y explico un poco la tecnología que hay detrás de los modelos de lenguaje que son el motor de tecnologías como ChatGPT. La charla cuenta de slides y un video.

Esta semana se hicieron efectivas mis renuncias a ambos trabajos que estaba realizando. Por un lado, mi trabajo full time en Mercado Libre como investigador. Oportunidad brindada por Rafael Carrascosa a fines del año 2019 y que comencé en plena pandemia en Abril del 2020. Por otra parte hice la renuncia oficial a mi cargo como profesor de la Facultad de Matemáticas, Astronomía, Física y Computación de la Universidad Nacional de Córdoba. En los hechos en realidad hacía 6 meses que estaba de licencia (el máximo período permitido por motivos personales). Con esto termina el trabajo que más tiempo llevo haciendo para una misma entidad (en este caso la UNC), prácticamente 10 años desde que empecé siendo ayudante de alumnos en 2011.

La razón por la cuál renuncié a estos trabajos tiene que ver con el título de este artículo. El primero de Septiembre del 2023 arrancaré un nuevo desafío personal y profesional al aceptar un postdoc en Europa. En la Université Côte d’Azur ubicada en la Riviera Francesa, en la zona de Sophia Antipolis. Y si bien, quizás le estoy dando más jerarquía que lo que realmente es (un postdoc no es un título, es un trabajo en la academia después de todo), lo veo como el primer paso a una nueva vida en el viejo continente, algo que me debo a mi yo mismo desde los 12 años.

En este post haré una recomendación de una herramienta para visualizar datos usando directamente la consola: VisiData es un CLI open source para poder visualizar datos mediante un spreadsheet.

A la hora de leer archivos csv (u otros tipos de archivos de datos si vamos al caso) es muy común usar librerías como pandas, o a veces tener que recurrir a scripts con comandos de bash (como sed, awk, sort, uniq etc.) para hacer summaries y demás. Visidata viene a dar una interfaz ligera por terminal para esto.

Para abrir un csv basta con instalar visidata (pip install visidata) y usar el comando: vd path/to/file.csv (lee otros archivos también, incluso lee directamente archivos comprimidos via gzip).

El spreadsheet es por consola, se puede mover con las flechas de dirección o con h, j, k, l (i.e. Vim style). Se sale con gq (o Ctrl+Q para hacer force quit). Y se puede acceder al help con Ctrl+H. Con Alt+<letra subrayada> se accede al menu superior.

Con [ y ] (seleccionando una columna) se hace un ordenamiento de esa columna (por defecto las columnas son de texto, se las puede convertir en numéricas con # o en flotantes con %).

Seleccionando una columna y haciendo Shift+F se hace una agrupación de dicha columna y un conteo de valores únicos, devolviendo un histograma y un porcentaje.

Con Shift+I se puede hacer un summary de todas las columnas (similar al describe() de un dataframe de Pandas.

Con Shift+S se muestra un listado de todas las hojas (y/o subhojas creadas por comandos como el Shift+F) abiertas, para moverse entre estas. Para volver a la hoja anterior es con Ctrl+^.

Estos son algunos de los casos para que uso visidata. Existen muchas más opciones para hacer incluso cosas más complejas, pero en esos casos ya derivo a pandas directamente. Sin embargo, para un scan rápido, visidata probó ser muy efectivo.

En este post haré un listado de herramientas útiles para Python. Pensado especialmente para Jr. (o incluso Ssrs) que estén por hacer una entrevista en Python. Estos son sin ningún orden en particular, simplemente son algunas de las herramientas que más suelo utilizar:

collections: Una librería con estructuras de datos de colecciones, más allá de diccionarios o listas, super útil para muchas cosas (diccionarios ordenados, diccionarios con valores por defecto, Counter).

itertools: Una de las “desventajas” de Python (por algo como C o Java) es que es “más lento”. Y es verdad, no vas a tener el mismo poder de optimización. Pero a la hora de iterar, itertools ofrece varias cosas mucho más optimizadas que hacerla “a mano” en puro código Python.

operator: Módulo con varias funciones y operadores para trabajar de manera más eficiente (un ejemplo clásico es itemgetter para obtener valores de un diccionario u algún otro tipo de colección).

functools: Higher order programming en Python (funciones parciales, reduce y varias cosas más para lidiar c*on funciones en alto orden).

contextlib: Una librería para trabajar con “Context Managers” (i.e. los bloques with), si no saben lo que es un Context Manager, les recomiendo que lo averigüen.

requests: Una librería simple para trabajar con requests HTTP (muy útil para construir e interactuar con APIs).

iPython: Una consola interactiva para hacer más ameno el REPL de Python. En general viene mucho de la mano de Jupyter

joblib: Para realizar “Embarrassingly parallel for loops”. Si bien Python cuenta con su módulo para hacer multiprocesamiento, en lo personal prefiero joblib por su simpleza.

lxml / BeautifulSoup: Un par de librerías eficientes para el manejo de XML/HMTL (en lo personal prefiero lxml para XML y BeautifulSoup para HMTL, pero son intercambiables en muchos aspectos).

pytest: Una librería excelente y muy completa para la escritura de tests unitarios.

En este post haré un listado de los 10 (+1 mención especial) comandos más útiles, a mi criterio, que BASH tiene para ofrecer. El orden es completamente arbitrario y depende de mis preferencias, no tiene nada que ver con que tan usado o no sea el comando (muchos de los comandos más comunes no están). Empezamos:

Mención especial: awk, no lo uso tanto como antes (suelo directamente usar combinaciones de cut y otros comandos más simples), pero awk es extremadamente poderoso a la hora de manejar flujos de texto.

10. pkill: Un comando muy útil (sobre todo con la opción -f) para matar procesos que se colgaron sin tener que andar buscando el PID.

9. xclip: Copy/Paste desde la línea de comandos. Inspirados de pbcopy/pbpaste de OSX. De echo, tengo los alias: pbcopy=xclip -selection clipboard y pbpaste=xclip -out -selection clipboard.

8. xargs: Convertir inputs desde el STDIN en comandos. Muy útil junto con uno comando que presentaré más adelante en la lista.

7. grep: No creo que este necesite presentación. Quizás uno de los comandos más útiles del entorno linux cuando se trabaja con texto.

6. sed: Otro viejo conocido de linux, para edición de texto en flujo (“stream”). Herramienta excelente para todo tipo de ediciones en pipeline.

5. curl: Si bien hay opciones mucho más modernas, como http (https://httpie.io) hay algo en la simplicidad de curl de mandar directamente al STDOUT cualquier response de HTTP que lo hace super versátil.

4. zcat: Algo que empecé a utilizar, muy a mi pesar, hace relativamente poco. La simplicidad de poder lanzar directamente al STDOUT sin tener que esperar que se descomprima el archivo por completo es maravillosa.

3. jq (https://stedolan.github.io/jq/): Un sed para JSON, muy poderoso y versátil, en especial cuando se usa junto con zcat y head para inspeccionar archivos de “JSONLines” o JSON APIs que provengan de curl/http.

2. rsync: Una “Swiss Army Knife” a la hora de mantener sincronicidad entre directorios (incluso remotos), probablemente mejor definida como una “Double Edge Swiss Army Knife” porque si no aprendés a usarlo bien podés hacer desastre.

1. find: Probablemente el mejor comando. Super versátil, hace de todo (y tiene su learning curve también), pero a la hora de manejar archivos (no sólo buscar sino también manipular) este comando mágico (sumado a xargs) tiene un sinfin de usos.