Introducción a Python

Python

Python es actualmente uno de los lenguajes más utilizados en inteligencia artificial y Ciencia de datos; es un lenguaje de programación de alto nivel que se caracteriza por hacer hincapié en una sintaxis limpia, que favorece un código legible y fácilmente administrable. Python funciona en las plataformas Windows, Linux/Unix, Mac OS X e incluso ha sido portado a las máquinas virtuales de Java (a través de Jython) y .Net (a través de IronPython). Python es un lenguaje libre y fácil de aprender que te permite trabajar más rápido e integrar tus sistemas de manera más eficaz; con Python se puede ganar rápidamente en productividad.

Python, a diferencia de otros lenguajes de programación como C, C++ o Java es interpretado y dinámicamente tipado; lo que quiere decir que no es necesario compilar el fuente para poder ejecutarlo (interpretado) y que sus variables pueden tomar distintos tipos de objetos (dinámicamente tipado); esto hace que el lenguaje sea sumamente flexible y de rápida implementación; aunque pierde en rendimiento y es más propenso a errores de programación que los lenguajes antes mencionados.

Principales fortalezas de Python

Las principales fortalezas que hacen que uno ame a Python son:

  • Es Orientado a Objetos. Python es un lenguaje de programación Orientado a Objetos desde casi su concepción, su modelo de clases soporta las notaciones avanzadas de polimorfismo, sobrecarga de operadores y herencia múltiple. La programación Orientado a Objetos es sumamente fácil de aplicar con la sintaxis simple que nos proporciona Python. Asimismo, también es importante destacar que en Python, la programación Orientado a Objetos es una opción y no algo obligatorio como es en Java; ya que Python es multiparadigma y nos permite programar siguiendo un modelo Orientado a Objetos o un modelo imperativo.

  • Es software libre. Python es completamente libre para ser utilizado y redistribuido; no posee restricciones para copiarlo, embeberlo en nuestros sistemas o ser vendido junto con otros productos. Python es un proyecto open source que es administrado por Python Software Foundation, institución que se encarga de su soporte y desarrollo.

  • Es portable. La implementación estándar de Python esta escrita en C, y puede ser compilada y ejecutada en prácticamente cualquier plataforma que se les ocurra. Podemos encontrar a Python en pequeños dispositivos, como teléfonos celulares, hasta grandes infraestructuras de Hardware, como las supercomputadoras. Al ser un lenguaje interpretado el mismo código fuente puede ser ejecutado en cualquier plataforma sin necesidad de realizar grandes cambios.

  • Es poderoso. Python proporciona toda la sencillez y facilidad de uso de un lenguaje de programación interpretado, junto con las más avanzadas herramientas de ingeniería de software que se encuentran típicamente en los lenguajes compilados. A diferencia de otros lenguajes interpretados, esta combinación hace a Python sumamente útil para proyectos de desarrollo a gran escala.

  • Fácil integración. Los programas escritos en Python pueden ser fácilmente integrados con componentes escritos en otros lenguajes. Por ejemplo la C API de Python permite una fácil integración entre los dos lenguajes, permitiendo que los programas escritos en Python puedan llamar a funciones escritas en C y viceversa.

  • Fácil de usar. Para ejecutar un programa en Python simplemente debemos escribirlo y ejecutarlo, no existen pasos intermedios de linkeo o compilación como podemos tener en otros lenguajes de programación. Con Python podemos programar en forma interactiva, basta tipear una sentencia para poder ver inmediatamente el resultado. Además los programas en Python son más simples, más pequeños y más flexibles que los programas equivalentes en lenguajes como C, C++ o Java.

  • Fácil de aprender. Desde mi punto de vista, esta es sin duda la principal fortaleza del lenguaje; comparado con otros lenguajes de programación, Python es sumamente fácil de aprender, en tan sólo un par de días se puede estar programando eficientemente con Python.

Instalando Python

En Linux

