- Personalmente recomiendo Linux, en particular distribuciones como Ubuntu, Mint o Fedora por su facilidad a la hora de instalar.
- En ocasiones las implementaciones en Windows no están completamente integradas e inclusive en ocasiones no están disponibles.
- Una alternativa es Windows Subsystem for Linux, pero lamentablemente no se asegura un 100% de compatibilidad.
- En el caso que poseas un equipo con macOS no debería haber problema.
Interfaz de Línea de Comandos (Command Line Interface / CLI)¶
- Es un método que permite a los usuarios interactuar con algún programa informático por medio de líneas de texto.
- Típicamente se hace uso de una terminal/shell (ver imagen).
- En el día a día dentro de la oficina facilita flujo de trabajo.
- Permite moverse entre manipular directorios y ficheros, instalar/actualizar herramientas, aplicaciones, softwares, etc.
Python¶
Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en la legibilidad de su código.
Se trata de un lenguaje de programación multiparadigma, ya que soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, dinámico y multiplataforma.
Las principales librerías científicas a instalar y que ocuparemos durante el curso son:
- Numpy: Computación científica.
- Pandas: Análisis de datos.
- Matplotlib: Visualización.
- Scikit-Learn: Machine Learning
Durante el curso se ocuparán más librerías a modo de complementación (ejemplo, scipy, seaborn, statsmodels ,etc.)
Entorno Virtual¶
Problemas recurrentes:
- Dependencias de librerías (packages) incompatibles.
- Dificultad a la hora de compartir y reproducir resultados, e.g. no conocer las versiones de las librerías instaladas.
- Tener una máquina virtual para cada desarrollo es tedioso y costoso.
- Miedo constante a instalar algo nuevo y tu script vuelva a funcionar.
Solución
Aislar el desarrollo con tal de mejorar la compatibilidad y reproducibilidad de resultados.
Para el curso (es recomendable)
Package, dependency and environment management for any language—Python, R, Ruby, Lua, Scala, Java, JavaScript, C/ C++, FORTRAN.
¿Por qué Conda?
- Open Source
- Gestor de librerías y entornos virtuales.
- Compatible con Linux, Windows y macOS.
- Es agnóstico al lenguaje de programación (inicialmente fue desarrollado para Python).
- Es de fácil instalación y uso.
Otras alternativas
pip + virtualenv
: el primero es el gestor favorito de librerías de Python y el segundo es un gestos de entornos virtuales, el contra es que es exclusivo de Python.Pipenv
oPoetry
: librerías enfocadas al manejo de dependencias (muy recomendables!)
Entorno de desarrollo integrado¶
Un entorno de desarrollo integrado, en inglés Integrated Development Environment (IDE), es una aplicación informática que proporciona servicios integrales para facilitarle al desarrollador o programador el desarrollo de software.
Normalmente, un IDE consiste de un editor de código fuente, herramientas de construcción automáticas y un depurador. La mayoría de los IDE tienen auto-completado inteligente de código (IntelliSense).
Algunos IDE contienen un compilador, un intérprete, o ambos, tales como NetBeans y Eclipse; otros no, tales como SharpDevelop y Lazarus.
Existen varios IDE populares que sirven para varios lenguajes de programaci+on. En python, el más recomendable es Pycharm.
Pycharm¶
PyCharm es un IDE para desarrolladores profesionales. Fue creado por JetBrains, una empresa conocida por crear excelentes herramientas de desarrollo de software.
Hay dos versiones de PyCharm:
- Community: versión gratuita de código abierto, ligera, buena para Python y desarrollo científico
- Professional: versión de pago, IDE con todas las funciones con soporte para desarrollo web también
Observación¶
Se recomienda que puedan descargar Pycharm (en su versión gratuita) para poder familiarizarse con este tipo de herramientas, aunque el curso está orientado a trabajar sobre la terminal y con jupyter notebook.
Project Jupyter¶
Project Jupyter exists to develop open-source software, open-standards, and services for interactive computing across dozens of programming languages.*
Jupyter Notebook¶
Es una aplicación web que permite crear y compartir documentos que contienen código, ecuaciones, visualizaciones y texto. Entre sus usos se encuentra:
- Limpieza de datos
- Transformación de datos
- Simulaciones numéricas
- Modelamiendo Estadístico
- Visualización de Datos
- Machine Learning
- Mucho más.
Jupyter Lab¶
- Es la siguiente generación de la interfaz de usuario de Project Jupyter.
- Similar a Jupyter Notebook cuenta con la facilidad de editar archivos .ipynb (notebooks) y heramientas como una terminal, editor de texto, explorador de archivos, etc.
- Eventualmente Jupyter Lab reemplazará a Jupyter Notebok (aunque la versión estable fue liberada hace algunos meses).
- Cuenta con una serie de extensiones que puedes instalar (y desarrollar inclurisve.
- Más información en: https://github.com/jupyterlab/jupyterlab-demo
Otros Proyectos¶
Entre los más conocidos se encuentran:
- JupyterHub: Distribuir Jupyter Noterbooks a múltiples usuarios.
- nbviewer: Compartir Jupyter Notebooks.
- Jupyter Book: Construir y publicar libros de tópicos computacionales.
- Jupyter Docker Stacks: Imágenes de Jupyter para utilizar en Docker.
Versionamiento de Código¶
Permite compartir el código fuente de nuestros desarrollos y a la vez mantener un registro de los cambios por los que va pasando.
Herramienta más importante y fundamental dentro del desarrollo.
- Tipos de versionadores de código:
- Sistemas Centralizados: Son los más "tradicionales", por ejemplo SVN, CVS, etc.
- Sistemas Distribuidos: son los que están en auge actualmente como: Git, Mercurial, Bazaar, etc.
Git¶
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
Es importante comprender que Git es la herramienta que permite versionar tus proyectos, sin embargo, a la hora de querer aprovechar más funcionalidades, como compartir o sincronizar tus trabajos se hace necesario utilizar servicios externos. Los más famosos son:
- GitHub
- GitLab
- Bitbucket
Piensa lo siguiente, cualquiera podría implementar un correo electrónico entre dos computadoras conectadas entre ellas por LAN pero no conectadas a Internet. Sin embargo la gente utiliza servicios como Gmail, Outlook, etc. con tal de aprovechar de mejor manera las funcionalidades que ofrece la tecnología del correo electrónico. Esta es una analogía perfecta entre las diferencias de Git y los servicios como GitHub o GitLab.
GitHub¶
GitHub is a development platform inspired by the way you work. From open source to business, you can host and review code, manage projects, and build software alongside 30 million developers.M
Gitlab¶
Gitlab is an open source end-to-end software development platform with built-in version control, issue tracking, code review, CI/CD, and more. Self-host GitLab on your own servers, in a container, or on a cloud provider.
Resumen¶
- Sistema operativo: Cualquiera, sin embargo se recomiendan alternativas basadas en Unix.
- Lenguaje de programación: Python
- Entorno virtual: Conda, preferentemetne a través de miniconda.
- Entorno de trabajo: Jupyter Lab.
- Versionamiento: Git & GitHub.
Configuraciones¶
Git¶
Puede descargar el instalador en la página oficial (escoger el sistema operativo correspondiente).
Para validar si tu instalación fue correcta, debes ejecutar en la terminal:
git --version
Usuarios de Windows que no agregaron Git al PATH
tendrán que utilizar la terminal Git Bash
.
GitHub¶
Crear una cuenta directamente en el sitio oficial.
* Utilizando tu correo institucional puedes registrarte a través de [GitHub Student Developer Pack](https://education.github.com/pack), con el cual puedes acceder a repositorios privados, entre otras cosas.
Google Colab¶
Google Colab será la herramienta oficial que utilizaremos en este curso. Google Colab proporciona un entorno en línea para ejecutar y desarrollar código Python, lo que significa que no es necesario configurar nada en tu computadora local. Simplemente necesitarás una conexión a Internet y una cuenta de Google para aprovechar al máximo este curso.
Con Google Colab, podrás seguir las lecciones, completar ejercicios interactivos y trabajar en proyectos prácticos, todo dentro de un entorno de programación en línea. Además, Colab ofrece la capacidad de colaborar con otros estudiantes en tiempo real, lo que fomenta el aprendizaje colaborativo y la resolución conjunta de problemas.
Portafolio Personal¶
Para los entregables del curso, utilizaremos la plantilla de MAT281-Portfolio.
Nota: Las instrucciones de uso se encuentran en el siguiente archivo.