Python para todos (3): ScyPy, NumPy, Pandas ...¿Qué librerías necesitamos?

Tuesday, April 3, 2018

Python para todos (3): ScyPy, NumPy, Pandas ...¿Qué librerías necesitamos?

Damos un paso más en nuestro aprendizaje de Python aprendiendo lo que son los módulos, y, en particular las librerías. Veremos para qué sirven algunas de ellas y aprenderemos a importarlas y utilizarlas.

Figura 1: Imagen de una librería.
Figura 1: Imagen de una librería.

¿Qué son los módulos?


Los módulos son la forma que tiene Python de almacenar definiciones (instrucciones o variables) en un archivo, de forma que se puedan usar después en un script o en una instancia interactiva del intérprete (como en nuestro caso, Jupyter Notebook). Así no tenemos que volver a definirlas cada vez. La ventaja principal de que Python nos permita separar un programa en módulos es, evidentemente, que podremos reutilizarlos en otros programaso módulos. Para ello, como veremos más adelante, será necesario importar los módulos que se quieran utilizar. Python viene con una colección de módulos estándar que podemos usar como base para un nuevo programa o como ejemplos para empezar a aprender. 

Python organiza los módulos, archivos .py, en paquetes, que no son más que carpetas que contienen ficheros .py (módulos) , y un archivo de inicio llamado __init__.py. Los paquetes son una manera de estructurar los espacios de nombres de Python usando “nombres de módulos con puntos”. Por ejemplo, el nombre de módulo A.B designa un submódulo llamado B en un paquete llamado A. Tal como el uso de módulos evita que los autores de diferentes módulos tengan que preocuparse de los respectivos nombres de variables globales, el uso de nombres de módulos con puntos evita que los autores de paquetes de muchos módulos, como NumPy o la Biblioteca de Imágenes de Python (Python Imaging Library, o PIL), tengan que preocuparse de los respectivos nombres de módulos.


└── paquete 
    ├── __init__.py 
    ├── modulo1.py 
    ├── modulo2.py 
    └── modulo3.py

Para importar un módulo, se utiliza la instrucción import, seguida del nombre del paquete (si aplica) más el nombre del módulo (sin el .py) que se desee importar. Si las rutas (lo que se conoce como “namespace”) son largas, se pueden generar alias por medio del modificado “as”:

Los módulos deben importarse al principio del programa, en orden alfabético y, primero los propios de Python, luego los de terceros y , finalmente, los de la aplicación.


La librería estándar de Python


Python viene con una biblioteca de módulos estándar, sobre la podemos encontrar toda a información en The Python Standard Library. (Para documentarnos sobre la sintaxix y la semántica también nos vendrá bien tener a mano The Python Language Reference. La librería estándar es muy amplia y ofrece una gran variedad de módulos que realizan funciones de todo tipo, desde módulos escritos en C que ofrecen acceso a funcionalidades del sistema como el acceso a ficheros (file I/O)
Los instaladores de de Python para plataformas Windows, normalmente incluye la librería estándar completa, incluso algunos componentes adicionales. Sin embargo, en las instalaciones Python mediante paquetes  harán falta instaladores específicos.

Un paseo por la Librería estándar


La biblioteca estándar ofrece una gran variedad de módulos que realizan distinto tipo de funciones. Por ejemplo, el módulo OS ofrece las típicas funciones que permiten interactuar con el sistema operativo como decirnos en qué directorio estamos, cambiar de directorio, las funciones de ayuda  dir(os) o help (os), etc, el módulo math que ofrece funciones trigonométricas, logarítmicas, estadísticas etc. También hay módulos para acceder a internet y procesar sus protocolos con urllib.request, para descargar datos de una URLs y smtplib, para enviar correos; o módulos como datetime, que permiten manejar fechas y tiempos, módulos que permiten comprimir datos, o módulos de medida de rendimientos.

No incluimos ejemplos para no alargarnos demasiado, pero si de verdad estáis interesados en aprender, os recomendamos ir probando uno a uno estos módulos (desde la propia Shell de Python, o desde Jupiter) con este Pequeño Paseo por la Biblioteca Estándar que podéis encontrar en la documentación oficial de Python.

Los entornos virtuales


Sin embargo, las aplicaciones de Python muchas veces usan paquetes y módulos que no forman parte de la biblioteca estándar, de hecho Python está diseñado para facilitar esa interoperabilidad. El problema con el que nos encontramos, habitual en los entornos de código abierto, es que muchas veces las aplicaciones necesitan una versión específica de una librería, debido a que dicha aplicación requiere que un bug particular haya sido solucionado o bien la aplicación ha sido escrita usando una versión obsoleta de la interface de la librería.

Esto significa que tal vez no sea posible que nuestra instalación de Python cumpla los requerimientos de todas las aplicaciones. Si la aplicación A necesita la versión 1.0 de un módulo particular y la aplicación B necesita la versión 2.0, entonces los requerimientos entran en conflicto e instalar la versión 1.0 o 2.0 dejará una de las aplicaciones sin funcionar. La solución a este problema es crear un entorno virtual, un directorio que contiene una instalación de Python de una versión en particular, además de unos cuantos paquetes adicionales. De esta forma, diferentes aplicaciones pueden usar entornos virtuales diferentes. Para resolver el ejemplo de requerimientos en conflicto citado anteriormente, la aplicación A puede tener su propio entorno virtual con la versión 1.0 instalada mientras que la aplicación B tiene otro entorno virtual con la versión 2.0. 

Librerías no estándar


Dado que el objetivo de nuestro ejemplo es realizar un experimento de aplicación de machine Learning con Python a un determinado dataset, vamos a necesitar algo más que las librerías de la biblioteca estándar ya que, aunque hemos visto que ofrece algunas funciones matemáticas se nos quedan un poco cortas Por ejemplo, también necesitaremos módulos que nos permitan trabajar con visualizaciones de los datos.  Vamos a conocer cuáles son las más habituales en data science 
  • NumPy : Acrónimo de  Numerical Python. Su características más potente es que puede trabajar con matrices (array) de n dimensiones. También ofrece funciones básicas de algebra lineal, transformada de Fourier, capacidades avanzadas con números aleatorios, y herramientas de integración con otros lenguajes de bajo nivel como Fortran, C y C++
  • SciPy: Acrónimo de Scientific Python. SciPy está construida sobre la librería NumPy. Es una de las más útiles por la gran variedad que tiene de módulos de alto nivel sobre ciencia e ingeniería, como transformada discreta de Fourier, álgebre lineal, y matrices de optimización. s.
  • Matplotlib: es una librería de gráficos, desde histogramas, hasta gráficos de líneas o mapas de calor. También se pueden usar comandos de Latex para agregar expresiones matemáticas a tu gráfica.
  • Pandas: se utiliza para operaciones y manipulaciones de datos estructurados. Es muy habitual usarlo en la fase de depuración y preparación de los datos. Es una librería que se ha añadido recientemente, pero su gran utilidad ha impulsado el uso de Python en la comunidad científica. 
  • Scikit Learn para machine learning: Construida sobre NumPy, SciPy y matplotlib, esta librería contiene un gran número de eficientes herramientas para machine learning y modelado estadístico, como por ejemplo, algoritmos de clasificación, regresión, clustering y reducción de dimensionalidad.
  • Statsmodels: para modelado estadístico. Es un módulo de Python que permite a los usuarios explorar datos, hacer estimaciones de modelos estadísticos y realizar test estadísticos. Ofrece una extensa lista de estadísticas descriptivas, test, funciones gráficas etc para diferentes tipos de datos y estimadores.
  • Seaborn: basada en matplotlib, se usa para hacer más atractivos los gráficos e información estadística en Python. Su objetivo es darle una mayor relevancia a las visualizaciones, dentro  de las tareas de exploración e interpretación de los datos.
  • Bokeh: permite generar atractivos gráficos interactivos en 3D, y aplicaciones web. Se usa para aplicaciones de rendimiento con datos en streaming.
  • Blaze: extiende las capacidades de Numpy y Pandas a datos distribuidos y en streaming. Se puede usar para acceder a datos de un gran número de fuentes como Bcolz, MongoDB, SQLAlchemy, Apache Spark, PyTables, etc.
  • Scrapy: se usa para rastrear la web. Es un entorno muy útil para obtener determinados patrones de datos. Desde la url de la home de una web, puede "bucear" en las distintas páginas del sitio para recopilar información.
  • SymPy: se usa para cálculo simbólico, desde aritmética, a cálculo, álgebra, matemáticas discretas y física cuántica. También permite formatear los resultados en código LaTeX.
  • Requests for accessing the web: trabaja de foram similar a la librería estándar urllib2, pero es más sencilla de codificar.  
Y ahora, os proponemos un sencillo ejercicio para practicar un poco. Consiste en verificar las versiones de librerías que nos ha instalado Anaconda. En la página web de Anaconda podemos ver este diagrama con los distintos tipos de librerías disponibles (IDEs para ciencia de datos, de analíticas y cálculos científicos, de visualización o de Machine Learning. Como veréis, aparecen dos librerías de las que no hemos hablado, Dask y Numba. Así que, también podéis investigar para qué sirven, y comprobar también qué versiones son las que nos ha instalado Anaconda.


Esquema del entorno Anaconda.
Figura 2:Esquema del entorno Anaconda.







P
Para ello, no tenéis más que escribir en vuestro Jupyter notebook, o copiar y pegar, los siguentes comandos, (con alguna pequeña modificación para las librerías que no aparecen).

Con este post ya tenemos todo preparado para empezar lo que es el experimento de Machine Learning en sí. En el próximo, empezaremos con la carga de los datos, y el análisis exploratorio. ¡Ya casi lo tenemos!.



Todos los post de este tutorial, aquí:

No comments:

Post a Comment