Cómo configurar Jupyter Notebook con Python 3 en Ubuntu 18.04


Los Jupyter Notebooks (o simplemente Notebooks) son documentos producidos por la aplicación Jupyter Notebook que contienen código de ordenador y elementos de texto enriquecido (párrafo, ecuaciones, figuras, enlaces, etc.) que ayudan a presentar y compartir investigaciones reproducibles. Precisamente la aplicación web de código abierto, Jupyter Notebook le permite crear y compartir código interactivo, visualizaciones y más. Además, esta herramienta se puede utilizar con varios lenguajes de programación, incluidos Python, Julia, R, Haskell y Ruby. Ciertamente tal repercusión ha tenido esta herramienta que a menudo se usa para trabajar con datos, modelado estadístico y aprendizaje automático.

Este post le guiará a través de la configuración de Jupyter Notebook para que se ejecute desde un servidor Ubuntu 18.04, y también se mostrará cómo conectarse y usar el notebook. Al final de este post, podrá ejecutar el código de Python 3 con Jupyter Notebook ejecutándose en un servidor remoto. Para completar este post, debe tener una instancia de servidor Ubuntu 18.04 nueva con un firewall básico y un usuario no root con privilegios de sudo configurados. 

Configurar Python

Para comenzar el proceso, instalaremos las dependencias que necesitamos para nuestro entorno de programación Python desde los repositorios de Ubuntu. Ubuntu 18.04 viene preinstalado con Python 3.6. Usaremos el pip del administrador de paquetes de Python para instalar componentes adicionales un poco más tarde.

Primero necesitamos actualizar el índice apt del paquete local y luego descargar e instalar los paquetes:

sudo apt update 

A continuación, instale pip y los archivos de encabezado de Python, que utilizan algunas de las dependencias de Jupyter:

sudo apt install python3-pip python3-dev 

Ahora podemos pasar a configurar un entorno virtual de Python en el que instalaremos Jupyter.

Crear un entorno virtual de Python para Jupyter

Ahora que tenemos Python 3, sus archivos de encabezado y pip listos para usar, podemos crear un entorno virtual de Python para administrar nuestros proyectos. Instalaremos Jupyter en este entorno virtual.

Para hacer esto, primero necesitamos acceder al comando virtualenv que podemos instalar con pip.

Actualice pip e instale el paquete escribiendo:

sudo -H pip3 install --upgrade pip sudo -H pip3 install virtualenv 

El indicador-H garantiza que la política de seguridad establezca la variable home de entorno en el directorio de inicio del usuario de destino.

Con virtualenvinstalado, podemos empezar a formar nuestro entorno. Cree y muévase a un directorio donde podamos guardar nuestros archivos de proyecto. Lo llamaremos my_project_dir, pero debe usar un nombre que sea significativo para usted y para lo que está trabajando.

mkdir ~/my_project_dir cd ~/my_project_dir 

Dentro del directorio del proyecto, crearemos un entorno virtual de Python. Al final de este post, lo llamaremos, my_project_envpero debe llamarlo de alguna manera que sea relevante para su proyecto.

virtualenv my_project_env 

Esto creará un directorio llamado my_project_env dentro de su directorio my_project_dir. En el interior, instalará una versión local de Python y una versión local de pip. Podemos usar esto para instalar y configurar un entorno Python aislado para Jupyter.

Antes de instalar Jupyter, debemos activar el entorno virtual. Puede hacerlo escribiendo:

source my_project_env/bin/activate 

Su mensaje debería cambiar para indicar que ahora está operando dentro de un entorno virtual de Python. Se verá algo como esto: .(my_project_env)user@host:~/my_project_dir$

Ahora está listo para instalar Jupyter en este entorno virtual.

Instalar Jupyter

Con su entorno virtual activo, instale Jupyter con la instancia local de pip.

Nota: Cuando el entorno virtual está activado (cuando su solicitud precede amy_project_env), use pip en lugar de pip3, incluso si está usando Python 3. La copia de la herramienta del entorno virtual siempre se denomina pip, independientemente de la versión de Python.

pip install jupyter 

En este punto, ha instalado con éxito todo el software necesario para ejecutar Jupyter. Ahora podemos iniciar el servidor de Notebook.

Ejecutar Jupyter Notebook

¡Ahora tiene todo lo que necesita para ejecutar Jupyter Notebook! Para ejecutarlo, ejecute el siguiente comando:

jupyter notebook 

Se imprimirá un registro de las actividades de Jupyter Notebook en el terminal. Cuando ejecute Jupyter Notebook, se ejecuta en un número de puerto específico. El primer cuaderno que ejecute normalmente utilizará el puerto 8888. Para comprobar el número de puerto específico en el que se ejecuta Jupyter Notebook, consulte el resultado del comando utilizado para iniciarlo:


         
          Output
         [I 21:23:21.198 NotebookApp] Writing notebook server cookie secret to /run/user/1001/jupyter/notebook_cookie_secret
