Categoría: Developer Technologies
Python Básico: Preparando nuestro entorno de desarrollo de Machine Learning con Python
En el presente capítulo aprenderemos qué es Python y cómo preparar nuestro entorno para desarrollar soluciones de Machine Learning empleando la distribución de Python Anaconda, el editor de código Visual Studio Code y los Jupyter Notebooks.
Python
Python es un lenguaje de programación orientado a objetos de código abierto que popularmente se emplea para:
- Desarrollo del lado del servidor de aplicaciones web
- Desarrollo software con bases de datos
- Matemáticas complejas
- Estadística
- Machine learning
- Ejecución de comandos de sistema
En el mercado podemos encontrar una variedad de distribuciones o implementaciones de Python como: CPython, IronPython, WinPython, Jython, PyPy, MicroPython, Anaconda, ActivePython, entre otros. Cada uno de ellos aporta ventajas especiales para determinados sistemas, plataformas de desarrollo o tipos de soluciones.
Particularidades
- Python emplea saltos de línea para completar las instrucciones, a diferencia de otros lenguajes de programación que suelen usar “;”.
- Python hace uso de la sangría (caracteres en blanco al comenzar una instrucción) para definir el contexto de los bucles, funciones o clases, a diferencia de otros lenguajes de programación que suelen utilizar corchetes para este propósito.
Anaconda
Descargar Python 3 desde https://www.python.org instalar cada uno de los paquetes necesarios para trabajar en Data Science puede ser tedioso, sobretodo para aquellos que recién estamos empezando. Por ello, una de las mejores alternativas para levantar nuestro entorno es Anaconda, la cual es una distribución de Python que viene lista con todo lo que necesitamos para Machine Learning y Data Science, asímismo cuenta con una intuitiva interfaz gráfica que nos permitirá organizar, instalar, actualizar y desinstalar los paquetes de forma muy sencilla y amigable.
Descarga
Para nuestro objetivo de aprendizaje, lo ideal será descargar la Edición Individual desde https://www.anaconda.com

El instalador de Python 3.8 para Windows (64-bits) pesa aproximadamente 468 MB.
Instalación
Antes de empezar la instalación asegurémonos de tener todos los permisos o privilegios de administrador en el sistema que nos encontremos.
Hagamos doble click sobre el instalador y sigamos por el asistente de instalación. Notemos que el espacio requerido para la instalación es de aproximadamente de 2.7 GB
Seleccionemos la opción avanzada “Registrar Anaconda3 como el Python 3.8 de sistema” y continuemos para que el asistente pueda instalar Python y cada uno de los paquetes que necesitaremos.
En la carpeta de destino de la instalación también se creará un ejecutable llamado Uninstall-Anaconda3.exe que nos permitirá efectuar la desinstalación en el momento que se requiera.
Configuración
Una vez completada la instalación, vayamos a “Propiedades del Sistema“. Podemos ingresar a través de la ruta “Panel de Control > Seguridad o Sistema > Sistema” o haciendo click derecho sobre Mi PC e ingresando a Propiedades.

Desde la parte inferior de la sección de “Avanzado“, ingresemos a la vista de “Variables de Entorno“, seleccionemos “Path” y demos en Editar. En esta parte debemos agregar una nueva entrada que apunte a la carpeta Scripts en el lugar instalación de Anaconda, que en nuestro caso sería “C:\anaconda3\Scripts”.


Luego, ejecutemos Anaconda Navigator desde nuestra lista de programas instalados en el sistema.
En la vista de inicio, esta aplicación nos permite instalar o ejecutar otras aplicaciones relacionadas al desarrollo de Machine Learning, Minería de Datos o Estadística. Algunas de ellas, como Glueviz o Orange 3, nos pueden ayudar en la visualización de datos a través de una interfaz gráfica, pero son limitadas en relación al desarrollo de modelos de Deep Learning con redes neuronales o proyectos que requieran la integración con un sistema de control de versiones y de despliegue.

En la vista de ambientes, podemos actualizar, eliminar o degradar los paquetes de un ambiente de desarrollo hacia alguna versión específica que necesitemos.

También podemos crear nuevos ambientes y personalizarlos para que trabajen con paquetes y versiones distintas de Python en caso necesitemos varios ambientes de desarrollo con diferente conjunto de paquetes para diferentes proyectos.

