From 8f4736604295dd65951b3763644959a690e392ca Mon Sep 17 00:00:00 2001 From: Ekaitz Zarraga Date: Thu, 5 Dec 2019 12:09:23 +0100 Subject: Extra libraries --- src/09_extralib.md | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 src/09_extralib.md diff --git a/src/09_extralib.md b/src/09_extralib.md new file mode 100644 index 0000000..fd40d2c --- /dev/null +++ b/src/09_extralib.md @@ -0,0 +1,137 @@ +# Librerías útiles + +Ahora que ya sabes cómo instalar librerías y que has visto que muchas +funcionalidades están contenidas en la librería estándar de python es un buen +momento para que visites varios proyectos que aportan recursos muy interesantes +a la hora de resolver problemas. Debido al carácter de uso general de python, +estas librerías aportan facilidades muy diversas. El criterio para escogerlas +parte de la experiencia personal del autor de este documento y añade algunas +librerías y herramientas que pueden ser interesantes debido a su amplio uso en +la industria. + +## Librerías científicas: ecosistema SciPy + +SciPy es un ecosistema de librerías de cálculo que tiene como objetivo +facilitar el trabajo de ingenieros, científicos y matemáticos en sus +respectivos trabajos. Puedes considerarlo como un **Matlab** para python +separado por componentes independientes. + +Además de ser el nombre del ecosistema, comparte nombre con una de las +librerías fundamentales de éste. El ecosistema está formado por varias +librerías, entre ellas se encuentran: + +- Numpy: un paquete de computación científica para python. Soporta matrices + multidimensionales, funciones sofisticadas y álgebra lineal, entre otras. + +- SciPy: librería basada en Numpy que aporta rutinas numéricas eficientes para + interpolación, optimización, algebra lineal, estadística y otros. + +- SymPy: una librería de matemática simbólica para python que complementa el + resto de librerías del ecosistema, ya que casi todas están orientadas al + análisis numérico. + +- Matplotlib: librería para representar gráficos y figuras científicas en 2D. + +- Pandas: aporta unas estructuras de datos muy potentes basadas en tablas, su + objetivo es reforzar a python a la hora de tratar datos. El área de esta + librería es el del análisis de datos, pero puede combinarse con otras áreas + de estudio como la econometría (ver el proyecto statsmodels). Esta librería + dispone de un ecosistema muy poderoso a su alrededor debido al auge del + análisis de datos en la industria del software. Muchas librerías comparten la + interfaz de Pandas por lo que tener nociones de su comportamiento abre muchas + puertas en el sector del análisis de datos. Al igual que ocurre en SciPy, Las + estructuras de datos de Pandas también se basan en Numpy. + +- IPython: más que una librería, IPython es una herramienta. Se trata de una + REPL interactiva (su propio nombre viene de *Interactive Python*) que añade + diversas funcionalidades sobre la REPL de python habitual: histórico de + comandos, sugerencias, comandos mágicos (*magic*) que permiten alterar el + comportamiento de la propia interfaz y un larguísimo etcétera. IPython, + además, sirve como núcleo de los cuadernos Jupyter que integran una shell de + python con visualización de tablas y gráficos para generar documentos estilo + *literate programming*. + +## Machine Learning: ScikitLearn + +ScikitLearn es una librería de machine learning muy potente, implementa gran +cantidad de algoritmos y tiene una documentación extensa, sencilla y educativa. + +Encaja a la perfección con el ecosistema SciPy, ya que se basa en NumPy, SciPy +y Matplotlib. + +## Peticiones web: Requests + +Requests es una librería alternativa al módulo `urllib` aportado por la +librería estándar de python. Se describe a sí misma como «HTTP para seres +humanos», sugiriendo que `urllib` no es cómoda de usar. + +Requests gestiona automáticamente las URL-s de las peticiones a partir de los +datos que se le entreguen, sigue redirecciones, almacena cookies, decomprime +automáticamente, decodifica las respuestas de forma automática, etc. En general +es una ayuda cuando no se quiere dedicar tiempo a controlar cada detalle de la +conexión de modo manual. + +## Manipulación de HTML: Beautifulsoup + +Beautifulsoup es una librería de procesado de HTML extremadamente potente. +Simplifica el acceso a campos de ficheros HTML con una sintaxis similar a los +objetos de python, permitiendo acceder a la estructura anidada mediante el uso +del punto en lugar de tener que lidiar con consultas extrañas o expresiones +regulares. Esta funcionalidad puede combinarse con selectores CSS4 para un +acceso mucho más cómodo. + +Muy usada en conjunción con Requests, para el desarrollo de aplicaciones de +web-scraping. Aunque, si se desea usar algo más avanzado, se recomienda usar el +framework Scrapy. + +## Tratamiento de imagen: Pillow + +Pillow es un fork de la librería PIL (*Python Imaging Library*) cuyo desarrollo +fue abandonado. En sus diversos submódulos, Pillow permite acceder a datos de +imágenes, aplicarles transformaciones y filtros, dibujar sobre ellas, cambiar +su formato, etc. + +## Desarrollo web: Django, Flask + +Existen infinidad de frameworks y herramientas de desarrollo web en python. Así +como en el caso del análisis de datos la industria ha convergido en una +herramienta principal, Pandas, en el caso del desarrollo web hay muchas +opciones donde elegir. + +Los dos frameworks web más usados son Django y Flask, siendo el segundo menos +común que el primero pero digno de mención en conjunción con el otro por varias +razones. + +La primera es la diferencia en la filosofía: así como Django decide con qué +herramientas se debe trabajar, Flask, que se define a sí mismo como +microframework, deja en manos de quien lo usa la elección de qué herramientas +desea aplicarle. Cada una de las dos filosofías tiene ventajas y desventajas y +es tu responsabilidad elegir las que más te convengan para tu proyecto. + +La segunda razón para mencionar Flask es que su código fuente es uno de los +proyectos de referencia. Define su propia norma de estilo de programación, +basada en la sugerencia de estilo de python[^pep8] y su desarrollo es +extremadamente elegante. Es un buen proyecto a usar como referencia. + +Django, por su parte, ha sido muy influyente y muchas de sus decisiones de +diseño han sido adoptadas por otros frameworks, tanto en python como en otros +lenguajes. Lo que sugiere que está extremadamente bien diseñado. + +A pesar de las diferencias filosóficas, existen muchas similitudes entre ambos +proyectos por lo que aprender a usar uno de ellos facilita mucho el uso del +otro y no es aprendizaje perdido. No tengas miedo en lanzarte a uno. + +[^pep8]: + + +## Protocolos de red: Twisted + +Twisted es motor de red asíncrono para python. Sobre él se han escrito +diferentes librerías para gestión de protocolos de Internet como DNS, via +Twisted-Names, IMAP y POP3, via Twisted-Mail, HTTP, via Twisted-Web, IRC y +XMPP, via Twisted-Words, etc. + +El diseño asíncrono del motor facilita sobremanera las comunicaciones +eficientes. Programar código asíncrono en python es relativamente sencillo, +pero ha preferido dejarse fuera de este documento por diversas razones. Te +animo a indagar en esta libreria para valorar el interés del código asíncrono. -- cgit v1.2.3