Instalar Python en Linux no es necesario, ya que viene preinstalado en todas las distribuciones más populares.

En Windows

La forma más sencilla de poder instalar Python en Windows es instalando alguna de las distribuciones de Python que ya vienen armadas con los principales módulos. Yo les recomiendo la distribución Anaconda, que se puede descargar en forma gratuita y viene integrada con todos los principales paquetes que vamos a necesitar para trabajar con Python. Una vez que la descargan, simplemente siguen los pasos del instalador y listo, ya tendrán todo un ambiente Python para trabajar en Windows.

Otra distribución de Python que pueden utilizar en Windows, es WinPython, la cual puede ser utilizada incluso en forma portable.

Librerías esenciales para el análisis de datos

Numpy

Numpy, abreviatura de Numerical Python , es el paquete fundamental para la computación científica en Python. Dispone, entre otras cosas de:

  • Un objeto matriz multidimensional ndarray,rápido y eficiente.
  • Funciones para realizar cálculos elemento a elemento u otras operaciones matemáticas con matrices.
  • Herramientas para la lectura y escritura de los conjuntos de datos basados matrices.
  • Operaciones de álgebra lineal, transformaciones de Fourier, y generación de números aleatorios.
  • Herramientas de integración para conectar C, C++ y Fortran con Python

Más allá de las capacidades de procesamiento rápido de matrices que Numpy añade a Python, uno de sus propósitos principales con respecto al análisis de datos es la utilización de sus estructuras de datos como contenedores para transmitir los datos entre diferentes algoritmos. Para datos numéricos , las matrices de Numpy son una forma mucho más eficiente de almacenar y manipular datos que cualquier otra de las estructuras de datos estándar incorporadas en Python. Asimismo, librerías escritas en un lenguaje de bajo nivel, como C o Fortran, pueden operar en los datos almacenados en matrices de Numpy sin necesidad de copiar o modificar ningún dato.

Jupyter

Jupyter promueve un ambiente de trabajo de ejecutar-explorar en contraposición al tradicional modelo de desarrollo de software de editar-compilar-ejecutar. Es decir, que el problema computacional a resolver es más visto como todo un proceso de ejecución de tareas, en lugar del tradicional modelo de producir una respuesta(output) a una pregunta(input). Jupyter también provee una estrecha integración con nuestro sistema operativo, permitiendo acceder fácilmente a todos nuestros archivos desde la misma herramienta.

Algunas de las características sobresalientes de Jupyter son:

  • Su poderoso shell interactivo con soporte para múltiples lenguajes.
  • Notebook, su interfase web con soporte para código, texto, expresiones matemáticas, gráficos en línea y multimedia.
  • Su soporte para poder realizar visualizaciones de datos en forma interactiva. Jupyter esta totalmente integrado con matplotlib.
  • Su simple y flexible interfase para trabajar con la computación paralela.

Matplotlib

Matplotlib es la librería más popular en Python para visualizaciones y gráficos. Matplotlib puede producir gráficos de alta calidad dignos de cualquier publicación científica.

Algunas de las muchas ventajas que nos ofrece Matplotlib, incluyen:

  • Es fácil de aprender.
  • Soporta texto, títulos y etiquetas en formato $\LaTeX$.
  • Proporciona un gran control sobre cada uno de los elementos de las figuras, como ser su tamaño, el trazado de sus líneas, etc.
  • Nos permite crear gráficos y figuras de gran calidad que pueden ser guardados en varios formatos, como ser: PNG, PDF, SVG, EPS, y PGF.

Matplotlib se integra de maravilla con Jupyter (ver más abajo), lo que nos proporciona un ambiente confortable para las visualizaciones y la exploración de datos interactiva.

Pandas

Pandas es una librería open source que aporta a Python unas estructuras de datos fáciles de usar y de alta performance, junto con un gran número de funciones esenciales para el análisis de datos. Con la ayuda de Pandas podemos trabajar con datos estructurados de una forma más rápida y expresiva.