Anaconda Prompt o terminal
Para trabajar con Python a través de una interfaz de línea de comandos (CLI) en Windows, debemos ejecutar “Anaconda Prompt (anaconda 3)“, y, si nos encontramos en macOS o Linux, debemos abrir la terminal.

Y seguido de ello, debemos ejecutar el comando python.

Visual Studio Code
Segun Wikipedia, Visual Studio Code es un editor de código fuente desarrollado por Microsoft para Windows, Linux y macOS. Incluye soporte para la depuración, control integrado de Git, resaltado de sintaxis, finalización inteligente de código, fragmentos y refactorización de código.
Descarga
Parece algo útil así que descargémoslo desde https://code.visualstudio.com

El instalador de Visual Studio Code 1.53 para Windows (64-bits) pesa aproximadamente 68 MB.
Instalación
Hagamos doble click sobre el instalador y sigamos por el asistente de instalación. El espacio que se requerirá para la instalación es de aproximadamente de 259.7 MB
Seleccionemos la opción “Add to PATH” y ambos “Add ‘Open with Code’ action to Windows Explorer” ya que el primero permitirá la ejecución del comando code desde la línea de comandos de sistema y el segundo agregará un acceso rápido para abrir archivos y carpetas con Visual Studio Code.
Terminada la instalación, ejecutemos Visual Studio Code e ingresemos a la vista de Extensiones (“Ctrl+Shift+X”) para buscar e instalar las siguientes 2 extensiones: Python (Microsoft) y Jupyter (Microsoft)

Nuevo archivo Python
Abramos nuestra carpeta de trabajo con “Abrir con Code”.

Y notemos que, ya sea creando los archivos Python (.py) desde el Explorador de Archivos del sistema o desde Visual Studio Code, igual se muestran en el siguiente explorador:

Para ejecutar Python debemos ubicarnos en la línea de código de interés o seleccionar las líneas de código que deseamos ejecutar y presionar “Shift+Enter”.
Jupyter Notebook
Jupyter Notebook (.ipynb) es un tipo de documento en formato JSON, que contiene toda la información necesaria para construir una lista ordenada de celdas de entrada/salida que pueden contener código (Python, C#, R, etc.), Markdown y gráficos.
No necesitamos descargar ni instalar nada puesto que Anaconda y Visual Studio Code ya gestionaron todo lo necesario para emplear este tipo de documento en nuestros proyectos.
Nuevo Jupyter Notebook
Abramos la lista de comandos de Visual Studio Code con “Ctrl+Shift+P” y ejecutemos “Jupyter: Create New Blank Jupyter Notebook” para crear nuestro primer documento.

Si deseamos abrir un archivo .ipynb con Visual Studio Code solo debemos darle click derecho y seleccionar la opción “Abrir con Code”.
Finalmente, podemos presionar “Shift+Enter” o usar alguna de las opciones disponibles en la parte superior del documento para ejecutar la(s) celda(s) de nuestro Jupyter Notebook.

Otras lecturas
Eche un vistazo a algunos de estos:
Artículos
Working with Jupyter Notebooks in Visual Studio Code
https://code.visualstudio.com/docs/python/jupyter-support
Getting started with Anaconda — Anaconda documentation
https://docs.anaconda.com/anaconda/user-guide/getting-started/
Algebra Lineal: Introducción

OTRAS LECTURAS
Eche un vistazo a algunos de estos:
APIs
Artículos
[Xamarin] ¿Primera vez publicando con Visual Studio y iOS 11.2?
1. Assets Catalog
2. Provisioning Profiles
3. IPA
4. TestFlight
[Xamarin] Usando Mapbox en Xamarin.Android
Mapbox
Map Style
Nuget
[.NET] Entendiendo el Patrón de Repositorio
Este patrón nos ayuda mejorar la mantenibilidad y la capacidad de prueba. Con la correcta separación de intereses, nuestra lógica de negocio ya se puede concentrar en el negocio en sí y no preocuparse en operaciones de bajo nivel, como abrir una conexión a una base de datos o algún socket.
Este patrón nos habla de una capa intermedia entre la lógica de negocio y la fuente de datos, pero hay muchas formas de entenderlo así que exploremos algunos puntos.
1. Reponsabilidad única
2. Repositorios genéricos
3. Segregación de interfaces
Algunos extienden esto usando inyección de dependencias, otros se organizan usando espacios de nombre y otros hacen cosas diferentes. La resolución o complejidad de esto ya depende de los requisitos del proyecto o elección de cada uno.
[.NET] ¿Cómo trabajar async con Enterprise Library?
Lo bueno de este asunto es que desde .NET 4.5 y C# 5, la programación asíncrona nos permite fácilmente lidear con esta clase de situaciones, un claro ejemplo sería la forma en que HttpClient trabaja, pero igual nos podemos encontrar con casos que no estan listos para esto, por eso ahora veremos como trabajar asíncronamente con Enterprise Library.
En el siguiente código podemos apreciar un controllador que devuelve una lista de elementos.
[.NET] ¡No hagan Dispose() en HttpClient!
- Fue diseñado especialmente para la creciente necesidad de las solicitudes bajo una arquitectura REST y Henrik F. Nielson, el autor inicial de HTTP, esta involucrado en su desarrollo y diseño.
- Puede ser usado en aplicaciones de escritorio para Windows, Linux o Mac, así como para aplicaciones móviles en Android o iOS y aplicaciones de IoT con Windows 10.
- Puede reusar DNS resueltos y te permite configurar facilmente headers y cookies.
- Una única instancia de HttpClient puede hacer solicitudes concurrentes.
- La API es sencilla y eso es genial para hacer pruebas.
- Todas las operaciones de espera son asíncronas.
¿Qué es lo que sucede?
Unable to connect to the remote server
System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted
¿Qué podemos hacer?
[.NET] ¿Cómo crear y publicar un paquete NuGet?
Crear o seleccionar un proyecto de librería de clases
Lo primero que hay que hacer es crear o seleccionar un proyecto de librería de clases, para este ejemplo estoy usando un proyecto .NET Standard.
Configurar las propiedades del paquete
El segundo paso es configurar las propiedades del paquete, para ello vamos a propiedades del proyecto y nos ubicamos en la configuración de paquete. Aquí encontraremos los metadatos de nuestro de librería de clases. No todos los campos son obligatorios, solo asegúrense de tener un Id de paquete único.
Observemos que los campos de la licencia, proyecto y repositorio corresponden a un proyecto en GitHub y es que este proyecto lo he subido ahí. Probablemente se hagan preguntas sobre la licencia, pero no se precoupen por ello, porque si entramos a GitHub nos daremos cuenta que nos ayudan a generar uno.
Volviendo a los metadatos, solo queda mencionar que la imagen correspondiente al icono debes subirla a algun lado.
Ejecutar el comando de empaquetado
Ahora el tercer paso solo involucra hacer click en la opción empaquetar del proyecto, asegurándonos claro que este en Release.
Una vez hecho esto, solo confirmemos que nuestro paquete se generó correctamente.
Publicar el paquete
El cuarto y último paso, consiste en ingresar a nuestra cuenta de nuget.org, para ello solo iniciemos sesión gratuitamente con nuestra cuenta de Microsoft. Una vez hecho eso seleccionemos la opción Subir Paquete y busquemos nuestro archivo.
Luego solo revisemos que los metadatos son los que corresponden y en la parte de documentación podemos hacer referencia a nuestro README.
Simplemente copiando y pegando el enlace que obtenemos al dar click en Raw. Confirmamos que la documentación es la nuestra y damos en publicar.
Ahora para que nuestro paquete este disponible para el mundo deben pasar algunas horas, si queremos actualizar la documentación, podemos darle edit package y hacemos algo muy similar a lo que hicimos hace un momento.
Si ahora desde nuestro perfil seleccionamos la opción ver listado de paquetes, nos daremos cuenta que no estará nuestra última versión ahí, hay que esperar.
Pero si tenemos una anterior, desde ahí podremos darnos cuenta en la parte inferior que nuestra última versión esta pasando por un proceso de validación.
[.NET] Principio de Inversión de Dependencias (D)
“Los módulos de alto nivel no deben depender de módulos de bajo nivel. Ambos deben depender de abstracciones.”
“Las abstracciones no deben depender de detalles, son los detalles los que deben depender de abstracciones.”