Lenguaje Python

Para uso en Astronomía y Meteorología

Carlos Feinstein

Cátedra de Computación

Facultad de Cencias Astronómicas y Geofísicas

UNLP

Borrador en redacción

Prefacio

Estos apuntes tienen como fin ser el soporte para consultas de los alumnos de las carreras de Astronomía y Geofísica en la Facultad1 en los temas de la asignatura Computación en el área de la programación en lenguaje Python. Este lenguaje se ha convertido en la actualidad en la base del análi- sis de datos y su principal ventaja es la facilidad de la interacción en “Notebooks” con los datos. Si bien no es un lenguaje para realizar cálculos pesados ya que suele ser my lento para esta tarea. Pero como gran ventaja el Python se ha convertido en el frontend the librerías como la usadas para ajustes de Machine Learning y otras tantas. Su uso en los análisis de datos científicos ya se ha vuelto indiscutible.

Este libro se ha utilizado algunos ejemplos tomados del curso de posgrado que dictó el Dr. Christophe Morisset de la IA-UNAM en nuestra Facultad hace varios años. Más información puede encontrarse en su sitio web http://python-astro.blogspot.mx/ . Ambos cursos son diferentes y el curso de Dr. Morisset fue pensado como de posgrado (en Python2) con el fin último de calcular líneas de emisión en nebulosas. Mientras estos apuntes son diseñados para alumnos de grado (en Python 3), por los cual se encontrarán muchas diferencias de orden y temas entre ambos cursos.

Estas notas son en sí un complemento detallado de los notebooks Python que se utilizan y comentan en las clases teóricas. En este apunte discutiremos las variables, su uso como objetos y estructuras de control del lenguaje Python, así como el uso de las librerías más importantes como Pandas, Numpy, Matplotlib, etc. En el caso especial de la librería Astropy es esta es sólo de interés para los alumnos de astronomía ya que es una colección muy grande de rutinas de uso principalmente astronómico.

El lenguaje Python evoluciona muy rápidamente así que la información en este apunte podría en algún caso tener una duración probablemente corta en el tiempo y por lo tanto fecha de vencimiento. Este apunte es para el uso de las versiones Python 3, funciona parcialmente en las versiones ante- riores de este lenguaje. Ya que en el Python no hay compatibilidad con versiones previas (backwards compatibility)

Este curso se basa en el uso de python sobre un Notebook del entorno de trabajo Jupyter (aunque veremos que funciona bien en el entorno propietario de Google llamado Colaborative. Estos apuntes actualmente están en proceso de escritura y por ello llevan claramente el cartel de BORRADOR, por lo cual es conveniente que si se van utilizar para estudio o consulta se utilice la última versión. Para distinguir versiones, la portada lleva la fecha de la versión.

Introducción a Objetos

En un vector con la idea que se lo usa en física, con 3 componentes podemos describir la posición de una partícula en el espacio y con otro vector de 3 componentes podemos describir su velocidad. En programación orientada a objetos, un objeto es algo parecido, pero que su estructura de compo- nentes es más compleja. Imaginémonos ahora los datos que tiene la Facultad de cada alumno del Observatorio. Esos datos dan una descripción como si fuese un vector que apunta a cada alumno. Es decir, figura el DNI, la dirección de su casa, una serie de datos personales, etc. Algunos de esos datos, a su vez tiene subestructura, por ejemplo la fecha de nacimiento que se divide en tres: día, mes y año, o datos no numéricos como el nombre y el apellido.

Es decir un objeto es un vector, bastante más complejo de los que estamos acostumbrados del álgebra y de la física. La idea principal es que la programación orientada a objetos conecta los datos, sus propiedades y distintas acciones que puedo hacer con ellos. Veamos la nomenclatura y conceptos:

  • Clase: Se llama clase a la definición con la cual se crea el objeto. En nuestro ejemplo, la Universidad decidió que datos son los que debería saber de sus alumnos, con esos datos creó la clase. Este es una definición abstracta. Ya que la clase no es el objeto, sino la forma y la definición.
  • Objeto: es cuando yo aplico la clase para crear algo real, por ejemplo creo un objeto con la definición de la clase que lo puedo llenar con los datos de un alumno en particular. Crear el objeto se denomina como la instancia.
  • Atributos: Son datos que están en el objeto a nos describen características del objeto. Por ejemplo, si el objeto es un vector, un atributo, normalmente, es su tamaño y sus elementos que lo componen. Es decir el objeto, es este caso el vector, sabe cuántos elementos tiene. Estos atributos existen, porque fueron definidos con la clase.
  • Métodos o Funciones: Los objetos tienen funciones predefinidas que se construyen con la clase. Por ejemplo, podría tener asociada a un vector una función que sume todos sus elementos y otra función que me calcule el módulo del vector.
  • Nomenclatura: Si tengo un vector A que es un objeto en mi programa, podría llamar a los elementos individuales como A[n], donde n sería el número de este elemento. Si el atributo de su tamaño está definido en la clase con el nombre size, A.size me daría el tamaño. Si tuviese la función de la suma de componentes del vector definido en la clase con nombre sum, A.sum() calcularía la suma porque estoy llamando a esa función. El atributo siempre tiene un valor ya determinado, la función en un objeto se calcula en el momento que la pido, y además su nombre tiene los paréntesis indicando que es función (hay excepciones, pero en general es la manera de distinguir entre atributos y funciones).
  • Nomenclatura. Si tengo el objeto alumno, y dentro de este objeto esta el elemento número de alumno y se llama numero, alumno.numero será esa variable. Es decir que el objeto.algo me permite acceder a esa variable en particular. Siendo incluso tan complejo como lo necesite la estructura. Pudiendo tener por ejemplo, alumno.fecha.día, alumno.fecha.mes y alumno.fecha.año

Índice: