summaryrefslogtreecommitdiff
path: root/es/09_extralib.md
blob: ff7b0296e18de3b728c11119863470be86a2e28e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# 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 que tiene como objetivo facilitar el
cálculo en ingeniería, matemática y ciencia en general.

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, descomprime
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 CSS para un
acceso mucho más cómodo.


## 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 más
interesantes a la hora de usar como referencia de cómo se debe programar en
python. Define su propia norma de estilo de programación, basada en la
sugerencia de estilo de python[^pep8] y su desarrollo es extremadamente
elegante.

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]: <https://www.python.org/dev/peps/pep-0008/>


## 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 librería para valorar el interés del código asíncrono.

## Interfaces gráficas

A pesar de que python dispone de un módulo en su librería estándar para tratar
interfaces gráficas llamado TKinter, es recomendable utilizar librerías más
avanzadas para esto. TKinter es una interfaz a la herramienta Tk del lenguaje
de programación Tcl y acompaña a python desde hace años.

En programas simples TKinter es más que suficiente (IDLE, por ejemplo, está
desarrollado con TKinter) pero a medida que se necesita complejidad o capacidad
del usuario para configurar detalles de su sistema suele quedarse pequeño.

Para programas complejos se recomienda usar otro tipo de librerías más
avanzadas como PyQt, PyGTK o wxPython, todas ellas interfaces a librerías
escritas en C/C++ llamadas Qt, GTK y wxWidgets respectivamente. Estas librerías
aportan una visualización más elegante, en algunos casos usando widgets nativos
del sistema operativo en el que funcionan.

Debido a la complejidad del ecosistema nace el proyecto PySimpleGUI, que
pretende aunar las diferentes herramientas en una sola, sirviendo de interfaz a
cualquiera de las anteriores y alguna otra. Además, el proyecto aporta gran
cantidad de ejemplos de uso. PySimpleGUI aún está en desarrollo y el soporte de
algunos de los motores no está terminado, pero es una fuente interesante de
información y recursos.