Algunas de las cosas sobresalientes que nos aporta Pandas son:

  • Un rápido y eficiente objeto DataFrame para manipular datos con indexación integrada;
  • herramientas para la lectura y escritura de datos entre estructuras de datos rápidas y eficientes manejadas en memoria, como el DataFrame, con la mayoría de los formatos conocidos para el manejo de datos, como ser: CSV y archivos de texto, archivos Microsoft Excel, bases de datos SQL, y el formato científico HDF5.
  • Proporciona una alineación inteligente de datos y un manejo integrado de los datos faltantes; con estas funciones podemos obtener una ganancia de performance en los cálculos entre DataFrames y una fácil manipulación y ordenamiento de los datos de nuestro data set;
  • Flexibilidad para manipular y redimensionar nuestro data set, facilidad para construir tablas pivote;
  • La posibilidad de filtrar los datos, agregar o eliminar columnas de una forma sumamente expresiva;
  • Operaciones de merge y *join* altamente eficientes sobre nuestros conjuntos de datos;
  • Indexación jerárquica que proporciona una forma intuitiva de trabajar con datos de alta dimensión en una estructura de datos de menor dimensión ;
  • Posibilidad de realizar cálculos agregados o transformaciones de datos con el poderoso motor group by que nos permite dividir-aplicar-combinar nuestros conjuntos de datos;
  • combina las características de las matrices de alto rendimiento de Numpy con las flexibles capacidades de manipulación de datos de las hojas de cálculo y bases de datos relacionales (tales como SQL);
  • Gran número de funcionalidades para el manejo de series de tiempo ideales para el análisis financiero;
  • Todas sus funciones y estructuras de datos están optimizadas para el alto rendimiento, con las partes críticas del código escritas en Cython o C.

Scikit-Lean

Scikit-learn es una librería especializada en algoritmos para data mining y machine learning.

Algunos de los problemas que podemos resolver utilizando las herramientas de Scikit-learn, son:

SciPy

SciPy es un conjunto de paquetes donde cada uno ellos ataca un problema distinto dentro de la computación científica y el análisis numérico. Algunos de los paquetes que incluye, son:

  • scipy.integrate: que proporciona diferentes funciones para resolver problemas de integración numérica.
  • scipy.linalg: que proporciona funciones para resolver problemas de álgebra lineal.
  • scipy.optimize: para los problemas de optimización y minimización.
  • scipy.signal: para el análisis y procesamiento de señales.
  • scipy.sparse: para matrices dispersas y solucionar sistemas lineales dispersos
  • scipy.stats: para el análisis de estadística y probabilidades.

Frameworks para Deep Learning

En estos momentos, si hay un campo en donde Python sobresale sobre cualquier otro lenguaje, es en su soporte para frameworks de Deep Learning. Existen una gran variedad y de muy buena calidad, entre los que se destacan:

  • TensorFlow: TensorFlow es un frameworks desarrollado por Google. Es una librería de código libre para computación numérica usando grafos de flujo de datos.

  • PyTorch: PyTorch es un framework de Deep Learning que utiliza el lenguaje Python y cuenta con el apoyo de Facebook.

  • Theano: Theano es una librería de Python que permite definir, optimizar y evaluar expresiones matemáticas que involucran tensores de manera eficiente.

  • CNTK: CNTK es un conjunto de herramientas, desarrolladas por Microsoft, fáciles de usar, de código abierto que entrena algoritmos de Deep Learning para aprender como el cerebro humano.

  • Keras: Keras es una librería de alto nivel, muy fácil de utilizar. Está escrita y mantenida por Francis Chollet, miembro del equipo de Google Brain. Permite a los usuarios elegir si los modelos que se construyen serán ejecutados en el grafo simbólico de Theano, TensorFlow o CNTK.

  • MXNet: MXNet es una librería flexible y eficiente para armar modelos de Deep Learning con soporte para varios idiomas.