Introducción¶
Sistema Operativo¶
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.
Screenshot of a sample bash session in GNOME Terminal 3, Fedora 15. Wikipedia
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. (Link)
¿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
Puedes probar Jupyter Lab con solo dos clicks!
Ingresar a este link: https://github.com/jupyterlab/jupyterlab-demo
Hacer click en el icono de binder:
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.
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.
Bitbucket¶
Bitbucket is more than just Git code management. Bitbucket gives teams one place to plan projects, collaborate on code, test, and deploy.
.
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.