12

馃悕 Notas del Curso de Entorno de Trabajo para Ciencia de Datos

Introducci贸n a las notebooks.

驴En qu茅 lugares programar para ciencia de datos?

  • Aprenderemos sobre Jupyter Notebooks, herramientas elementales, ambientes virtuales con Conda 馃悕.
  • Podemos programar en varios lugares: Navegador, de manera local, en un servidor, en el celular 馃く.
  • Puedes hacer esto en distintos sistemas operativos, en cualquiera est谩 bien, pero por lo general se prefiere en un OS basado en Linux o Unix (c贸mo Ubunto o MacOS). Si prefieres Windows, puedes usar WSL 馃槃.
  • Google Colab, Deepnote, VSCode, Jupyter Notebooks, etc鈥 馃. Todas estas herramientas comparten una cosa: los notebooks, que hacen el proceso m谩s din谩mico!.
  • En 2001, el F铆sico colombiano Fernando P茅rez comenz贸 a trabajar en el desarrollo IPython 馃憖. De aqu铆 sigui贸 Jupyter Notebook 馃棐锔. 隆Es una herramienta fundamental! Se pueden entender como reportes ejectuables.
  • Notebooks vs Scripts:
    • Ambos son 煤tiles.
    • Tienen diferencias en organizaci贸n: En un script se ve el c贸digo sin interrupciones.
    • Experimentaci贸n y prototipado.
    • Tienen objetivo diferente!.

Google Colab: Primeros pasos.

  • Es una herramienta basada en la nube que te permite trabajar en notebooks, y se guardan en tu cuenta de Google Drive 馃槂.

  • Nube vs local: Ambas son 煤tiles, pero se diferencian en la configuraci贸n de entornos, ya que en la nube ya est谩n precargadas, y de local tienes que configurarlo manualmente. Tambi茅n es diferente el tiempo de ejecuci贸n y la escalabilidad: la nube tiene m谩s poder porque puedes rentarlo!. 馃捀

  • Google Colab: Servicio en la nube basado en Jupyter Notebooks, no requiere configuraci贸n y tiene un trabajo a nivel de archivo (el notebook es la base). Tiene uso de gratuito de GPUs y TPUs para correr modelos grandes. 鈽侊笍

  • Puedes acceder a Google Colab desde tu drive o desde el navegador.

  • Para aprender Markdown.

    Markdown Guide

  • Las variables son persistentes (se conservan) entre celdas de c贸digo!. 馃敟

  • Para llamar a la l铆nea de comandos, debemos usar primero un signo de admiraci贸n ! y luego un comando v谩lido, por ejemplo !pwd o !pip install session-info.

Google Colab: Ciencia de datos.

Google Colab incluye varias herramientas:

  • Podemos subir archivos a Colab para trabajar con ellos (tambi茅n tienen datos de muestra) 馃敘. D谩ndole click podemos previsualizar e incluso filtrar la tabla que hayamos subido.
  • Podemos montar nuestro Google Drive en nuestro Notebook, con lo que podremos trabajar con datos que est茅n en nuestro Drive. 馃 Es lo m谩s recomendable ya que los archivos no se eliminan al terminar la sesi贸n.
  • Ya incluye multiples librer铆as (las mas usadas) como Matplotlib, Numpu, Pandas, Scipy, Seaborn, etc. 馃挮
  • Google Colaboratory tiene code snipets, para que puedas utilizarlo y agilizar tu trabajo 馃く.
  • Para abrir la paleta de comandos usamos Ctrl + shift + p. Es 煤til conocer los shortcuts m谩s 煤tiles para ser m谩s 谩gil.

