Jupyterlab es una aplicación de software libre que permite mezclar programación interactiva con sus respectivos resultados, ecuaciones complejas y texto. Todo en un solo archivo. Ademas, tenemos acceso a editores de código, terminales y pequeños dispositivos para aumentar la utilidad.
Jupyterlab utiliza archivos .ipynb
o Jupyter Notebooks. Estos son perfectos para la investigación y la retroalimentación científicia y la enseñanza académica.
Jupyterlab fue creado principalmente para el desarrollo en el lenguaje Python, pero permite el trabajo en muchos otros Lenguajes de Programación. La forma de conectar los lenguajes instalados con Jupyterlab es a través de "Kernels", archivos que nos permiten correr los procesos de Programación en Jupyter de manera interactiva.
El único lenguaje "oficial" es Python, a través del kernel "IPython", pero la comunidad ha creado múltiples kernels para utilizar múltiples lenguajes. Aquí tenemos una lista de estos
Gracias a esto, podemos escribir con diferentes lenguajes en un editor de código. Por ejemplo:
Por supuesto, no podemos correr estos archivos aquí directamente, y tenemos que correrlos totalmente. Aquí introducimos uno de los conceptos más importantes de los Jupyter notebooks: Celdas.
Jupyter tiene tres tipos de celdas:
Enfoquémonos en la celda de código
print("Esto es una celda de código")
Esto es una celda de código
Cosas a notar: Podemos correr las celdas de forma independiente, permitiendo un manejo más granular sobre nuestro código.
x = 1
print("x =", x)
x = 1
x += 1
print("x =", x)
x = 2
Markdown es un lenguaje sencillo con el cual podemos hacer muchas pequeñas cosas para hacer un cuaderno con una buena presentación
podemos editar markdown en celdas markdown o directamente en archivos .md
Manual de LaTeX: LaTeX Cheat Sheet
Otro lenguaje de marcado que utiliza principalmente funciones y métodos de marcado para cambiar el estilo del texto. Jupyter tiene capacidades limitadas para usar LaTeX. Lo podemos usar en celdas de markdown o en los mismos archivos .md
. Lo más relevante para Jupyter es un "Math Mode" para hacer texto de estilo matemático como ecuaciones complejas.
Markdown es en realidad una forma de escribir HTML de forma sencilla. Para hacer cosas más complejas con el texto, es necesario utilizar convenciones HTML.
Podemos visualizar imágenes en JupyterLab de distintas maneras.
La ventaja que tenemos al hacer esto sobre Colab, es que podemos hacer referencias locales de archivos.
Aqui un ejemplo de cómo cargar una imagen local sin código de Python explícito:
Ahora, una imagen cargada con código HTML explícito:
# Librería para leer Código HTML y ejecutarlo
from IPython.display import HTML
# Código HTML
html1 = '<img src="../imagenes/zeus.jpg" width="500" height="600" align="center"/>'
# Ejecutar instrucción a través de Python
HTML(html1)
También se puede usando código Python (Se necesita tener instalada la librería Matplotlib):
# Librerías de Dibujo
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
# Leer ruta de Archivo
ruta_foto = '../imagenes/zeus2.jpg';
# Leer imagen desde la ruta
zeus = mpimg.imread(ruta_foto);
# Dibujar Lienzo
plt.figure(figsize=(15,10))
# Poner Dibujo en Lienzo
plt.imshow(zeus);
# Eliminar Ejes
plt.axis("Off");
# Mostrar Dibujo
plt.show();
from IPython.display import Image
#filename respect to CPU absolute Path (VERY IMPORTANT)
Image(filename="../imagenes/zeus3.jpg")
También podemos insertar videos por medio de código Python:
# Librería para insertar videos de YouTube
from IPython.display import YouTubeVideo
# Insertar Video de YouTube
YouTubeVideo('cQ54GDm1eL0', width=750, height=350)
Es posible exportar un Notebook en diferentes formatos:
En particular, para Slides, es suficiente con controlar el menú derecho de Jupyter Lab:
Checkbox
Write the press release
Update the website
Contact the media
Observemos el video a continuación:
Los Chimpandolfos - Eclipse
También podemos insertar videos por medio de código Python:
# Librería para insertar videos de YouTube
from IPython.display import YouTubeVideo
# Insertar Video de YouTube
YouTubeVideo('cQ54GDm1eL0', width=750, height=350)
import ipywidgets as widgets
widgets.IntSlider(
min=0,
max=10,
step=1,
description='Deslizador:',
value=5
)
IntSlider(value=5, description='Deslizador:', max=10)
from ipywidgets import interactive
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# Simulación de los Datos
def simular_datos(σ=0,w1=0):
# Se escoge una semilla
np.random.seed(22)
# Generación de los datos
x=np.linspace(-2,2,100)
y=w1*x+np.random.normal(loc=0,scale=σ,size=len(x))
data=pd.DataFrame({"Mediciones":x,"Observaciones":y})
plt.figure(figsize=(10,7))
plt.plot(x,y,'o',markersize=5)
plt.xlabel("Mediciones",fontsize=15)
plt.ylabel("Observaciones",fontsize=15)
plt.legend(["Datos"],fontsize=15)
plt.ylim([-30,30])
plt.title(f'Simulación de ${w1}x+\epsilon$, $\epsilon$ ~ N(0,σ²)')
plt.show()
return x,y
interactive_plot = interactive(simular_datos, σ=(0, 10.,0.2),w1 = (-10.,10.))
interactive_plot
interactive(children=(FloatSlider(value=0.0, description='σ', max=10.0, step=0.2), FloatSlider(value=0.0, desc…
Cuando hablamos del espacio de trabajo, nos referimos a dos cosas (ambigüedad):
Cada lenguaje de programación tiene su manera de proceder, y cada uno de ellos muestra información pedida de maneras diferentes.
Ejemplo:
dir(),locals(), globals()
. R: ```ls()```.
who, whos
.names(Main)[4:end]
.Probemos algo de esto en Python:
print(dir())
#print(locals())
#print(globals())
Parece que estamos viendo cosas sin sentido... (programish?)
Lo que sucede, es que al ejecutarse Python, hay funciones internas y variables que se definen en el núcleo del lenguaje para que este pueda funcionar.
Por ejemplo:
La lista es extensa y explica un poco esta lista rara.
La ventaja de usar JupyterLab (Más específicamente IPyhton) es que podemos usar un concepto conocido como comandos mágicos (tarea), cuyo objetivo es ejecutar comandos de otros lenguajes que nos permitan hacer una mejor visualización de las cosas e incluso correr códigos de otro lenguajes de programaciónen Kernels ajenos a éste.
Usemos whos de MATLAB.
Para una extensa lista de comandos mágicos, ir Aqui
Ejemplo:
# Importar librería numpy
from numpy import array
# If you want to check numpy version:
#!conda list numpy inside the Notebook
# Definir un vector usando numpy
v=array([2,3,4,5,6,7,8,9]);
# Mostrar vector
print("El vector es: v =", v)
Ahora, miremos qué variables han sido definidas:
%whos
Juguemos un poco más:
import random as rand
a1 = rand.random()
a2 = rand.randint(3,20)
a3 = rand.randrange(30,10000)
print("a1 =",a1)
print("a2 =",a2)
print("a3 =",a3)
Ahora verifiquemos nuevas variables en el Workspace
%whos
%who
¿Por qué hay más cosas en el espacio de trabajo que sólo variables definidas?
Muchas veces necesitamos cargar datos desde algún lugar físico del computador (alguna ruta) en la que guardamos dichos datos.
Por eso, es importante saber dónde nos encontramos desde el Notebook en proceso.
Como la sintáxis de las rutas dependen del OS, esto puede variar bastante.
Ejemplo:
#!pwd # Directorio actual, Linux, Mac
# Directorio actual, Windows
!chdir
Es excelente práctica de programación dejar los datos en una carpeta muy cercana a la carpeta raíz de la instalación de Anaconda y paths absolutos para acceder a la información:
# Change path to your path
f = open("abs_path_to_file/data.txt",'r')
if f.mode == 'r':
contents = f.read() # Read Content
print(contents) # Print Content