Manual Jupyter
Manual Jupyter
Autores:
Eduardo Cabrera Granado
Elena Dı́az Garcı́a
Índice general
Introducción 1
Jupyter Notebook 3
Python 11
Gestión de cursos 21
Propuestas Docentes 27
Conclusiones 31
Referencias 33
Introducción
Jupyter Notebook es una interfaz web de código abierto que permite la inclusión de
texto, vı́deo, audio, imágenes ası́ como la ejecución de código a través del navegador
en múltiples lenguajes. Esta ejecución se realiza mediante la comunicación con un
núcleo (Kernel) de cálculo. Aunque en principio, el equipo de desarrollo de Jupyter
Notebook incluye por defecto únicamente el núcleo de cálculo Python, el carácter
abierto del proyecto ha permitido aumentar el número de núcleos disponibles [1],
incluyendo, por ejemplo Octave, Julia, R, Haskell, Ruby, C/C++, Fortran, Java,
SageMath, Scala, o también Matlab y Mathematica. Esta interfaz, agnóstica del
lenguaje (de ahı́ su nombre al unir 3 de los lenguajes de programación de código
abierto más utilizados en el ámbito cientı́fico: Ju-lia, Py-thon y R), puede suponer
por tanto una estandarización para mostrar el contenido de cursos cientı́ficos, sin
encontrarse limitado a la adopción de un único lenguaje.
Orı́genes
Jupyter Notebook nace como una evolución de la interfaz Ipython Notebook, bási-
camente con las mismas funcionalidades pero añadiendo la posibilidad de ejecutar
código en múltiples lenguajes. Por otro lado, la interfaz web, común tanto a Jupyter
Notebook como a Ipython Notebook, supone el desarrollo en software libre de un
“cuaderno computacional” al mismo estilo que los cuadernos empleados en el progra-
ma Mathematica o en Maple y cuyo primer intento fue realizado por William Stein
para el programa de cálculo Sage (Sage Notebooks). Para este desarrollo, llevado a
cabo por Fernando Pérez y Robert Kern, en la Universidad de Berkeley (California,
EEUU), se basaron en principio en el lenguaje de programación Python, dada su
gran versatilidad, amplia adopción por la comunidad cientı́fica y su carácter libre.
Aunque en un principio el desarrollo no se centró en una interfaz web, sino en propor-
cionar un intérprete de comandos interactivo para el lenguaje Python (denominado
IPython), a partir de 2010 el trabajo del equipo de desarrollo de IPython permite
la aparición de la interfaz Jupyter Notebook.
Desde entonces, el desarrollo de estos “cuadernos computacionales”, ası́ como su
uso, no ha parado de crecer. Por ejemplo, la plataforma de desarrollo de proyectos
libres más importante actualmente, GitHub, permite la visualización de Jupyter
Notebooks directamente en su página web, alojando más de un millón de este tipo
de documentos, de libre acceso, en sus servidores.
Descripción de la interfaz
ejecutarse Jupyter Notebook localmente, este botón no presenta una gran funcionali-
dad, pero sı́ para el caso en que accedamos a estos documentos desde otro ordenador
y a través del navegador.
Para generar un primer Jupyter Notebook, pincharemos en New y elegiremos el
núcleo de cálculo entre aquellos que tengamos instalados. Por defecto únicamente
tendremos Python. Un ejemplo de un documento tipo Jupyter Notebook puede
visualizarse en la Figura 1.
• Enlaces: Las celdas de texto pueden contener enlaces, tanto a otras partes del
documento, como a páginas en internet u otros archivos locales. Su sintaxis es
[texto](dirección del enlace).
Estas posibilidades permiten utilizar las celdas de texto de manera versátil docu-
mentando el código de otras celdas o, por ejemplo, explicando detalladamente algún
concepto teórico, del que después se puede presentar un ejercicio.
La creación de una nueva celda provoca la aparición automática de una celda
de código. El lenguaje que se utiliza viene determinado por la elección del núcleo
7
Instalación
Uno de los requisitos que el sistema donde se instale Jupyter Notebook ha de po-
seer es disponer de Python. Aunque los documentos permiten la ejecución en otros
lenguajes de programación, algunas de las funciones de Jupyter Notebook están im-
plementadas en este lenguaje. Dada su enorme popularidad en el ámbito cientı́fico,
suites de cálculo cientı́fico ofreciendo gran cantidad de módulos de Python han apa-
recido en los últimos años. Dentro de ellas, quizás la más conocida es Anaconda, de
la empresa Continuum Analytics. Este pack de módulos de Python dispone a su vez
de un gestor de paquetes y ha facilitado enormemente la instalación y gestión de
librerı́as de Python relacionadas con aplicaciones cientı́ficas.
Uno de los módulos por defecto que Anaconda instala es Jupyter Notebook por
lo que la instalación recomendada, independientemente del sistema operativo, es
instalar dicha distribución de Python cientı́fico. Para ello, la página de descarga de
Anaconda [2] permite obtener gratuitamente este producto. Siguiendo los pasos de
instalación, podemos tener disponible Jupyter Notebook, el cual podemos ejecutar
escribiendo jupyter notebook en una consola.
2. Gryd: Este servicio [6] ofrece cuentas gratuitas para estudiantes ası́ como un
paquete académico para la gestión de cursos utilizando nbgrader, aunque su
precio no se encuentra publicado actualmente.
Aunque los documentos generados por Jupyter Notebook son fácilmente ac-
cesibles a través de un navegador, en ocasiones es necesario o útil disponer
de otros formatos, por ejemplo, utilizar un archivo Python ejecutable. Con
el fin de facilitar la conversión de los notebooks, Jupyter dispone desde la
versión 1.0 (versión actual a dı́a de hoy) de la herramienta nbconvert, que
permite exportar los documentos hechos en Jupyter Notebook a otros for-
matos. Concretamente, la herramienta incluida en la instalación de Jupyter
Notebook denominada nbconvert proporciona la conversión a documentos
estáticos (es decir, las celdas no pueden ejecutarse), en formato HTML, La-
TeX, Markdown, reStructuredText, script de Python ejecutable y, finalmente,
en formato presentación. El uso de esta herramienta requiere la instalación
de un nuevo paquete denominado Pandoc, que puede instalarse a través del
gestor de paquetes de las distintas distribuciones Linux o bien, a través de su
página web [9].
Una vez generado el archivo .tex podemos convertirlo a pdf mediante, por
ejemplo, pdflatex o cualquier editor de LaTeX. Si queremos realizar realizar
la conversión a formato pdf directamente, podemos añadirlo a la anterior ins-
trucción, quedando,
Para más información, se pueden consultar los siguientes enlaces [10, 11].
Recursos en la red
La cantidad de recursos en la red dedicada a Jupyter Notebooks no para de crecer y
de modificarse con el tiempo. Es por ello que la siguiente lista ha de tomarse como
una muestra, para nada completa, y válida únicamente en las fechas en las que se
ha generado este documento. Sin embargo, y dada la importancia de los sitios web
a los que se refieren los siguientes enlaces, es esperable que, aunque nuevos sitios de
referencia puedan surgir, los resaltados a continuación puedan seguir siendo recursos
útiles en el futuro.
Among the different alternatives for open source software devoted to computational
programming, Python has become one of the most used options. Thus, learning this
programming language can be very beneficial for students in their future careers.
Moreover, there is a vast amount of scientific modules that are easily imported,
matching the capabilities of Python to those of commercial software.
The most relevant libraries in the scientific environment are:
Apart from these, there are numerous libraries designes for specific needs, such
as image processing (openCV), machine learning (scikit-learn) and many more.
• Library management
HTML(’<iframe
src=http://www.wikipedia.org width=800px height=400px >’)
– Loop: we will consider the most common loop, the for loop. For instance,
if we want to print the numbers from 1 to 10 on the screen, we would
write
for j in range(1,10):
print(j)
– Conditionals: we will consider the three most general cases. The sim-
plest conditional is usually written with the if command, as is shown in
the following example,
if j>0:
print(’The variable’, j, ’is positive’)
For a conditional including two cases, we would use if . . . else . . . as
follows
if j>0:
print(’Variable’, j, ’is positive’)
else:
print(’Variable’, j, ’is negative or zero’)
Finally, the while command, which is used in conditionals within loops,
will be used in the following way
j=-5
while j<0:
15
empty((m,n))
– Plots: a basic plot would be that of the cosine function. This can be
achieved by using the following sequence of commands:
x=linspace(0,10,100)
y=cos(x)
plot(x,y)
xlabel(’X’)
ylabel(’Y’)
title(’PlotTest’)
The last three lines define the X-axis, Y -axis and plot titles, respectively.
Finally, each cell can be executed using the combination of keys Shift + Enter
or clicking the play button that appears in the notebook.
• C/C++.
C/C++, together with Fortran, is well-known for being extremely fast, espe-
cially in executing loops. Since Python is an interpreted language, execution is
slower than in a compiled language such as C. In turn, legibility and easiness
for programming is obtained, which saves time both for developing code and
for fixing bugs. More importantly, from an educational viewpoint, it is much
simpler to learn that with C/C++ or Fortran, which limits the use of the lat-
ter for generating simple codes to support the explanations of other concepts.
However, the fact that C is faster than Python has led to the development of
some alternatives to use C in Python. Below we describe two of them:
– Weave: it is part of the SciPy module and allows to write C or C++ code
directly within a Python program. In order to use it, a C/C++ compiler
must be installed beforehand, apart from Python. Weave can be used in
two ways: with the inline function or with the blitz function. In the
first case, C/C++ code is written directly as a chain of characters (wit-
hin quotation marks) inside the function inline(). The first time the
19
– Cython: during the last years, Cython has gained popularity and it
is a very flexible solution to save time executing Python programs. In
contrast to Weave, Cython is a programming language itself, based on
Python and encompassing it. It can execute Python code or modify it
including definition of variables with type declaration, which allows to
fasten execution. Using Cython requires a much more advance knowledge
than that described in this Guide, so it will not be considered in detail
here. More information can be found at [18].
Gestión de cursos
CoCalc
JupyterHub
JupyterHub es una de las herramientas ofrecidas por el proyecto Jupyter, y consiste
en un servidor multiusuario cada uno de los cuales accede a su propio Dashboard
y gestiona sus propios Jupyter Notebooks. Más detalladamente, JupyterHub se en-
carga de presentar una página de identificación a quien accede con el navegador a
la página del servicio, gestiona la identificación del usuario y una vez el acceso ha
sido permitido, presenta un servidor de notebooks especı́fico para ese usuario, donde
puede copiar desde su ordenador cualquier tipo de archivo, descargarlos, crear nue-
vos Jupyter Notebooks y, por supuesto, trabajar con ellos. También permite abrir
una terminal del sistema y, en el caso de tener instaladas extensiones, activarlas
y desactivarlas o hacer uso de sus funcionalidades. En este sentido, y dentro del
contexto de gestión de un curso académico, cabe destacar la extensión denominada
Nbgrader la cual permite a un profesor crear, gestionar y evaluar ejercicios para los
estudiantes (o en el caso en que sea un estudiante quien acceda, trabajar con las
tareas pendientes y enviarlas al profesor).
Por ello JupyterHub posee un gran potencial para su uso docente, al facilitar
un servidor de notebooks para cada uno de los estudiantes de un curso, y en donde
el profesor tiene el control absoluto del software instalado y puede monitorizar el
acceso de cada estudiante.
La instalación y configuración de JupyterHub no es difı́cil, pero es necesario tener
en cuenta algunas consideraciones:
JupyterHub proporciona por tanto la base para poder ofrecer a los estudiantes
un entorno unificado de acceso a Jupyter Notebooks a través de su navegador, sin
requerir una instalación local. Sin embargo, para gestionar un curso, es necesario
además una herramienta para generar ejercicios, poderlos corregir y proporcionar
una retroalimentación a los estudiantes. Esta herramienta es la extensión Nbgrader
que se describe a continuación.
25
Nbgrader
Nbgrader es una extensión a Jupyter Notebook que gestiona la generación, correc-
ción e intercambio de tareas entre el profesor y los estudiantes. Permite incluir tareas
tanto basadas en código (utilizando Python) como ejercicios con respuestas libres
de texto. Para ello dispone de dos herramientas: por un lado, incluye una barra de
opciones adicional a cada celda de Jupyter Notebook para elegir si dicha celda es
el enunciado de un ejercicio, si va a incluir la respuesta del estudiante, o bien si es
una celda de corrección con la posibilidad de incluir códigos que permitan la auto-
corrección de esos ejercicios. Por otro lado, genera una nueva pestaña denominada
Formgrader en la página de acceso a Jupyter Notebook (Jupyter Dashboard) con
una doble funcionalidad. Para el profesor, permite la asignación de tareas, validar los
tests en caso de disponer de celdas de autocorrección, recoger los ejercicios enviados
por los estudiantes, corregirlos y distribuir las versiones corregidas de nuevo a los
alumnos. Para estas tareas, aparte de la interfaz web
Como se puede observar por las anteriores caracterı́sticas descritas, Nbgrader
cubre todo el proceso de gestión de de un curso. Para su instalación, es recomenda-
ble de nuevo utilizar la distribución de Python cientı́fico Anaconda pues la exten-
sión se instalará y se activará en un único paso. Instalaciones manuales requerirán
realizar la activación posteriormente además de la instalación (vease la documen-
tación de Nbgrader en [21]. En el caso, de elegir Anaconda, su gestor de paquetes
de Python realiza todo el trabajo por nosotros con el comando conda install -c
conda-forge nbgrader.
Para comenzar a utilizar la extensión en un curso, pueden ser necesarias ciertas
instrucciones previas para su configuración. Sin embargo, también es posible reali-
zar un comienzo automático con el comando nbgrader quistart course id donde
course id es el nombre que queremos asignar a nuestro curso.
Propuestas Docentes
Consideraciones generales
Las Comisiones que han elaborado los protocolos del Nuevo Espacio Europeo de
Educación Superior (EEES) destacan la importancia de la innovación docente para
la mejora de las clases presenciales teóricas y prácticas, complementadas con una
fuerte participación en seminarios y ejercicios realizados fuera del aula. En particular,
el desarrollo de seminarios interactivos permite al alumno adquirir un conocimiento
teórico a la vez que realiza actividades prácticas al respecto. En el área de ciencias es
importante, además, dotar a los estudiantes de recursos de programación para favo-
recer el aprendizaje de técnicas numéricas imprescindibles en problemas cientı́ficos
de alta complejidad, optimizando el tiempo que se emplea en la adquisición de co-
nocimientos y minimizado el empleado en los cálculos que demuestran los aspectos
teóricos fundamentales. En este marco, hemos propuesto Jupyter Notebook para
el diseño de seminarios interactivos, constituyendo una nueva herramienta docente
utilizable en el aula y puesta a disposición a través del Campus Virtual. Destacamos
que en esta plataforma de cálculo simbólico y numérico, las lı́neas de texto explicati-
vo, las lı́neas de comandos y la representación gráfica coexisten en el mismo entorno,
facilitando ası́ que los estudiantes puedan manejarlo aún sin conocer en detalle todas
sus funcionalidades. El uso de estos seminarios puede realizarse a diferentes niveles
de profundidad según las necesidades docentes y la motivación del alumno.
• En el nivel más avanzado los estudiantes podrán modificar los códigos para
ampliar las simulaciones mostradas, adquiriendo ası́ nuevas competencias en
el cálculo numérico.
• Ofrecen nuevas posibilidades de uso del Campus Virtual, con el que los estu-
diantes están cada vez más familiarizados.
[1] https://github.com/jupyter/jupyter/wiki/Jupyter-kernels
[2] https://www.anaconda.com/download/
[3] https://github.com
[4] https://jupyter.nbviewer.org
[5] https://cocalc.com
[6] https://gryd.us
[7] https://research.google.colab.com
[8] https://mybinder.org
[9] http://johnmacfarlane.net/pandoc/installing.html
[10] http://ipython.org/ipython-doc/stable/interactive/nbconvert.html#nbconvert
[12] https://jupyter-notebook.readthedocs.io/en/stable/notebook.html
[13] https://www.reddit.com/r/JupyterNotebooks/
[14] https://github.com/jupyter/jupyter/wiki/A-gallery-of-interesting-Jupyter-Notebooks
[15] https://github.com/sagemathinc/cocalc
[17] https://github.com/sympy/sympy/wiki/SymPy-vs.-Mathematica
[18] http://cython.org
[19] https://github.com/sagemathinc/cocalc-docker
[20] https://hub.docker.com/r/jupyterhub/jupyterhub/
[22] https://wiki.python.org/moin/
[23] https://github.com/ecabreragranado/JupyterUCM