Curso Programación Programación para Oceanografía y Meteorología Lenguaje de programación en Python
Raúl Andrés Montoya Sánchez Oceanógrafo Magíster Magíster en Ingeniería - Recursos Recursos Hidráulicos PhD(c) en Ingeniería - Recursos Hidráulicos correo:
[email protected],
[email protected]
Universidad de Antioquia Corporación Académica Ambiental Programa de Oceanografía Turbo, 2017-II
Temario general del curso: 1. Introducción 1. Introducción 2. Aritmética y evaluación de expresiones matemáticas en Python 3. Manejo de Caracteres 4. Números complejos 5. Listas, Tuplas y Diccionarios 6. Impresión de datos en pantalla 7. Bucles y condicionales 8. Vectores en Python 9. Visualización 3-D: función PLOT 10. Matrices en Python 11. Lectura/escritura de ficheros: texto plano (ASCII), binarios de Python, binarios MATLAB, etc.
12. Funciones y módulos de usuario 13. Visualización 2-D: funciones BAR, HIST, BOXPLOT, ... 14. Lectura de archivos: NetCDF, HDF-4, HDF-5 15. Visualización 3D: funciones CONTOURF, CONTOUR, QUIVER 16. Aplicación de las librerias:
• Libreria Scipy (estadística, interpolación , etc.) • Libreria Pandas (dataframe) • Libreria Basemap (proyecciones, mapas, etc.) • Libreria airsea • Libreria seawater, gsw
17. Programación orientada a objetos
2
Temario general del curso: 1. Introducción 1. Introducción 2. Aritmética y evaluación de expresiones matemáticas en Python 3. Manejo de Caracteres 4. Números complejos 5. Listas, Tuplas y Diccionarios 6. Impresión de datos en pantalla 7. Bucles y condicionales 8. Vectores en Python 9. Visualización 3-D: función PLOT 10. Matrices en Python 11. Lectura/escritura de ficheros: texto plano (ASCII), binarios de Python, binarios MATLAB, etc.
12. Funciones y módulos de usuario 13. Visualización 2-D: funciones BAR, HIST, BOXPLOT, ... 14. Lectura de archivos: NetCDF, HDF-4, HDF-5 15. Visualización 3D: funciones CONTOURF, CONTOUR, QUIVER 16. Aplicación de las librerias:
• Libreria Scipy (estadística, interpolación , etc.) • Libreria Pandas (dataframe) • Libreria Basemap (proyecciones, mapas, etc.) • Libreria airsea • Libreria seawater, gsw
17. Programación orientada a objetos
2
Evaluación del curso Este curso será evaluado en 8 controles y un parcial.
Qui uizz
Porcent centaaje
Quiz 1 Quiz 2 Quiz 3 Quiz 4 Quiz 5 Quiz 6 Quiz 7 Quiz 8 Parcial
10 % 10 % 10 % 10 % 10 % 10 % 10 % 10 % 20 %
Fecha 18/09/2017
Por definir
Total 100 100 %
3
Índice 1. Generalidades de Python 1.1. 1.2. 1.3. 1.4. 1.5.
5
Estructura y elementos del lenguaje . Página web de descarga del software . Editor de Python - Spyder . . . . . . . Editor de Python: Jupyter . . . . . . . Errores comunes al crear un programa
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
2. Librerias o paquetes importantes en Python 2.1. 2.2. 2.3. 2.4.
Paquetes instalados en Python 3.5 (básico) . . . . . . . . Paquetes importantes instalados en Anaconda . . . . . . Paquetes importantes no instalados en Anaconda . . . . Instalación de librerias (paquetes) . . . . . . . . . . . . 2.4.1. Instalación de paquetes: usando conda . . . . . . 2.4.2. Instalación de paquetes: usando pip . . . . . . . 2.4.3. Instalación de paquetes: forma manual . . . . . . 2.4.4. Otros sitios para descargar librerias comprimidas 2.5. Utilización de los paquetes . . . . . . . . . . . . . . . . 2.5.1. Importar el módulo con su nombre original . . . 2.5.2. Importar algunas funciones del módulo . . . . . 2.5.3. Importar el módulo y renombrarlo . . . . . . . . 2.5.4. Importar todas las funciones del módulo . . . . .
5 6 6 7 10
11 11 11 11 12 12 12 12 13 13 13 14 14 14
3. Cambiar de directorio
14
4. Formatos que trabaja Python
15
5. Palabras claves
15
6. Operadores aritméticos en Python
16
4
7. Funciones mateméticas en NumPy
16
7.1. Funciones algebraicas . . . . . . . . . . . . . . . . . . . 7.2. Funciones trigonométricas . . . . . . . . . . . . . . . . 7.3. Funciones para redondear de valores . . . . . . . . . . .
8. Manejo de caracteres
16 16 16
17
8.1. ¿Cómo definir una variable caracter en Python? . . . . . 8.2. Funciones aplicadas a una variable caracter . . . . . . .
9. Listas , tuplas y diccionarios
17 17
17
9.1. Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.2. Tuplas . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3. Diccionarios . . . . . . . . . . . . . . . . . . . . . . . . 9.3.1. Definir un diccionario . . . . . . . . . . . . . . 9.3.2. Acceder a una variable almacenada en un diccionario . . . . . . . . . . . . . . . . . . . . . . . 9.3.3. Modificar una variable de un diccionario . . . . 9.3.4. Añadir un nuevo elemento a un diccionario . . . 9.3.5. Borrar una variable en un diccionario. . . . . . .
10. Vectores (array) en Python
17 18 19 19 19 19 19 20
20
10.1. Crear un vector en python . . . . . . . . . . . . . . . . 10.2. Operaciones con vectores . . . . . . . . . . . . . . . . 10.3. Extraer elementos de un vector . . . . . . . . . . . . . 10.4. Funciones en Numpy para manipular vectores . . . . . 10.5. Funciones en numpy para cáculos estadísticos básicos .
11. Números complejos
. . . . .
20 20 21 21 21
22
11.1. ¿Qué es un número complejo? . . . . . . . . . . . . . . 22 11.1.1. Relación geométrica de un número complejo . . 22 11.2. Funciones en Python para trabajar con números complejos 23
5
12. Condicionales y bucles en Python
24
12.1. Bucles . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1.1. Ejemplo. Bucle: secuencia correlativa . . . . . . 12.1.2. Ejemplo. Bucle: secuencia definida por el usuario 12.2. Sentencias condicionales . . . . . . . . . . . . . . . . . 12.2.1. Ejemplo. Combinar un bucle con un condicional 12.3. Bucle while . . . . . . . . . . . . . . . . . . . . . . . .
13. Encontrar valores en un vector
27
13.1. Ejemplo. Buscar los valores mayores a 3 y reemplazarlos NaN . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2. Buscar los valores y eliminarlos del vector . . . . . . . . 13.3. Uso de la función where . . . . . . . . . . . . . . . . .
14. Matrices 14.1. 14.2. 14.3. 14.4.
24 24 24 25 25 25
27 27 28
29
Definición de una matriz . . . . . . . . . . . . . . Matrices de dimensión mayor . . . . . . . . . . . . Crear una matriz en Python . . . . . . . . . . . . . Funciones en Numpy para manipular matrices . . . 14.4.1. Funciones en Numpy para algebra matricial 14.4.2. Funciones en Numpy para algebra lineal . .
. . . .
. . . . . . .
. . . . . .
15. Principales funciones para visualización (MATPLOTLIB) 15.1. Funciones en matplotlib para visualización 1-D . . . . . 15.2. Funciones en matplotlib para visualización 2-D . . . . . 15.3. Funciones para modificar las etiquetas . . . . . . . . . . 15.4. Funciones para modificar los tick en la figura . . . . . . 15.5. Funciones para añadir ejes y modificar los ejes de una figura . . . . . . . . . . . . . . . . . . . . . . . . . . .
16. Lectura de archivos, parte 1
29 30 31 32 32 32
33 33 33 33 34 34
34 6
1. Generalidades de Python 1.1. Estructura y elementos del lenguaje
Lenguaje de programación1: es un lenguaje informático, diseñado para expresar órdenes e instrucciones precisas, que deben ser llevadas a cabo por una computadora. El mismo puede utilizarse para crear programas que controlen el comportamiento físico o lógico de un ordenador. Está compuesto por una serie de símbolos, reglas sintácticas y semánticas que definen la estructura del lenguaje.
Lenguajes de alto nivel: son aquellos cuya característica principal, consiste en una estructura sintáctica y semántica legible, acorde a las capacidades cognitivas humanas. A diferencia de los lenguajes de bajo nivel, son independientes de la arquitectura del hardware, motivo por el cual, asumen mayor portabilidad
Lenguajes interpretados: a diferencia de los compilados, no requieren de un compilador para ser ejecutados sino de un intérprete. Un intérprete, actúa de manera casi idéntica a un compilador, con la salvedad de que ejecuta el programa directamente, sin necesidad de generar previamente un ejecutable. Ejemplo de lenguajes de programación interpretado son Python, PHP, Ruby, Lisp, entre otros.
Tipado dinámico: un lenguaje de tipado dinámico es aquel cuyas variables, no requieren ser definidas asignando su tipo de datos, sino que éste, se auto-asigna en tiempo de ejecución, según el valor declarado.
Multiplataforma: significa que puede ser interpretado en diversos Sistemas Operativos como GNU/Linux, Windows, Mac OS, Solaris, entre otros. 1
Copiado textual de: http://librosweb.es/libro/python/capitulo_2.html
7
Multiparadigma: acepta diferentes paradigmas (técnicas) de programación, tales como la orientación a objetos, aspectos, la programación imperativa y funcional.
Código fuente: es un conjunto de instrucciones y órdenes lógicas, compuestos de algoritmos que se encuentran escritos en un determinado lenguaje de programación, las cuales deben ser interpretadas o compiladas, para permitir la ejecución del programa informático.
1.2. Página web de descarga del software
1. Ir a: http://continuum.io/downloads Instalar Anaconda en la ruta c:/ 1.3. Editor de Python - Spyder Spyder es un editor de texto para Python. En el se pueden crear, ejecutar programas y muchas otras funcionalidades. Este softwate ya viene incorporado en Anaconda. Su ubicación en Anaconda: c:/Anaconda3/Scripts/spyder.exe. Para acceder a este se debe colocar en la terminar de windows (símbolo del sistema), por ejemplo:
Se recomienda abrir Spyder en el directorio donde Usted desarrollará el programa.
8
1.4. Editor de Python: Jupyter Jupyter es un entorno de trabajo para Python. Es la versión mejorada de IPython. Este programa viene incorporado en la versión de Anaconda. Su ubicación en Anaconda: c:/Anaconda3/Scripts/jupyter-notebook.exe. Para abrir Jupyter se coloca en la terminar jupyter notebook
Por ejemplo: c:/Users/Raul/jupyter notebook Se recomienda abrir Jupyter en el directorio donde Usted desa-
rrollará el programa. Ejemplo: Consideremos que su directorio de trabajo se encuentra en la siguiente 9
dirección: c:\rams\_RAMS\OCE_Program_RAMS\ADM_Cursos\
Abrir la terminal de windows y cambiar al directorio de trabajo: cd c:\rams\_RAMS\OCE_Program_RAMS\ADM_Cursos\
Colocar en la terminal la sentencia: jupyter notebook
Aparecerá la siguiente ventana
Por defecto Jupyter coloca el nombre Untitled. Se debe renombrar el nombre del archivo.
El archivo se almacena con la extensión ”ipynb”, por ejemplo Exam_01.ipynb.
10
Finalmente se ejecutaran las sentencias (se creará el programa)
11
1.5. Errores comunes al crear un programa Si usted crea un programa y al momento de ejecutarlo aparece un error en la consola, tenga en cuenta que usted cometió algunos de estos errones: 1. Faltó:
• un parentesis ”(” • un corchete ”[” • una coma ”,” • un asterisco ”*”. Escribió mal un exponencial. Ejemplo: 3 106 = 3E +6 es distinto que 3E6 + 6
×
2. Escribió mal el nombre de una función. Ejemplo: mean no es igual a Mean 3. Importar mal una librería. 4. Usted usó una función sin haber importado una libreria.
Verificar el mensaje de error y la línea donde aparece, así se ahorrará tiempo en la búsqueda del error.
12
2. Librerias o paquetes importantes en Python 2.1. Paquetes instalados en Python 3.5 (básico) Funciones os glob math statistics datetime
Descripción Interactua con el sistema operativo funciones hacer listas de archivos funciones básica de matemáticas funciones básicas de estadística funciones para el manejo de fechas
2.2. Paquetes importantes instalados en Anaconda Librería h5py numpy pandas mathplotlib scipy spyder jupyter pip
Descripción Lectura de archivos en formato HDF5 Manipulación de matrices en N-dimensiones Manajo de datos visualización Herramientas para estadística, métodos númericos, lectura de ficheros, etc Entorno de desarrollo en python Entorno para correr programas Instalación de librerias desde internet
2.3. Paquetes importantes no instalados en Anaconda Librería airsea PyClimate oceans gsw seawater pytides ttide wafo wodpy ctd cotede basemap cartopy netcdf4 csvkit pycwt
Descripción Propiedades físicas de la atmósfera Analisis de variabilidad climática Herramientas para datos oceanográficos Propiedades físicas del agua de mar, version moderna Propiedades físicas del agua de mar, version obsoleta Análisis armónico de la marea Análisis armónico de la marea Herramienta estadísticas para estudiar oleaje Lectura de datos de NODC (National Oceanographic Data Center) Herramientas para datos oceanográficos Control de calidad para perfiles de CTD Creación de mapas en varias proyecciones Creación de mapas en varias proyecciones Lectura de ficheros en formato netCDF Lectura de archivos en formato csv Análisis de wavelet (Torrence & Compo ) 13
2.4. Instalación de librerias (paquetes) 2.4.1. Instalación de paquetes: usando conda https://anaconda.org/IOOS/
NetCDF4: PyHDF4: geopandas gdal cartopy
conda conda conda conda conda
install install install install install
-c -c -c -c -c
ioos ioos ioos ioos ioos
netcdf4 hdf4 geopandas gdal cartopy
2.4.2. Instalación de paquetes: usando pip Repositorio PyPI: Python Package Index https://pypi.python.org/pypi
La otra forma es utilizado el comando ” pip”. Por ejemplo: si se requiere instalar la libreria seawater del repositorio PyPI entonces colocar en el simbolo del sistema: pip install seawater
2.4.3. Instalación de paquetes: forma manual Todas las librerias subidas al repositorio vienen comprimidas en el formato ”.zip” ó ”.gz”. Lo primero que se debe hacer es descomprimir el directorio. Cada paquete de python tiene un instalador denominado ”setup.py”, este instalador se debe ejecutar en el simbolo del sistema: python setup.py install
Los paquetes instalados se encuentran en la dirección: c:/Anaconda3/Lib/site-packages/, en (Windows). 14
2.4.4. Otros sitios para descargar librerias comprimidas Unofficial Windows Binaries for Python Extension Packages http://www.lfd.uci.edu/~gohlke/pythonlibs/
Pasos de la instalación: •
Paso 1: Descargar la libreria
•
PAso 2: Instalar la libreria usando pip pip install python_hdf4-0.9-cp35-cp35m_win_amd64.whl
2.5. Utilización de los paquetes 2.5.1. Importar el módulo con su nombre original El primer paso para crear un programa es llamar la libreria ó módulo que se utilizará. Para esto existen varias formas de hacer esto: >>> import math >>> math.sin(34) 0.5290826861200238 >>> math.pi 3.141592653589793
## Se importa el modulo
15
NOTA IMPORTANTE: Para utilizar una función del módulo se entepone el nombre del modulo, seguido por un punto y el nombre de la función a utilizar de este módulo. 2.5.2. Importar algunas funciones del módulo Este método se utiliza cuando se requiere utilizar algunas funciones del módulo. >>> from numpy import sin, pi, savez, array, load >>> SENO = 2.0 * sin( 300.0*pi/180.0 ) >>> SENO -1.7320508075688772
2.5.3. Importar el módulo y renombrarlo A veces cuando el nombre del módulo es largo, es mejor renombrarlo con un nombre más corto de dos a tres consonantes. >>> import numpy as np >>> x = 300.0 >>> gra2rad = np.pi/180.0 >>> y = 2.0*np.sin(x*gra2rad) -1.7320508075688772
2.5.4. Importar todas las funciones del módulo >>> from numpy import* >>> vector = arange(0,9) >>> vector array([0, 1, 2, 3, 4, 5, 6, 7, 8])
En este ejemplo importamos toda la libreria numpy y utilizamos la función arange, el cual creamos un vector secuencial desde 0 hasta 8. Esta forma de importar el módulo no es recomendable porque algunas funciones del módulo que se esta importando puede presenar conflictos con nombres paracidos provenientes de otras librerias.
3. Cambiar de directorio Funciones
Descripción
os.getcwd() os.chdir(path) os.system("ls") os.listdir(path)
Entrega la ruta de trabajo Cambia el directorio de trabajo Entrega en pantalla todos los archivos Lista de todos los archivos/directorios en la ruta especificada en el path Busca todos los archivos con extesión .py
glob.glob("*.py")
16
>>> import os ## Se importa el modulo >>> os.getcwd() ## Se utiliza la funcion getcwd ’C:\\rams\\_RAMS\\Python_Proyect\\’ >>> >>> ## Nos cambiamos al siguiente directorio: >>> path="c:/rams/_RAMS/Talleres_Python/Taller_01/" >>> os.chdir(path) >>> os.getcwd() ’c:\\rams\\_RAMS\\Talleres_Python\\Taller_01’
4. Formatos que trabaja Python Tipo
Descripción
|Sn bool int int8 int16 int32 int64 uint8 uint16 uint32 uint64 float float32 float64 complex complex64 complex128
Cadena de texto (string) de n-caracteres Booleano (True o False). Se almacena como 1 bit Entero (int32 o int64, dependiendo de la plataforma) Byte (-128 a 127) Entero (-32768 a 32767) Entero (-2.147.483.648 a 2.147.483.647) Entero Entero sin signo (0 a 255) Entero sin signo (0 a 65535) Entero sin signo (0 a 4.294.967.295) Entero sin signo (0 a 18.446.744.073.709.551.615) Atajo para float64 Decimal en precisión simple. Decimal en doble precisión. Atajo a complex 128 Número complejo, parte entera e imaginaria con float32 Número complejo, parte entera e imaginaria con float64
5. Palabras claves Palabras que no se deben utilizar como nombres de variables Hay ciertos nombres que python utiliza para definir variables y que son exclusivamente del lenguaje y no deben ser utilizados, estos nombres son los denominas ”nombres claves del programa” y son los siguientes: >>> import keyword >>> print(keyword.kwlist) [’False’, ’None’, ’True’, ’and’, ’as’, ’assert’, ’break’, ’class’, ’continue’, ’def’, ’del’, ’elif’, ’else’, ’except’, ’finally’, ’for’, ’from’, ’global’, ’if’, ’import’, ’in’, ’is’, ’lambda’, ’nonlocal’,
17
’not’, ’or’, ’pass’, ’raise’, ’return’, ’try’, ’while’,’with’, ’yield’]
6. Operadores aritméticos en Python Python al igual que otros lenguajes de programación posee los siguientes operadores aritméticos Nombre Suma Resta Multiplicación División 2 Elevar a exponente Módulo
Operador
Sentencia
+
x+y x y x y x/y xy x x %y
− ∗ / ∗∗
− ∗ → ∗ ∗y
%
7. Funciones mateméticas en NumPy 7.1. Funciones algebraicas Función
Descripción
Función
exp(x) abs(x) log2(x) log1p(x)
Exponencial sqrt(x) log(x) Valor absoluto Logaritmo en base dos log10(x) Logaritmo en base ”p” e
Descripción Raíz cruadrada Logarítmo natural Logarítmo en base 10 2.718281828459045
7.2. Funciones trigonométricas Función
Descripción
Función
sin(x) Seno Tangente tan(x) arccos(x) Arcocoseno Seno hipoerbólico sinh(x) tanh(x) Tangente hiperbólica
Descripción
cos(x) Coseno arcsin(x) Arcoseno arctan(x) Arcotangente Coseno hiperbólico cosh(x) pi Número PI
7.3. Funciones para redondear de valores Función
Descripción
floor(x) Redondeo hacia round(x) Redondea
Función
−∞ ceil(x) 18
Descripción Redondeo hacia
∞
8. Manejo de caracteres 8.1. ¿Cómo definir una variable caracter en Python? Las variables ”string” ó caracter se crea usando comillas simples ó dobles. >>> CADENA = " Esta es una cadena de caracteres " >>> CADENA ’ Esta es una cadena de caracteres ’ >>> >>> CADENA = ’Esta es una cadena de caracteres’ >>> CADENA ’Esta es una cadena de caracteres’ >>> >>> ## No es un valor >>> S = "1254" >>> S ’1254’
8.2. Funciones aplicadas a una variable caracter Función
Descripción
len(x) X + Y X*5 X.split(/") Y.join(X) X.upper() X.lower() X.replace(a,b) 2 X.find( ")
Determina la longitud del caracter. Une dos caracterer ”X” e ”Y”. Replica 5 veces el caracter ”X” Separa un caracter ”X” dilimitado por un símbolo. Une una lista de caracteres ”X” por con el caracter ” Y”. Transforma todo el caracter ”X” a mayúsculas. Transforma todo el caracter ”X” a minúsculas. Reemplaza el caracter ”a” por el caracter ”b”. Busca en la variable ”X” en inicio donde comienza la palabla ”y”. Transforma un valor numérico a caracter. Extrae una sección del caracter ”X”.
str(Y) X[ini:fin]
9. Listas , tuplas y diccionarios 9.1. Listas Una lista es una colección ordenada de objetos. Puede contener distintos tipos de objetos (datos). Para definir una lista se utilizan los corchetes ” []” entre los cuales pueden aparecer diferentes valores separados por comas. 19
Ejemplo 1 >>> >>> [] >>> >>> [2, >>> [2,
lista = [] lista
## Lista vacia
lista = [ 2, 3 , 3] lista+lista 3, 3, 2, 3, 3] lista*4 3, 3, 2, 3, 3, 2, 3, 3, 2, 3, 3]
Cuando se suman dos listas , lo que ocurre es que se concatenan, es decir, no se suman en el sentido algebraico. Cuando se multiplica una lista, esta se replica. Ejemplo 2 >>> lista = [] ## Lista vacia >>> lista [] >>> lista2 = [ 4, 19.0, "Temperatura"] >>> lista2 [4, 19.0, ’Temperatura’] >>> lista3 = [[2,2],[4,4]] >>> lista3 [[2, 2], [4, 4]] >>> a = [ 2, 3] >>> a + a ## La s uma equivale a replicar la l ista [2, 3, 2, 3] >>> 3*a ## Se replica tres veces la lista [2, 3, 2, 3, 2, 3] >>> lista2.append("Salinidad") >>> lista2 [4, 19.0, ’Temperatura’, ’Salinidad’]
9.2. Tuplas Una tupla es una estructura que representa una colección de objetos pudiendo estos ser de distintos tipos. Para declarar una tupla se utilizan paréntesis, entre los cuales deben separarse por comas los elementos que van a formar parte de ella. >>> TUPLA = (2, 4., "VELOCIDAD") >>> TUPLA (2, 4.0, ’VELOCIDAD’)
Los elementos de una tupla son accesibles a través del índice que ocupan en la misma 3 3
el índice se inicia con el valor cero, NO con el valor 1. Esto es característico del lenguaje C.
20
>>> TUPLA = (2, 4., "VELOCIDAD") >>> TUPLA[0] 2 >>> TUPLA[2] ’VELOCIDAD’ >>>
9.3. Diccionarios Un diccionario es una estructura de datos que almacena una serie de valores utilizando otros como referencia para su acceso y almacenamiento. Cada elemento de un diccionario es un par ” clave-valor” donde el primero debe ser único y será usado para acceder el valor que contiene. A diferencia de las tuplas y lista, los diccionarios no cuentas con un orden específico.
9.3.1. Definir un diccionario >>> DIC = { "TEMP": [ 20.4, 12.23], "SALINIDAD": [33.4,34.56] } >>> DIC {’SALINIDAD’: [33.4, 34.56], ’TEMP’: [20.4, 12.23]}
9.3.2. Acceder a una variable almacenada en un diccionario >>> TEMP = DIC["TEMP"] >>> TEMP [20.4, 12.23] >>> SAL = DIC["SALINIDAD"] >>> SAL [33.4, 34.56]
9.3.3. Modificar una variable de un diccionario >>> DIC["TEMP"]=[22.0, 20.3, 14.0, 10.] >>> DIC {’SALINIDAD’: [33.4, 34.56], ’TEMP’: [22.0, 20.3, 14.0, 10.0]} >>>
9.3.4. Añadir un nuevo elemento a un diccionario >>> DIC["OXIGENO"] = [ 6.5, 5.5, 3.1] >>> DIC {’SALINIDAD’: [33.4, 34.56], ’OXIGENO’: [6.5, 5.5, 3.1],
21
’TEMP’: [22.0, 20.3, 14.0, 10.0]} >>>
9.3.5. Borrar una variable en un diccionario. >>> del( DIC["TEMP"] ) ## Se borra la variable TEMP >>> DIC {’SALINIDAD’: [33.4, 34.56], ’OXIGENO’: [6.5, 5.5, 3.1]} >>>
10. Vectores (array) en Python 10.1. Crear un vector en python Para crea un vector por ejemplo:
x = (1, 2, 3, 4, 5, 6)
(1)
se utiliza la función ”array” perteneciente a la libreria numpy. Primero es el nombre de la función, seguido por el vector entre corchetes y separando cada valor por una coma (Note que los valores en np.array() es una lista). vector = np.array([valores separados por comas]) >>> import numpy as np >>> A = np.array( [ 1,2,3,4,5,6] ) >>> A array([1, 2, 3, 4, 5, 6])
En un vector también se pueden evaluar funciones. Evalar una función sin(3) y exp(2) en un array.
>>> import numpy as np >>> A=np.array([2.2, np.sin(3), np.exp(2)]) >>> A array([ 2.2 , 0.14112001, 7.3890561 ])
10.2. Operaciones con vectores 1. Las operaciones aritméticas se realizan elemento a elemento si se utiliza la función array. Si se utiliza la función matrix estas siguen las normas del algebra lineal.
2. La enumeración de los elementos de un vector inicia con el valor CERO, se debe tener cuidado con esto. 22
A+B
−B A/B A∗B A
B
A
=A
∗ ∗B
= = = = =
A[0] + B[0], A[1] + B[1], . . . , A[n] + B[n] A[0] B[0], A[1] B[1], . . . , A[n] B[n] A[0]/B[0], A[1]/B[1], . . . , A[n]/B[n] A[0] B[0], A[1] B[1], . . . , A[n] B[n] A[0] B[0], A[1] B[1],...,A[n] B[n]
− ∗ ∗∗
− ∗ ∗∗
−
∗ ∗∗
10.3. Extraer elementos de un vector 10.4. Funciones en Numpy para manipular vectores Función
Descripción
n=len(x) Z=np.concatenate((x,y)) Z=np.vstack((x,y)) Z=np.column_stack((x,y)) Z=np.zeros(7) Z=np.ones(5) Z=np.linspace(0.0,1.0,5) Z=np.arange(0,1,0.2) Z=np.unique(x) Z=np.repeat(x,2) Z=np.tile(x,2)
Determinar la longtitud de un vector Une dos vectores Une dos vectores en filas Une dos vectores en columnas Crea un vector con zeros de longitud 7 Crea un vector de unos de longitud 5 Crea un vector de 0 a 1 particionado en 5 Crea un vector 0 a 1 en intervalos de 0.2 Extrae los valores no repetidos Replica los elementos de un vector dos veces Replica el vector 2-veces
10.5. Funciones en numpy para cáculos estadísticos básicos Descripción
Función
N
x x
i
Suma
np.sum(x) / np.nansum(x)
i
Producto
np.prod(x)
Promedio
np.mean(x) / np.nanmean(x)
i=1 N
i=1
1 N x¯ = xi N i=1 1 N 2 (xi s = N i=1
min[xi ] max[xi ]
− x¯)
2
Varianza
np.var(x) / np.nanvar(x)
Desviación estándar np.std(x) / np.nanstd(x) np.min(x) / np.nanmin(x) Mínimo Máximo np.max(x) / np.nanmax(x)
23
11. Números complejos 11.1. ¿Qué es un número complejo? Un número complejo es una pareja ordenada de números reales a y b:
z = (a, b)
(2)
Los números reales a y b se denominan parte real e imaginaria del número complejo z . La representación de un número complejo es: (3) z = a + bi
a = Re(z ) y b = I m(z ), i =
√ −1.
El conjuado de un número complejo:
z¯ = z = a ∗
− bi
(4)
11.1.1. Relación geométrica de un número complejo
z = x + yi
(5)
x = r cos(θ)
(6)
y = r sin(θ)
(7)
Esta es la forma polar de un número complejo:
z = r [cos(θ) + sin(θ)i]
(8)
r = Re(z ) + Im(z ) Im(z )
(9)
2
θ = tan
2
1
−
Re(z )
(10)
La ecuación (8) se puede expresar como:
z = re θi eθi = cos(θ) + sin(θ)i
24
(11)
(12)
11.2. Funciones en Python para trabajar con números complejos z = a + bj
z=a+bj z=complex(a,b)
Re(z )
z.real
Im(z )
z.imag
+ b2
abs(z)
|z | = √ a θ = tan z¯ = a
2
1
−
b
− bj
a
(Función de NumPy)
(Función de NumPy)
angle(z)
(Función de NumPy)
conj(z)
(Función de NumPy)
25
12. Condicionales y bucles en Python 12.1. Bucles Los bucles ó ciclos repetitivos se crea usando la sentencia for contador in valores: sentencias
donde contador indica la secuencia, valores es una secuencia de valores. sentencia es el código que se quiere repetir.
12.1.1. Ejemplo. Bucle: secuencia correlativa for i in range(4): print ("Los valores de i son:", i) ## ===== CONSOLA Los valores de i Los valores de i Los valores de i Los valores de i
===== son: 0 son: 1 son: 2 son: 3
12.1.2. Ejemplo. Bucle: secuencia definida por el usuario # -*- coding: utf-8 -*print ("\nMultiplación:") print ("==============") for numero in [0, 2, 6, 9]: print (numero,"*", numero,"=", numero ** 2) print ("==============") ## ==== CONSOLA ===== Multiplación: ============== 0 * 0 = 0 2 * 2 = 4 6 * 6 = 36 9 * 9 = 81 ============== A = ["A","B","C"] for j in A: print ("La letra es = ", j)
26
12.2. Sentencias condicionales Condición Descripción > >= == < <=
Mayor que Mayor igual que Igual Menor que Menor igual que
Caso 1 if condición 1: sentencias 1
Caso 2 if condición 1: sentencias 1 elif condición 2: sentencias 2 else: sentencias 3
12.2.1. Ejemplo. Combinar un bucle con un condicional A = [1,2,4,5,0,8,9] I=0 for j in A: if j > 3: print ("j > 3 es = ", j) I = I + 1 elif j == 0: print ("Existe un valor cero") else: print ("No lo es = ", j ) print ("---------------------------") print ("Hay",I,"valores mayores a 3")
12.3. Bucle while Un bucle while permite repetir la ejecución de un grupo de instrucciones mientras se cumpla una condición. while condición: sentencias 1 i = 0
27
while i <= 3: if i <= 3: print ("Se cumple la condición: i < 3 = ", i) i += 1 print ("Final del bucle") ## ===== CONSOLA ===== Se cumple la condición: Se cumple la condición: Se cumple la condición: Se cumple la condición: Final del bucle
i i i i
< < < <
3 3 3 3
= = = =
0 1 2 3
NOTA IMPORTANTE: Si la condición del bucle siempre se cumple entonces el bucle no terminará nunca de ejecutarse y se tendrá un bucle infinito. En este caso SE DEBE CERRAR EL PROGRAMA Y REINICIAR PYTHON.
28
13. Encontrar valores en un vector Python tiene a su disposición dos funciones para busqueda de valores p = find( condicion ) p = where( condicion )
donde ”p” en un vector de posiciones donde se cumple la condición. La función find se encuantra en matplotlib y where en NumPy.
13.1. Ejemplo. Buscar los valores mayores a 3 y reemplazarlos NaN >>> import numpy as np >>> import matplotlib.pylab as pl >>> >>> ## Define le vector ... >>> X = np.array([2,1,4,0,1,2,3,8.,6,9,4,2]) >>> >>> ## Busca los valores en el vector X mayores a 3. ... >>> I = pl.find( X > 3.0 ) >>> I array([ 2, 7, 8, 9, 10], dtype=int64) >>> ## Extrae esos valores ... >>> y = X[I] >>> y array([ 4., 8., 6., 9., 4.]) >>> X[I] = np.nan array([2., 1.,nan, 0.,1., 2., 3., nan, nan, nan, nan, 2.])
13.2. Buscar los valores y eliminarlos del vector >>> import numpy as np >>> import matplotlib.pylab as pl >>> >>> ## Define le vector ... >>> X = np.array([2,1,4,0,1,2,3,8.,6,9,4,2]) >>> >>> ## Busca los valores en el vector X mayores a 3. ... >>> I = pl.find( (X >= 4.0) & ( X < 7) ) >>> I array([ 2, 8, 10], dtype=int64) >>> ## Extrae esos valores ... >>> y = X[I] >>> y array([ 4., 6., 4.])
29
>>> np.delete(X,I) array([ 2., 1., 0.,
1.,
2.,
3.,
2.])
13.3. Uso de la función where >>> import numpy as np >>> X = np.array([ 2, 1, 4, 0, 1, 2, 3, 8., 6, 9, 4, 2 ]) >>> >>> I = np.where( X > 3.0 ) >>> I (array([ 2, 7, 8, 9, 10], dtype=int64),) >>> type(I)
>>> y=X[I] >>> y array([ 4., 8., 6., 9., 4.]) >>> X[I] = -999 >>> X >>> X array([ 2., 1., -999., 0., 1., 2., 3., -999., -999., -999., -999., 2.]) >>> np.delete(X,I) array([ 2., 1., 0., 1., 2., 3., 2.])
30
14. Matrices 14.1. Definición de una matriz Se define una matriz a un conjunto rectangular de elementos X (i, j) dispuestos en n filas y en m columnas. El orden de una matriz también se denomina dimensión, siendo m y n números enteros. Los números que contiene ésta matriz se denomina elementos de la matriz.
x x X = x
21
x12 x13 . . . x1m x22 x23 . . . x2m
n1
xn2 xn3 . . . xnm
11
.. .
.. .
X [i, j]nm =
.. .
.. .
.. .
(13)
n×m
i = 1, ··· , n j = 1,
··· , m
Python manipula matrices en: 2-D, 3-D, 4-D, etc.
La manipulación de matrices en de gran importancia en análisis de datos, debido a que los datos estan ordenados en forma tabular.
31
14.2. Matrices de dimensión mayor Matriz 2-D ( X ij ): donde i y j representa la posicion geográfica, posición ó tiempo. Matriz 3-D (X ijk ): donde i, j representa las posiciones geográficas, y k es la profundidad o el tiempo (hora, día, mes, año, etc). Ejemplo: Almacenamiento de varias imagenes satelitales o la organización de un campo de temperatura en profundidad (WOA-09, WOD-09).
Matriz 4-D (X ijkl ): donde i y j representa las posiciones geográficas, k es la profundidad y l es el tiempo. Ejemplo: estructura tridimensional de la temperatura del océano o en la atmósfera con el tiempo.
32
14.3. Crear una matriz en Python Existen dos funciones para crear matrices: array y matrix. La primera función es una matriz pero con una clasificiación de array. La segunda es una matriz que se rige por las normas del algebra lineal. Para crear una matriz en python es: X = np.array([ [a1, a2, a3], [b1, b2, b3], ............, [x1, x2, x3] ]) X = np.array([ [a1, a2, a3], [b1, b2, b3], ............, [x1, x2, x3] ])
donde a1, a2, ..., x3 son los elementos de la matriz. Consideremos la siguiente matriz:
24 30 X = 24
23 22 11 30 20
12 11 21 22
4×3
import numpy as np X = np.array([[24, 23, 12], [30, 22, 11], [24, 11, 21], [30, 20, 22]]) n, m = X.shape ## Determina la dimension de la matriz print ("Esta matriz tiene", n,"filas y", m, "columnas")
33
14.4. Funciones en Numpy para manipular matrices 14.4.1. Funciones en Numpy para algebra matricial Libreria: import numpy as np Descripción
Python
Dimensión de la matriz Dimensión de la matriz Determina el producto matricial Crea una matriz de ceros Crea una matriz de unos Traspuesta de la matriz ”A” Extrae la diagonal de una matriz Determina la traza de la matriz Traspuesta de la matriz ”A” Transforma la matriz ”A” a vector
np.shape(X) X.shape np.dot(A,A) np.zeros((n,m)) np.ones((n,m)) np.transpose(A) np.diag(A) np.trace(A) A.T y=A.flatten()
14.4.2. Funciones en Numpy para algebra lineal Libreria: import numpy.linalg as al Determinante de la matriz ” A” Inversa de una matriz de la matriz ” A” Descomposición de valor singular Valores y vectores propios Sistema de ecuaciones lineales Factorización QR Descomposción de Cholesky Norma de una matriz. Número condicional de una matriz
34
al.det(A) al.inv(A) al.svd(A) al.eig(A) al.solve(A,B) al.qr(A[, mode]) al.cholesky(A) al.norm(A) al.cond(A)
15. Principales funciones para visualización (MATPLOTLIB) 15.1. Funciones en matplotlib para visualización 1-D Función
Descripción
plot bar barh hist boxplot errorbar
Visualización en 2-D Gráfico de barras verticales Gráfico de barras horizontales Histrogramas Gráficos de cajas (boxplot) Gráficos de barras con errores
15.2. Funciones en matplotlib para visualización 2-D Función
Descripción
scatter imshow contourf contour clabel colorbar pl.pcolormesh
Diagrama de dispersión Visualiza una matriz isolineas rellenadas Visualiza isolíneas label de las isolíneas Barra de colores Plot a quadrilateral mesh
15.3. Funciones para modificar las etiquetas Función
Descripción
title suptitle xlabel ylabel legend text annotate legend
Coloca un título a la figura Coloca un título superior a la figura Coloca una etiqueta en el eje X Coloca una etiqueta en el eje Y Coloca una legenda Coloca un texto en una posición indicada Coloca un texto en una posición indicada Coloca una leyenda en una figura
35