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-notebook
o 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.
- 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🤣)
Gracias por el aporte, bastante ütil.
Buen aporte.
Thanks! Muy buen aporte ^^