Table of Contents
Preface
1. IPython: Beyond Normal Python
- Help and Documentation in IPython
- Keyboard Shortcuts in the IPython Shell
- IPython Magic Commands
- Input and Output History
- IPython and Shell Commands
- Errors and Debugging
- Profiling and Timing Code
- More IPython Resources
2. Introduction to NumPy
- Understanding Data Types in Python
- The Basics of NumPy Arrays
- Computation on NumPy Arrays: Universal Functions
- Aggregations: Min, Max, and Everything In Between
- Computation on Arrays: Broadcasting
- Comparisons, Masks, and Boolean Logic
- Fancy Indexing
- Sorting Arrays
- Structured Data: NumPy's Structured Arrays
3. Data Manipulation with Pandas
- Introducing Pandas Objects
- Data Indexing and Selection
- Operating on Data in Pandas
- Handling Missing Data
- Hierarchical Indexing
- Combining Datasets: Concat and Append
- Combining Datasets: Merge and Join
- Aggregation and Grouping
- Pivot Tables
- Vectorized String Operations
- Working with Time Series
- High-Performance Pandas: eval() and query()
- Further Resources
4. Visualization with Matplotlib
- Simple Line Plots
- Simple Scatter Plots
- Visualizing Errors
- Density and Contour Plots
- Histograms, Binnings, and Density
- Customizing Plot Legends
- Customizing Colorbars
- Multiple Subplots
- Text and Annotation
- Customizing Ticks
- Customizing Matplotlib: Configurations and Stylesheets
- Three-Dimensional Plotting in Matplotlib
- Geographic Data with Basemap
- Visualization with Seaborn
- Further Resources
5. Machine Learning
- What Is Machine Learning?
- Introducing Scikit-Learn
- Hyperparameters and Model Validation
- Feature Engineering
- In Depth: Naive Bayes Classification
- In Depth: Linear Regression
- In-Depth: Support Vector Machines
- In-Depth: Decision Trees and Random Forests
- In Depth: Principal Component Analysis
- In-Depth: Manifold Learning
- In Depth: k-Means Clustering
- In Depth: Gaussian Mixture Models
- In-Depth: Kernel Density Estimation
- Application: A Face Detection Pipeline
- Further Machine Learning Resources
Appendix: Figure Code
Curso de Python Avanzado
Información
Este Curso en Python Avanzado pretende completar el contenido del Curso de Iniciación, introduciendo técnicas más complejas y enfatizando en las buenas prácticas para la construcción de software orientado a la producción.¿Cuando?
Todos los días del 9 al 14 de Mayo, de 9 a 14:30 de la mañana. 25 horas en total.¿Dónde?
En la sala de juntas del Instituto Andaluz de Astrofísica.Tutorías
Podéis realizar consultas sobre los contenidos del curso al profesor en su dirección de correo electrónico: raskolnikov@gnu.orgPizarra Virtual
Vamos utilizar una pizarra virtual online para facilitar la interacción en la corrección de ejercicios.Accede aquí a la pizarra virtual
Requisitos
Para realizar el curso es recomendable utilizar un ordenador para seguir los ejemplos y ejercicios.Especialmente durante el cuarto día de clase será necesario utilizar una distribución basada enDebian , como Ubuntu o la completamente libre Trisquel.
Máquina virtual
Si no disponéis de una distribución de GNU/Linux basada en Debian lo más fácil es que os instaléis la máquina virtual basada en VirtualBox que hemos preparado.Os podéis descargar la máquina virtual aquí. Las instrucciones para instalarla las podéis encontrar en la web del Curso de Iniciación.
Contenidos
Bloque 0: El lenguaje en profundidad
Materiales
- Tema 0: Introducción
- Tema 1: Programación Funcional
- Tema 2: Orientación a Objetos
- Tema 3: Cuestiones Avanzadas
Bloque 1: Interfaces Gráficas
Materiales
- Tema 4: Introducción a GTK
- Tema 5: Diseñando aplicaciones con Glade
Requisitos
Para este tema hacen falta Glade, GTK y sus bindings para Python, PyGTK. Se pueden instalar en un sistema basado en Debian con el comando:sudo apt-get install python-gtk2-dev gladeSi usáis el entorno Gnome, es mejor instalar:
sudo apt-get install glade-gnomeEste software está preinstalado en la máquina virtual que se describe más arriba.
Bloque 2: Producción de Software
Materiales
- Tema 6: Pruebas de calidad
- Tema 7: Bibliotecas externas
- Tema 8: Distribución del software
Requisitos
En este bloque es necesario el software PyFlakes, PyLint y PyChecker, en el tema 6. Además, hace falta el compilador GCC en tema 7. En el tema 8 es necesario Stdeb y Setuptools.Todo esto puede instalarse en una distribución basada en Debian con el comando:
$ sudo apt-get install pyflakes pylint pychecker build-essential \ python-stdeb python-setuptools
Bloque 3: Sistemas Web
Para este bloque, que finalmente no dio tiempo a dar, no llegamos a preparar materiales específicos. Sin embargo, os dejo los siguientes enlaces y materiales que pueden ser útiles para guiar vuestro estudio.- Estas diapositivas son de un curso de introducción a Django que cubre todo y más de lo que pensábamos dar en nuestro curso. Buena parte de las diapositivas están organizadas a modo de tutorial y puede ser útil seguirlas paso a paso para realizar una primera aproximación a Django.
- La documentación oficial de Django es muy extensiva. A parte de la documentación de referencia, es muy recomendable seguir el tutorial paso a paso para realizar una primera incursión en el sistema.
- El año pasado programé el proyecto Yet Another Auction Service como parte de un curso de desarrollo web. Es una página de subastas muy sencilla, que puede servir de ejemplo. Como apuntes interesantes, tiene una API web basada en REST, pruebas de unidad usando el sistema específico de Django y presenta gráficas usando Matplotlib.
Material adicional
Configuración de Emacs
A algunos alumnos os ha gustado las facilidades que ofrece Emacs el como editor de Python. Os indico aquí los trucos especiales de nuestra configuración configuración personal de Emacs.Integración de IPython
Lo primero que necesitáis es el python-mode avanzado mantenido por la comunidad de Emacs, que sustituye al que viene por defecto con el paquete. El módulo pymacs además permite extender Emacs en lenguaje de programación Python. Los instalamos en Debian y derivados con:$ sudo apt-get install pymacs python-mode ipythonPara integrar IPython correctamente es necesario un módulo adicional para Emacs, que podéis descargar aquí: ipython.el
Una vez hecho esto, debéis indicar a Emacs la carpeta dónde tenéis instalado el módulo y que lo cargue. Por ejemplo, yo lo tengo instalado en ~/.emacs.d/lisp/ipython.el, y mi fichero de configuración de Emacs ~/.emacs incluye estas lineas:
(add-to-list 'load-path (expand-file-name "~/.emacs.d/lisp")) (require 'ipython)Una vez hecho esto, ya podéis lanzar el intérprete IPython dentro de Emacs ejecutando M-x py-shell o directamente con C-c !. Cuando está abierta, podéis enviar el fichero de Python actual entero al intérprete de Python ejecutando C-c C-c. Además, mi fichero de configuración de Emacs contiene:
(eval-after-load "python-mode" '(progn (add-hook 'python-mode-hook (lambda () (local-set-key (kbd "C-c C-e") 'py-execute-region)))))Una vez configurado así Emacs permite enviar al intérprete sólo la región seleccionada actualmente con el comando C-c C-e.
Integración de PyFlakes
Como veremos en el tema 7 del curso, el programa PyFlakes permite realizar algunas comprobaciones de errores de programación en Python, como comprobar que las variables que usamos han sido declaradas, o que los import que realizamos se usan realmente en el código.Podemos hacer que Emacs muestre automáticamente en rojo las lineas erróneas detectadas por PyFlakes integrándolo con el módulo flymake, que viene de serie con Emacs desde su versión 23. En concreto, las lineas de configuración necesarias son:
(require 'flymake) (defun flymake-pyflakes-init () ;; Make sure it's not a remote buffer or flymake would not work (let* ((temp-file (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace)) (local-file (file-relative-name temp-file (file-name-directory buffer-file-name)))) (list "pyflakes" (list local-file)))) (setq flymake-allowed-file-name-masks '(("\\.py\\'" flymake-pyflakes-init)))FlyMake es una herramienta muy potente, nos permite además integrar el resaltado de errores en muchos otros formatos, como LaTeX, o incluso otros compilados como C. Tenéis más información aquí.
Parece que FlyMake no se lleva muy bien con IPython, pero las siguientes lineas de configuración solucionan el problema:
(add-hook 'python-mode-hook (lambda () (unless (eq buffer-file-name nil) (flymake-mode t))))