[I 21:23:21.361 NotebookApp] Serving notebooks from local directory: /home/sammy/my_project_dir
[I 21:23:21.361 NotebookApp] The Jupyter Notebook is running at:
[I 21:23:21.361 NotebookApp] http://localhost:8888/?token=1fefa6ab49a498a3f37c959404f7baf16b9a2eda3eaa6d72
[I 21:23:21.361 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[W 21:23:21.361 NotebookApp] No web browser found: could not locate runnable browser.
[C 21:23:21.361 NotebookApp]

    Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://localhost:8888/?token=1fefa6ab49a498a3f37c959404f7baf16b9a2eda3eaa6d72

Si está ejecutando Jupyter Notebook en un ordenador (no en un servidor), puede navegar a la URL que se muestra para conectarse a Jupyter Notebook. Si está ejecutando Jupyter Notebook en un servidor, deberá conectarse al servidor mediante túneles SSH como se describe mas adelante.

En este punto, puede mantener abierta la conexión SSH y seguir ejecutando Jupyter Notebook o puede salir de la aplicación y volver a ejecutarla una vez que haya configurado el túnel SSH. Elijamos detener el proceso de Jupyter Notebook pues lo ejecutaremos nuevamente una vez que hayamos configurado el túnel SSH. 

Para detener el proceso de Jupyter Notebook, presione CTRL+C, escriba Y y luego ENTER para confirmar. Se mostrará la siguiente salida:


         
          Output
         [C 21:28:28.512 NotebookApp] Shutdown confirmed
[I 21:28:28.512 NotebookApp] Shutting down 0 kernels

Ahora configuraremos un túnel SSH para que podamos acceder al Notebook.

Conexión al servidor mediante túneles SSH

Ahora vamos a ver cómo conectarnos a la interfaz web de Jupyter Notebook mediante túneles SSH pues dado que Jupyter Notebook se ejecutará en un puerto específico del servidor (como , por ejemplo :8888:8889etc.), el túnel SSH le permite conectarse al puerto del servidor de forma segura. A continuación vamos a ver cómo crear un túnel SSH desde Mac o Linux y Windows.

Tunelización SSH con Mac o Linux

Si usa Mac o Linux, los pasos para crear un túnel SSH son similares a usar SSH para iniciar sesión en su servidor remoto, excepto que hay parámetros adicionales en el comando ssh.  Ahora vamos a ver los parámetros adicionales necesarios en el comando ssh para tunelizar con éxito.

La tunelización SSH se puede realizar ejecutando el siguiente comando SSH en una nueva ventana de terminal local:

ssh -L 8888:localhost:8888 your_server_username@your_server_ip 

El comando ssh abre una conexión SSH, pero -L especifica que el puerto dado en el host local (cliente) se reenviará al host y puerto dados en el lado remoto (servidor). Esto significa que cualquier cosa que se esté ejecutando en el segundo número de puerto (por ejemplo 8888 ), en el servidor aparecerá en el primer número de puerto (por ejemplo 8888 ) en su ordenador local.

Opcionalmente, cambie el puerto 8888a uno de su elección para evitar usar un puerto que ya está en uso por otro proceso.

server_username es su nombre de usuario (por ejemplo sammy) en el servidor que creó y your_server_ip es la dirección IP de su servidor.

Por ejemplo, para el nombre de usuario sammy y la dirección del servidor 203.0.113.0, el comando sería:

ssh -L 8888:localhost:8888 [email protected] 

Si no aparece ningún error después de ejecutar el comando ssh -L, puede pasar a su entorno de programación y ejecutar Jupyter Notebook:

jupyter notebook 

Recibirá resultados con una URL, de modo que vaya desde un navegador web en su máquina local y abra la interfaz web de Jupyter Notebook con la URL que comienza con http://localhost:8888. Asegúrese de incluir el número de token o ingrese la cadena del número de token cuando se le solicite en http://localhost:8888.

Tunelización SSH con Windows y Putty

Si está usando Windows, puede crear un túnel SSH usando Putty . Primero, ingrese la URL del servidor o la dirección IP como el nombre de host como se muestra:

Establecer nombre de host para túnel SSH

A continuación, haga clic en SSH en la parte inferior del panel izquierdo para expandir el menú y luego haga clic en Túneles . Ingrese el número de puerto local que desea usar para acceder a Jupyter en su máquina local. Elija 8000 o mayor para evitar los puertos utilizados por otros servicios y establezca el destino como donde está el número del puerto en el que se ejecuta Jupyter Notebook.localhost:8888:8888

Ahora haga clic en el botón Agregar y los puertos deberían aparecer en la lista de puertos reenviados :

Lista de puertos reenviados

Finalmente, haga clic en el botón Abrir para conectarse al servidor a través de SSH y canalizar los puertos deseados. Navegue a (o al puerto que elija) en un navegador web para conectarse a Jupyter Notebook que se ejecuta en el servidor. Asegúrese de incluir el número de token o ingrese la cadena del número de token cuando se le solicite en .http://localhost:8000

Uso de Jupyter Notebook

 Si actualmente no tiene Jupyter Notebook ejecutándose, inícielo con el  comando jupyter notebook. Ahora debería estar conectado a él usando un navegador web. Jupyter Notebook es una herramienta muy poderosa con muchas características. Veamos algunas de las funciones básicas para que pueda comenzar a utilizar esta fantástica herramienta.

 Jupyter Notebook mostrará todos los archivos y carpetas en el directorio desde el que se ejecuta, por lo que cuando esté trabajando en un proyecto, asegúrese de iniciarlo desde el directorio del proyecto.

Para crear un nuevo archivo de Notebook, seleccione Nuevo > Python 3 en el menú desplegable superior derecho:

Crear un nuevo cuaderno de Python 3

Como vemos, esto abrirá un cuaderno. Ahora podemos ejecutar el código de Python en la celda o cambiar la celda a Markdown. Por ejemplo, cambie la primera celda para aceptar Markdown haciendo clic en Celda > Tipo de celda > Markdown en la barra de navegación superior. Ahora podemos escribir notas usando Markdown e incluso incluir ecuaciones escritas en LaTeX colocándolas entre los $$símbolos. Por ejemplo, escriba lo siguiente en la celda después de cambiarla a Markdown:

# First Equation

Let us now implement the following equation:
$$ y = x^2$$

where $x = 2$

Para convertir la reducción en texto enriquecido, presione CTRL+ENTER y los siguientes deberían ser los resultados:

resultados de rebajas

Puede usar las celdas de descuento para tomar notas y documentar su código. Implementemos esa ecuación e imprimamos el resultado. Haga clic en la celda superior, luego presione ALT+ENTER para agregar una celda debajo e ingrese el siguiente código en la nueva celda.

x = 2
y = x**2
print(y)

Para ejecutar el código, presione  el botono de RUN o simplemente CTRL+ENTER y eecibirá los siguientes resultados:

resultados de la primera ecuacion

Resumen

Como hemos visto Jupyter Notebook se basa en el lenguaje de programación Python, aunque también es compatible con otros lenguajes de programación como R, Julia y Scala permitiendo ejecutar código en tiempo real y ver los resultados de inmediato, lo que lo hace muy útil para la enseñanza, la investigación y el análisis de datos.

Algunas de las características principales de Jupyter Notebook esbozadas en este post son:

  • Permite integrar código, texto, imágenes y visualizaciones en un solo documento.
  • Permite trabajar con datos en vivo, lo que significa que los usuarios pueden explorar y analizar conjuntos de datos en tiempo real.
  • Permite crear gráficos y visualizaciones interactivas.
  • Permite compartir y colaborar con otros usuarios, lo que lo hace muy útil para trabajos en equipo o para la enseñanza.

En resumen, Jupyter Notebook es una herramienta muy útil para explorar y analizar datos, crear informes interactivos y colaborar con otros usuarios. ¡Ahora tiene la capacidad de importar módulos y usar Notebook como lo haría con cualquier otro entorno de desarrollo de Python!

Instalación desde cero de nilmtk en Ubuntu sin conda


El NILM o Non-Intrusive Load Monitoring es una técnica computacional para la estimación del consumo individual de diversos dispositivos utilizando para ello la lectura agregada de un único medidor de energía (Smart Meter, SM) . NILMTK es un kit de herramientas de código abierto para el monitoreo de carga no intrusivo (Non-Intrusive Load Monitoring) muy usada en investigación ya que nos permite usando las mismas métricas comparar el rendimiento de diferentes algoritmos para el NILM.

En este post, instalaremos la versión de usuario de NILMTK concretamente en una instalación limpia de Ubuntu20.04.5 LTS, aunque realmente también podria ser útil en sistemas Mac OS y otras distribuciones de Linux. Igualmente el procedimiento de instalación para Windows puede diferir del que se presenta en esta entrada de blog.

Anaconda es una distribución libre y abierta de los lenguajes Python y R, utilizada en ciencia de datos y aprendizaje automático (machine learning). Esto incluye procesamiento de grandes volúmenes de información, análisis predictivo y cómputos científicos . Tiene como ventaja simplificar la gestión e implementación de paquetes  de modo que la instalación de NILMTK se debería poder hacer por medio de Conda, pero en esta ocasión vamos a prescindir de este servicio, básicamente para evitar muchos errores que se pueden producir en el transcurso de la instalación con Conda en máquinas con Linux, fundamentalmente por la gran dependencia del NILMK con la versión de Python 3.8 ( al instalar Anaconda se sube automáticamente a la versión 3.9 de Python, la cual da problemas con nilmtk que usa Python 3.8.10)

Instalación del git

Dado que hemos decidido prescindir de los servicios de conda , en una instalación limpia de Ubuntu es posible que el git y el comando pip no estén instalados, los cuales vamos a necesitar para instalar nilmtk.

Para instalar Git en Ubuntu, puede usar la línea de comandos y seguir estos pasos:

  • Abre una ventana de terminal (puedes abrir una ventana de terminal presionando Ctrl + Alt + T en su teclado).
  • Actualiza la lista de paquetes ejecutando el siguiente comando para actualizar la lista de paquetes: sudo apt-get update
  • Instale Git una vez que se haya actualizado la lista de paquetes, ejecutando el siguiente comando : sudo apt-get install git
  • Este comando descargará e instalará la última versión de Git en tu sistema.Verifique la instalación para comprobar que Git se ha instalado correctamente, ejecutando el siguiente comando:git –version (este comando debería imprimir el número de versión de Git instalado en su sistema).

Instalación de Jupyter Notebook

Para instalar Jupyter Notebook en Ubuntu, siga los siguientes pasos:

  1. Abra la terminal de Ubuntu presionando Ctrl + Alt + T o buscándola en el menú de aplicaciones.
  2. Asegúrese de que su sistema esté actualizado usando el siguiente comando:
sudo apt-get update
  1. Instale Python y pip usando el siguiente comando:
sudo apt-get install python3 python3-pip
  1. Luego, use pip para instalar Jupyter Notebook con el siguiente comando:
sudo -H pip3 install jupyter
  1. Una vez instalado, inicie Jupyter Notebook ejecutando el siguiente comando en la terminal:
jupyter notebook
  1. Esto abrirá Jupyter Notebook en su navegador predeterminado. Si esto no ocurre automáticamente, puede acceder a él en su navegador en la dirección http://localhost:8888.
Photo by Frank Cone on Pexels.com

Instalacion nilmtk

Ya tenemos todas las herramientas disponibles , por lor uqepodemos instalar el repositorio de nilmtk

pip install git+https://github.com/nilmtk/nilmtk

Como vemos tampoco es de una complejidad abrumadora la instalación sin conda, lo qeu nos posibilita repetir la instalacion en maquinas menos potentes como por ejemplo Raspberry Pi

Para terminar también nos falta añadir el paquete de gestión de los metadatos, lo cual haremos mediante el paquete nilm_metadata con el git, pero tenga en cuenta que la versión de Python debe ser exactamente la 3.8o la 3.9 . Además, tiene que instalar nilmtk-metadata de la siguiente manera para lo cual ejecute el siguiente comando:

pip install git+https://github.com/nilmtk/[email protected]

La instrucción «pip install git+https://github.com/nilmtk/[email protected]» es un comando de la línea de comandos que utiliza la herramienta pip para instalar el paquete «nilm_metadata» desde el repositorio de código fuente alojado en GitHub.

En particular, el «@0.2» indica que se debe instalar la versión 0.2 del paquete.

El paquete «nilm_metadata» es una biblioteca de Python utilizada para describir los metadatos asociados a los datos de consumo de energía eléctrica utilizados en el desagregación de cargas no intrusiva (NILM). El comando «pip install» se utiliza comúnmente en Python para instalar paquetes y dependencias necesarias para que una aplicación o biblioteca funcione correctamente.

Ciertamente aunque algunos expertos recomiendan la versión anterior, personalmente preferimos la siguiente sentencia algo mas simplificada y que funciona también perfectamente.

pip install git+https://github.com/nilmtk/nilm_metadata

Pruebas

Ha llegado el momento de comprobar su instalación. Antes que nada, cree una nueva carpeta y descargue el conjunto de pruebas aleatorias de Github:

mkdir nilmtk_test/
cd nilmtk_test/
wget https://raw.githubusercontent.com/nilmtk/nilmtk/master/data/random.h5

A continuación, arranque Jupyter:

jupyter notebook

Para probar la instalación, intente importar el conjunto de datos aleatorio con NILMTK y trace todos los medidores:

El resultado debe ser:

MeterGroup(metros=
ElecMeter(instance=1, building=1, dataset=None, appliances=[])
ElecMeter(instance=2, building=1, dataset=None, appliances=[])
ElecMeter(instance=3, building=1, dataset=None, appliances=[])
ElecMeter(instance=4, building=1, dataset=None, appliances=[])
ElecMeter(instance=5, building=1, dataset=None, appliances=[])
)

¡Felicidades! Lo ha logrado. ¡NILMTK parece funcionar según lo previsto!