Preparando el entorno de desarrollo

Vamos a preparar el entorno de desarrollo donde realizaremos las practicas necesarias para entender como funciona la «Ciencia de los Datos«

Para ello, utilizaremos Docker, mas concretamente, una imagen creada por Jordi Torres, autor del libro «Deep Learning: Introducción practica con Keras»

Basandonos en esta imagen, actualizaremos la versión de TensorFlow, y crearemos una nueva, formada por los siguientes componentes:

  • Ubuntu 16.04.3 LTS (Xenial Xerus)
  • Pyton 3.5.2 
  • NumPy 1.18.1
  • TensorFlow 1.4.1
  • Pandas 0.24.2
  • SciPy 1.4.1
  • StatsModels 0.11.0
  • MatPlotLib 3.0.3
  • SeaBorn 0.9.1
  • skleanr 0.22.1
  • Junyper Notebook

Esto va a ser un documento técnico. Probablemente, más adelante tendremos otra entrada explicando que es TensorFlow, Por qué Python, etc, pero aquí solamente vamos a tratar de la preparación del entorno desde un punto de vista técnico.

así que vamos con ello!!!…….

Descargas iniciales

Lo primero que debemos hacer, es descargar e instalar  la versión de Docker Descktop que corresponda a nuestro sistema operativo.

Una vez lo tenemos instalado, descargaremos la imagen que hemos comentado antes (disponible en el desktop Hub de Jordi Torres.) Esta imagen nos servirá de base para actualizar la versión de TensorFlow, y crear una nueva imagen, para subirla a nuestro Docker Hub, y dejarla disponible para la descarga publica.

Esta descarga se realizara a través de la linea de comandos (las imágenes mostradas son de PowerShell ejecutandose en un Windows 10) Docker CLI, que se instala con Docker.

La instrucción a ejecutar es la siguiente:

docker pull jorditorresbcn/dl

Una vez finalizada la descarga, comprobamos que el proceso a finalizado correctamente con la siguiente instrucción, que nos mostrara varios datos de la imagen, como el NOMBRE, el TAMAÑO, etc

docker images

Iniciamos la actualización de TensorFlow

Iniciaremos un contenedor de la imagen descargada:

docker run -it -p 8888:8888 jorditorresbcn/dl:latest

Comprobamos la versión de linux:

cat /etc/os-release

Comprobamos versión de Python:

python3 -V

Actualizamos pip:

pip install --upgrade pip

Comprobamos la versión de TensorFlow:

pip list | grep tensorflow

Actualizamos TensorFLow:

pip install --upgrade tensorflow

Después de instalar la nueva versión , y desinstalar la antigua queda así:

Instalamos Pandas para python con la siguiente instrucción:

pip install pandas

y comprobamos con pip list | grep pandas que se ha instalado correctamente.

Hacemos lo mismo con  statsmodels

pip install statsmodels

comprobamos su instalación con pip list | grep statsmodels

Comprobamos que la versión de matplotlib instalada es la 2.1.0, así que la actualizamos con la siguiente instrucción:

pip install --upgrade matplotlib

y validamos que se ha realizado correctamente con pip list | grep matplotlib:

Instalamos seaborn, y validamos su versión con las siguientes instrucciones:

pip install seaborn
pip list | grep seaborn

Por ultimo, realizamos lo mismo con sklearn

pip install sklearn
pip list | grep sklearn

Salimos con exit, y comprobamos el estado de las imágenes, y del los containers de Docker que tenemos actualmente:

docker ps -a
docker images

Creamos la nueva imagen

Hacemos un commit para guardar cambios de contenedor como imagen nueva y nombrar la imagen:

docker commit flamboyant_haibt xsaavedra/machinelearning

xsaavedra/machinelearning  es el nombre de la nueva imagen.

Haremos login de la terminal para poder subir la imagen a nuestro Docker hub. Ingresamos usuario y contraseña de la cuenta de Docker hub tenemos y si todo está correcto, se mostrará un Login Succeeded.

Ejecutamos el comando push y se la pasa el nombre de la imagen creada y se muestra el proceso realizado en progreso.

docker push xsaavedra/machinelearning

Iniciamos la versión actualizada:

docker run -it -p 8888:8888 xsaavedra/machinelearning:latest

Arrancamos Jupyter notebook:

jupyter notebook --ip=0.0.0.0 --allow-root

Accedemos con la contraseña: dl y creando un notebook nuevo, comprobamos las versiones:

import numpy as np
import pandas as pd
import scipy
import statsmodels.api as sm
import matplotlib as plt
import seaborn as sns
import sklearn

print ("Versions:")
print ("=============================")
print ("Numpy:       ", np.__version__)
print ("Pandas:      ",pd.__version__)
print ("SciPy:       ",scipy.__version__)
print ("StatsModels: ",sm.__version__)
print ("MatPlotLib:  ",plt.__version__)
print ("SeaBorn:     ",sns.__version__)
print ("SkLearn:     ",sklearn.__version__)

Varios comandos útiles para trabajar con Docker

Para parar el servicio de Jupyter: ctrl+c

Para salir del contenedor: exit

Para volver a entrar: 

docker container start -ai <nombre_del_contenedor>

Comprobamos los contenedores que tenemos:

docker ps -a

Podemos arrancarlo tanto por el NAME como por el CONTAINER ID

docker container start -ai  nervous_euler

docker container start -ai  1a9abde19ff1

Formas de salir de un contenedor

Hay una forma de salir de un contenedor, que es tecleando el comando exit una vez dentro, algo que se puede hacer también con la combinación de teclas Ctrl+D pulsadas a la vez. Sin embargo, este método también detiene la ejecución del contenedor, algo que posiblemente no sea lo ideal para muchos.

Pues bien, hay una forma de salir de un contenedor sin detenerlo: técnicamente este proceso se llama detach, que se puede traducir por «desprenderse». Para ello, cuando se está dentro de un contenedor, hay que mantener pulsada la tecla Ctrl y luego, sin soltar en ningún momento, presionar secuencialmente primero P y luego Q. Con esto el usuario volverá a ver el prompt de la máquina anfitriona sin dejar de ejecutar el contenedor.

Para eliminar un container:

docker rm nervous_euler

docker rm 1a9abde19ff1

Ver los containers arrancados:

docker container ls

para volver a acceder a ese container:

docker container exec -it 1a9abde19ff1 /bin/bash

Parar el container definitivamente:

docker stop nervous_euler
docker stop 1a9abde19ff1

Y con eso, terminamos los pasos básicos para empezar a trabajar con datos.

¿Te ha gustado? ¡¡Compártelo con el mundo!!