Utilizar Deepnote.

  • Deepnote es un servicio en la nube basado en Jupyter Notebooks. No requiere configuraci贸n y tiene un trabajo a nivel de proyecto. Tiene colaboraci贸n en tiempo real, integraci贸n con m煤ltiples Apps y tiene acceso a una terminal o l铆nea de comandos integrada 馃槑.
  • Tiene tambi茅n variables de entorno y permite publicar proyectos (para construir portafolio). 馃帀
  • Podemos correr y agregar lo mismo que en Colab, pero adem谩s podemos subir archivos que se quedan siempre en el proyecto.
  • Permite previsualizar los archivos CSV de manera muy bonita 馃槃.
  • Parte de lo poderoso de Deepnote es que podemos integrar muchas cosas 馃敟.
  • No solo podemos agregar celdas de c贸digo y de texto, si no que en la opci贸n de Bloque vienen muchos m谩s tipos, como input, chart, dataframe sql, etc 馃く. Puede crear gr谩ficas de manera autom谩tica sin c贸digo!
  • Para acceder a los atajos de teclado usamos Ctrl + i.
  • Tambi茅n es importante resaltar que tenemos una terminal integrada 馃.

Configuraci贸n de VSCode.

Instalar VSCode.

  • Editores de c贸digo: Enfocados a multiples lenguajes. Se pueden potencial con extensiones o plugins. Por lo general son gratuitos. Mejor este 馃槃. Tenemos Pycharm VSCode, Atom, etc.
  • IDE (entornos de desarrollo integrado): Enfocado a un solo lenguaje y seguimiento a un solo proyecto. Por lo general son de pago 馃捀

Visual Studio Code - Code Editing. Redefined

Instalar WSL: Usa Linux dentro de Windows.

Agregar extensiones para VSCode.

  • Hay muchas extensiones para VSCode que hacen trabajar con datos m谩s c贸modo. 鈽侊笍
  • Se pueden instalar todas las extensiones directamente desde VSCode 馃槃.
  • Es recomendable activar la sincronizaci贸n autom谩tica en la nube, para que siempre puedas tener tu entorno de trabajo en cualquier lugar. Lo puedes contectar con tu cuenta de GitHub 馃
  • Hay extension para Python que incluye muchas funcionalidades 馃敟.
  • MagicPython sirve mucho para darle formato a Python y que sea m谩s legible.
  • Las extensiones de Icon sirven para diferenciar tipos de archivos. 馃搧
  • Rainbow Brackets sirve para cambiar los colores de los par茅ntesis y no tener errores 馃寛.
  • Remote Development te descarga m煤ltiples extensiones que te sirven trabajar de manera remota. 馃寧

Uso de VSCode notebooks.

  • Esto es un nuevo estilo de Notebook, integrado dentro de VSCode 馃く.
  • Puedes abrir VSCode en una carpeta espec铆fica para ver todos los archivos dentro (y solo esos). Menos distracci贸n que tener todo abierto con WSL. 馃槅
  • Podemos correr los archivos .py directamente en la terminal dando click en 鈻讹笍.
  • Con las extensiones que instalamos, podemos darle formato de manera autom谩tica a nuestro c贸digo 馃悕.
  • Dentro de los Jupyter Notebook en VSCode podemos usar todas estas extensiones 馃挄. La extensi贸n de los Notebooks es .ipynb. Podemos exportar los notebooks a texto plano!.

Entorno de desarrollo con Anaconda.

驴Qu茅 son los ambientes virtuales?

  • En la vida real, no vas a trabajar en un solo trabajo, si no en varios, y cada uno tendr谩 diferentes dependencias y requerimientos 馃.
  • Cuando se actualizan o se cambia la configuraci贸n de las dependencias de un ambiente que tiene varios proyectos asociados puede haber errores 馃洃.
  • Para poder separar proyectos, lo que hacemos es crear ambientes virtuales diferentes para cada proyecto. 馃 Entonces la configuraci贸n y actualizaciones son para cada proyecto.
  • Ambiente virtual: Proyecto que puede tener sus propias dependencias, independientemente de las dependencias que tengan los dem谩s proyectos (Scott Robinson y la gente de Real Python).

Instalar Conda a trav茅s de la terminal.

  • Conda: Programa dise帽ado para gesti贸n de paquetes, dependencias y entorno para cualquier lenguaje: Python, R, Ruby, Lua, Scala, Java, JavaScript, etc. Adem谩s, es multiplataforma. 馃枼锔

  • Para instalar conda debes instalar anaconda (versi贸n completa, metapaquete de ciencia de datos) o miniconda (versi贸n m铆nima). 馃悕

  • Para instalar conda:

    Anaconda | Individual Edition

    O bien hacer wget -0 anaconda.sh https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh.

    Para instalar hacemos bash anaconda.sh. 馃悕

  • Para abrir notebooks usamos jupyter-notebooko bien jupyterlab. Los notebooks que creas ah铆 tambi茅n los puedes abrir en VSCode.

  • Para abrir VSCode en la carpeta en el que te encuentras, usas code ..

