miércoles, 20 de septiembre de 2023

Conceptos básicos de Jupyter Notebooks

 


https://colab.research.google.com/github/efviodo/idatha-data-science-course/blob/master/notebooks/01%20-%20DS%20-%20Conceptos%20Basicos%20Jupyter%20Notebooks%20-%20R.ipynb




## Objetivos


* Entender qué es y para que sirve

* Comprender conceptos y funcionalidades básicas

* Familiarizarse con la herramienta



<a id='Indice'></a>

## Índice

[Inicio ▲](#Indice)


1. [¿Qué es Jupyter Notebook?](#Que-Es-Jupyter-Notebooks)

1. [Jupyter Notebook App](#Jupyter-Notebook-App)

    1. [Kernel](#Kernel)

    1. [Dashboard](#Dashboard)

1. [Instalación](#Instalacion)

1. [Ejecución](#Ejecucion)

1. [¿Cómo construír un Notebook?](#Como-construir-notebook)

    1. [Celdas](#Celdas)

        1. [¿Qué es una celda?](#Que-es-una-celda)

        1. [¿Cómo se ejecuta?](#Como-se-ejecuta)

        1. [¿Cómo se edita?](#Como-se-edita)

    1. [Ejemplos](#Ejemplos)

        1. [Markdown](#Markdown)

        1. [Code](#Code)

1. [Comándos Mágicos](#Comandos-Magicos)

1. [Shortcuts](#Shortcuts)

1. [Mejores Prácticas](#Mejores-Practicas)

1. [Bibliografia](#Bibliografia)








Conceptos Básicos de Jupyter Notebooks


Objetivos


  • Entender qué es y para que sirve
  • Comprender conceptos y funcionalidades básicas
  • Familiarizarse con la herramienta

¿Qué es Jupyter Notebooks?

Inicio ▲

Jupyter Notebook (o más comunmente un "notebook" a secas), es un documento producido por la aplicación Jupyter Notebook App, que contiene tanto código de computadora (por ejemplo, Python o R) como elementos de texto enriquecido (párrafos, ecuaciones, figuras, enlaces, etc.). Es tanto un documento legible por un ser humano, pudiendo contener la descripción de un análisis de datos y sus resultados (figuras, tablas, etc.), como ejecutable por una computadora, pudiendo contener snippets de código que ejecutan por ejemplo un análisis de datos.

Debido a esta capacidad de mezclar, código y elementos de texto, este tipo de documentos son ideales para colocar el trabajo de un data scientist (científico de datos), reuniendo el análisis y los resultados en un mismo lugar, a la vez que permite ser ejecutado en tiempo real.

Fuente: http://ipython.org/notebook.html#notebook-documents


Jupyter Notebook App

Inicio ▲

Jupyter Notebook App, es una aplicación cliente-servidor que permite editar y ejecutar notebooks a través de un navegador web. La aplicación se puede instalar y ejecutar de forma local en una PC y no requiere acceso a Internet. A su vez se puede instalar en un servidor web remoto para luego accederla a través de Internet.

Sus dos componentes principales son: (i) kernels y (ii) dashboard.

Kernel

Un kernel es un "motor" computacional, que ejecuta el código contenido dentro del notebook. Cuando se abre un notebook, el kernel asociado se ejecuta de forma automática. Luego cuando se ejecuta un notebook (ya sea celda-por-celda o desde el menú Cell -> Run All, el kernel ejecuta los cálculos computacionales y produce los resultados.

Por defecto la aplicación trae un kernel para el lenguaje Python, pero pueden agregarse kernels para otros lenguajes de programación como R.

NOTA: En el caso de este taller, cuando creamos un ambiente virtual para R utilizando Anaconda, automáticamente se agrega la opción R a los Kernels disponibles.

Dashboard

El Dashboard de la aplicación, es la componente gráfica la cual se visualiza cuando uno ejecuta Jupyter Notebook App. Permite gestionar notebooks (agregar, crear, editar, etc), configurar y gestionar los Kernels disponibles (seleccionar, apagar, reiniciar, etc), entre otras opciones.


Instalación

Inicio ▲

Ya que utilizamos Anaconda para la gestión y despliegue del ambiente, no es necesario instalar Jupyter Notebooks (viene dentro de la distribución). Por cualquier duda, ver el Instructivo de Instalacion de Herramientas [3] en la sección de Bibliografía y referencias.


Ejecución

Inicio ▲

Ahora que conocemos un poco más sobre la herramienta con la que se trabajará en este taller, es tiempo de aprender como utilizarla.

Para ejecutar la aplicación de jupyter, abrimos una terminal, cargamos el ambiente virtual del taller con el comando conda activate y por último ejecutamos el comando jupyter notebook. También se puede hacer lo mismo desde la aplicación Anaconda Navigator, por más información ver el Instructivo de Instalación de Herramientas [3].

$ conda activate taller_cdatos
$ jupyter notebook

El comando jupyter notebook se encarga de ejecutar la aplicación y abrir tu navegador web por defecto, con una pestaña en la siguiente dirección http://localhost:8888.

figura1

Imagen extraída de DataCamp

En la pestaña "Files" se encuentran todos los documentos referentes a tus "notebooks", mientras que en la pestaña "Running" encontrarás inormación para el seguimiento de todos los procesos que están en ejecución. Por último, desde la pestaña "Cluster", podrás controlar un cluster de kernerls, en caso que necesites utilizar paralelismo para tus notebooks (en este curso no abordaremos esto).

Intentemos crear un nuevo Notebook para empezar a trabajar!

Para crear un nuevo Notebook, basta con apretar el botón "New" en la pestaña "Files". Una vez que hagas click, un menú se deplegará para que selecciones que tipo de archivo vas a crear: Tex File, Folder, Terminar, Python2, Python3, R, etc. Para empezar vamos a seleccionar R.

NOTA: Las opciones disponibles al momento de crear un Notebook, dependerán de los kernel instalados en nuestro ambiente. De esta forma, en caso de tener instalado solamente Python 2, contaremos solamente con dicha opción. De igual forma, si hemos instalado R, vamos a contar con esta opción también. Anteriormente, cuando creamos un ambiente virtual con el comando conda create, la propia herramienta Anaconda, se encargó de instalar todas las librerias de R y sus dependencias por nosotros, incluso para que contemos con un kernel de R desde Jupyter Notebook.

Una vez que hayas creado tu primer "notebook", la aplicación te abrirá un archivo en blanco. Allí encontrarás opciones muy similares a las de un editor de texto común y corriente.

En la siguiente sección verás cuales son las principales herramientas de Jupyter Notebook y como construír tu primer notebook desde cero. Pero antes de pasar a la siguiente seccion, prueba de navegar por los diferentes menús y las opciones disponibles, para familiarizarte un poco más con la herramienta.


¿Cómo construír un Notebook?

Inicio ▲

Celdas

¿Qué es una celda?

Un notebook se compone por un conjunto de celdas o "cells" en inglés. Cada celda es una unidad independiente, que puede ser editada y ejecutada.

Existen diferentes tipos de celdas:

  • Code : Contienen código que puede ser ejecutado, utilizando el Kernel seleccionado (ej. Python, R).
  • Markdown: Contienen información descriptiva como textos enriquecidos (descripciones, tablas, figuras).
  • Raw NBConvert: Tipo de celda utilizado cuando se quiere que Jupyter no interprete el contenido de la misma y lo muestre tal cual tu lo escribiste.
  • Heading: Antiguamente se utilizaba para crear títulos, actualmente se utiliza una celda Markdown para lo mismo.

Cuando agregamos una nueva celda, por defecto se creará de tipo Code. Sin embargo puedes cambiar en cualquier momento el tipo de la misma simplemente seleccionando la celda y luego cambiando el tipo desde el menú que aparece en la parte superior del editor y eigiendo cualquier otro tipo.

figure2

Repasando lo que hemos visto hasta ahora, simplemente con estos cuatro tipos de celdas podemos mostrar:

  • Código
  • Gráficas generadas a partir de código
  • Texto enriquecido
  • Expresiones matemáticas: ex=i=01i!xi
  • Dibujos y rich media (HTML, LaTeX, PNG, SVG, etc.)

¿Cómo se ejecuta?

Cuando se abre por primera vez un Notebook, Juypyter carga la información de cada una de las celdas pero NO las ejecuta en su totalidad. Solamente ejecuta las celdas de tipo Markdown. Para ejecutar todas las celdas (incluyendo las de tipo Code), debemos ejecutarlas utilizando alguna de las varias formas que Jupyter pone a nuestra disposición:

  • Cell -> Run Cells
  • Cell -> Run All
  • Seleccionar la celda y Ctrl+Enter (shortcut)

¿Cómo se edita?

Para editar el contenido de una celda, basta con seleccionar la celda y cambiar al Modo edición. Para esto basta con hacer doble click en la selda que queremos editar.


Ejemplos

Markdown

Esta es una celda de tipo Markdown; la misma permite escribir texto con cierto formato, por ejemplo títulos, listas, tablas. Probemos de insertar diferentes objetos, para investigar que tipo de cosas podemos hacer con ella:

→ Diferentes tipos de fuentes: Negrita, Italica, Tacchado

→ Diferentes tamaños de letra:

Título 1

Título 2

Título 3

Título 4

→ Lista de elementos

  • Item 1
  • Item 2
    • Item 2.1
      • Item 2.2
      • Item 2.3

→ Lista ordenada

1. Elemento 1
2. Elemento 2
3. Elemento 3

→ Tablas

ClaseDíaFecha
1Lunes22/0/2018
2Martes23/0/2018
3Miércoles24/0/2018
4Viernes26/0/2018

→ Imagenes

→ HTML

Por más información sobre lenguae Markdown ver https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet


Code


[ ]
# Esto es una celda de código R. Como puedes ver, es posible editar el contenido de la misma y ejecutarla para ver
# su resultado. El resultado se muestra debajo de la celda una vez que la misma fue ejecutada. En caso que el 
# código no produzca ningún resultado, no se mostrará nada.
# Prueba de editar el contenido de la celda para ver como cambia el resultado!

print("Hola mundo!");
[1] "Hola mundo!!!!"

Vamos a ver un ejemplo más complejo, una celda con una función en R que devuelve la suma de los cuadrados de sus argumentos.


[ ]
# Suma de cuadrados

sumOfSquares <- function(x,y) {
  x^2 + y^2
}

x = sumOfSquares(1,2);

print(x)
[1] 5

Comándos Mágicos

Inicio ▲

Como toda herramienta, existe una serie de comandos o funciones esenciales para trabajar y que te harán la vida más fácil. En particular, con Jupyter, harán que tus notebooks sean más intercativos e intuitivos.

Para ver la lista de "comandos mágicos" disponibles en tu kernel, siplemente crea una celda de tipo Code con el siguiente comando y ejecutala para ver el resultado.


[ ]
# En R
help()

# En Python 
# %lsmagic

Para conocer un poco más sobre cualquier función mágica simplemente utilziar el símbolo ? seguido de la función como en el siguiente ejemplo:


[ ]
# Ayuda comando en R
help(lapply)

# Ayuda comando en Python
# ?%cd

En otro tipo de Kernels como el kernel IPython para el lenguaje Python, existen comandos análogos como el lsmagic (documentación aquí).

% lsmagic

Otra cosa que puede resultarte muy útil es conocer como se hace para ejecutar un comando cualquiera, que bien podrías querer ejecutar como si estuviera en una terminal. Un buen ejemplo de esto es para copiar archivos de un directorio a otro, instalar librerias de sistema, etc. Para ello, dependiendo del kernel tenemos diferentes opciones. Con R, utiliazremos la función system del propio lenguaje. Por otro lado si quisieramos hacer lo mismo usando un kernel de Python se utiliza el símbolo ! seguido del comando que queremos ejecutar.


[ ]
# ---> Kernel R
# Mostrar documentos en mi directorio con
system('ls', intern=TRUE)

# ---> Kernel Python
# Listar paquetes Python instalados 
# !pip --version

[ ]
# Para concoer más sobre la función system de R
help(system)

Shortcuts

Modo Comando vs. modo Edición

Antes de ver los principales atajos o "shortcuts", tienes que tener presente que Jupyter Notebooks tiene dos modos de entrada diferentes:

1. Modo comando: Es el modo por defecto, se indica generalmente a traves de la celda seleccionada, la cual se recuadra con un marco de color azul. En este modo, el teclado puede utilizarse para disparar acciones a nivel del Notebook como agregar celdas, ejecutar celdas, etc.

2. Modo edición: Es el modo que se activa cuando selecionas una celda para editarla. Se indica remarcando la celda seleccionada con un borde de color verde.

Modo comando

shift + enter ejecuta la celda, selecciona celda de abajo

ctrl + enter ejecuta la celda

option + enter ejecuta la celda, inserta debajo

A inserta celda arriba

B inserta celda debajo

C copiar celda

V pegar celda

D,D borrar celda

shift + M fusionar contenido de celdas seleccionadas, o celda actual con la de abajo si se selecciona una sola celda

I,I stop kernel

0, 0 restart kernel

Y cambia tipo de celda a Code

M cambia tipo de celda a Markdown

Modo edición

cmd + / toggle lineas de comentarios

ctrl + shift + - dividir celda


Mejores Prácticas

Inicio ▲

A continuación listo una serie de buenas prácticas que te ayudarán a crear notebooks más prolijos e interactivos.

Importación de dependencias en la primera celda

Realiza el "import" de todas tus dependencias en la primera celda del notebook. Esto ayuda la legibilidad, ya que antes de meterse con funciones y análisis de datos, tienes claro cuales son las dependencias que el notebook utiliza. A su vez, cuando re-inicias el notebook se cargan nuevamente todas las dependencias. Por último, si no quieres re-ejecutar todas las celdas de nuevo, tienes todas las dependencias juntas en una única celda que re-ejecutar.

Manten tus celdas simples

Trata de mantener tus celdas simples, es decir logra un correcto balance entre cantidad de celdas y contenido en las mismas. Por ejemplo, no es una buena práctica tener una única celda con todo el contenido de tu notebook, pero tampoco es bueno tener una celda por cada comentario o línea de código que tengas.

Logra un correcto balance agrupando comentarios, código, etc.

Define métodos

Si tienes un análisis complejo de datos, no te olvides de todo lo que sabes de programación. Crea métodos que encapsulen comportamiento y te permitan reutilizarlo. Puedes definirte una sección de métodos útiles y comunes al inicio del notebook si quieres.

Manejador de versiones

Siempre que puedas, utiliza un gestor de código fuente como Github, GitLab para mantener todas las versiones de tus notebooks de forma simple.

Convencion para nombrar archivos

Utiliza una convenciíon para nombrar los notebooks de tu proyecto. Puede ser una convención que tu mismo inventaste, siempre y cuando exista algún criterio que permita entender la relación entre distintos notebooks y que suguiera que encontrarás en el mismo.

Ejemplos:

  • 001 - Compras Estatales - Primer Analisis (BIEN)
  • 002 - Compras Estatales - Evaluacion Calidad (BIEN)
  • Calentamiento (MAL)
  • Notebook 2 (MAL)

Divide el notebook en secciones

Puedes dividir el contenido de tu notebook en seccioens utilizando la expresividad del lenguaje Markdown. A su vez, siempre resulta muy útil agregar una sección de Objetivos y otra de Índice al inicio del mismo.

Aprende mirando otros Notebooks

La mejor forma de aprender tips y buenas prácticas a la hora de hacer notebooks, es mirando otros notebooks. Busca en la web ejemplos y tomate un tiempo para entenderlos. Puedes encontrar muchos ejemplos en nbviewer o incluso en Github.


No hay comentarios:

Publicar un comentario