Conda: crear y actualizar ambientes.

  • Conda tiene por defecto el ambiente base 馃槃
  • conda env list para ver todos tus ambientes existentes.
  • conda create --name <nombre de="" ambiente=""><paquete1>= <version1><paquete2>=</paquete2></version1></paquete1></nombre> para crear un ambiente nuevo. 馃憖 Si no se especifica la versi贸n, se toma la mas reciente.
  • conda activate para activar un ambiente.
  • conda deactivate para desactivar el ambiente actual.
  • conda list muestra todos los paquetes (y sus versiones) en tu ambiente. Para filtrar resultados (en ambientes grandes) conda list pandas.
  • conda update <paquete></paquete>para actualizar la versi贸n mas reciente de un paquete.
  • conda install <paquete>=</paquete> para poner un paquete en una versi贸n espec铆fica.

Conda: Abrir VSCode Notebooks con tu ambiente creado.

Conda: Eliminar ambientes y librer铆as.

  • conda remove <paquete></paquete>para desinstalar un paquete en particular. 馃棡锔
  • conda env remove para eliminar un ambiente completo 馃憖.
  • No se puede eliminar el ambiente en el que te encuentras 馃. Necesitas desactivarlo primero.

Conda: Comandos avanzados.

  • Para buscar paquetes:

  • Podemos encontrar alg煤n paquete que necesitemos en un channel como conda-forge. 馃槸
  • conda install --channel <nombre del="" canal=""><paquete></paquete></nombre>Para instalar un paquete especificando el channel de donde buscarlo.
  • conda list --revision para listar las revisiones (modificaciones) de tu ambiente; con esto puedes volver en el tiempo a un estado pasado de tu ambiente virtual.
  • conda install --revision <falg></falg>para regresar a un estado pasado de tu ambiente. 馃尣
  • conda env export --no-build Para compartir nuestro ambiente de conda y que otras personas puedan tener exactamente el mismo ambiente que t煤.
  • Con conda env export --from-history --file <archivo>.yml</archivo> para compartir 煤nicamente los paquetes que hayamos especificado expl铆citamente. 馃攳. Esta es la mejor manera!
  • Para instalar un ambiente del cual recibimos un archivo .yml hacemos conda env create --file <archivo>.yml</archivo> 馃く

Acelerar la creaci贸n de ambientes virtuales con Mamba.

  • Mamba es una re-implementaci贸n de Conda (en C++) para la creaci贸n de ambientes virtuales. 馃 Lo hace en paralelo, e incluye multiples optimizaciones que lo hacen m谩s r谩pido.
  • Mamba funciona de la misma manera que conda en la l铆nea de comandos. 馃
  • conda install --channel conda-forge mamba para instalarlo.
  • Anaconda es muy tardado en multiples ocasiones (ya que es muy pesado). 馃槩

Bonus: Divide y vencer谩s.

  • En proyectos grandes, es complicado mantener un ambiente virtual. 馃樀
  • Divide y vencer谩s es partir un problema dif铆cil en partes peque帽as. Cada paquete se desarrolla a su propio ritmo (no siempre preocup谩ndose de la compatibilidad con otros m贸dulos). 馃く
  • Hay tres tipos de paquetes: Externos, Modelo y de Comunicaci贸n. Entonces podemos crear en multiples ambientes en un solo proyecto. 馃憖 Para esto, creamos una carpeta llamada envs y creamos tres documentos: external.yml, model.yml y comunicacion.yml.
  • Snakemake es un paquete que implementa muy bien este concepto. Es un motor de workflows 馃憖. Cada paso lo ejecuta con un ambiente espec铆fico.

Snakemake - Snakemake 6.8.0 documentation

Un paquete que puede ser 煤til si tu ambiente est谩 muy pesado es usar Mamba (puras serpientes jajajaja馃ぃ)

Escribe tu comentario
+ 2
1
23053Puntos

Thanks! Muy buen aporte ^^