Introducción a Python Rodrigo Chang Universidad de San Carlos de Guatemala com4.e6.usac@gmail.com 22 de febrero de 2015 Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 1 / 23
Lo que veremos hoy... 1 Introducción a Python Qué es Python? Características de Python Ejemplos sencillos Arreglos de datos 2 Módulos de Python SciPy NumPy Matplotlib PyLab pyserial 3 La teoría no es suficiente Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 2 / 23
Historia de Python Creado a finales de los ochenta por Guido van Rossum. Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 3 / 23
Historia de Python Creado a finales de los ochenta por Guido van Rossum. Python proviene de los humoristas británicos Monty Python. Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 3 / 23
Historia de Python Creado a finales de los ochenta por Guido van Rossum. Python proviene de los humoristas británicos Monty Python. Se ha desarrollado bastante por su facilidad y actualmente se encuentra hasta la versión 3.4. Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 3 / 23
Características de Python Es un lenguaje interpretado. Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 4 / 23
Características de Python Es un lenguaje interpretado. Figura: Proceso de desarrollo utilizando un lenguaje compilado Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 4 / 23
Características de Python Es un lenguaje interpretado. El manejo de tipos es dinámico. Figura: Proceso de desarrollo utilizando un lenguaje compilado Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 4 / 23
Características de Python Es un lenguaje interpretado. El manejo de tipos es dinámico. Multiplataforma. Figura: Proceso de desarrollo utilizando un lenguaje compilado Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 4 / 23
Características de Python Es un lenguaje interpretado. El manejo de tipos es dinámico. Multiplataforma. Es un lenguaje multiparadigma. Figura: Proceso de desarrollo utilizando un lenguaje compilado Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 4 / 23
Características de Python Es un lenguaje interpretado. El manejo de tipos es dinámico. Multiplataforma. Es un lenguaje multiparadigma. Es extremadamente fácil para aprender a programar. Figura: Proceso de desarrollo utilizando un lenguaje compilado Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 4 / 23
Un lenguaje interpretado Figura: Proceso de desarrollo utilizando un lenguaje interpretado Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 5 / 23
Nuestro primer programa en Python En Python es tan fácil como escribir el pseudocódigo que lo hace: # Primer programa print Hola gente de com4! También podemos realizar operaciones aritméticas a = 2 b = 3 c = a **2 + 2*a*b + 1 # c = 17 d = a / b # d = 0 d = (a * 1.0) / b # d = 0. 666666 Y podemos cambiar el tipo de una variable o constante 1 for i in [2, com4, (1,2,3) ] print type ( i) 3 # Salida 5 #<type int > #<type str > 7 #<type tuple > Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 6 / 23
Tuplas, listas y diccionarios Arreglos de datos muy útiles Tuplas Son una secuencia ordenada de elementos, que pueden ser de distintos tipos. La característica principal de las tuplas es que son inmutables. Listas Muy parecidas a las tuplas, pero son mutables. Podemos modificar los elementos de la lista, en otras palabras: agregar, eliminar y ordenar la lista. Diccionarios Son muy parecidos a las listas, a cada elemento del diccionario se le asigna una llave. Y la única condición para esta llave es que sea un elemento inmutable. Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 7 / 23
Ejemplos # Definiendo una tupla 2 a = (1,2,3) b = a + (4,) # b = (1,2,3,4) 4 print b [2] # 3 print type ( b) # < type tuple > 6 # Definiendo una lista 8 c = [1,2,3,4,5] print c [1:3] # [2, 3] 0 print c [:3] # [1, 2, 3] c. append (6) 2 print c # [1, 2, 3, 4, 5, 6] 4 # Definiendo un diccionario d = {} 6 d[ a ] = 2 d [(1,2) ] = 20 8 d [2] = 12 print d # { a : 2, (1, 2): 20, 12: 12} Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 8 / 23
Módulos de Python Los módulos agrupan funciones que comparten un tema en común. Podemos crear nuestro propio módulo en un archivo *.py Para obtener acceso a las funciones de los módulo utilizamos el comando import Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 9 / 23
Módulos de Python Los módulos agrupan funciones que comparten un tema en común. Podemos crear nuestro propio módulo en un archivo *.py Para obtener acceso a las funciones de los módulo utilizamos el comando import Y lo más importante... Aprovechamos piezas de código escritas por otras personas para proporcionar funcionalidad extra a nuestros programas. Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 9 / 23
SciPy Es un ecosistema de Python que incluye software de código abierto para matemáticas, ciencia e ingeniería. Provee funciones amigables al usuario y rutinas numéricas muy eficientes. Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 10 / 23
Ejemplos # Importando el modulo 2 from scipy import signal 4 # Obteniendo los coeficientes de un filtro analogico b, a = signal. butter (4, 100, low, analog = True ) 6 # Computando la respuesta en frecuencia del filtro 8 w, h = signal. freqs (b, a) Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 11 / 23
NumPy Es el paquete fundamental para computación científica con Python. Provee un poderoso manejo de arreglos de objetos N-dimensionales. Posee funciones útiles de álgebra lineal y números aleatorios. Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 12 / 23
Ejemplos # Importar el modulo 2 import numpy as np 4 # Crear un arreglo de valores u = np. linspace (0, 10, 50, endpoint = True ) 6 # Crear otro arreglo de valores 8 t = np. arange (0, 20, 0.1) 0 # Realizar una operacion sobre el arreglo y = np.sin (t) 2 # Crear una matriz y realizar un producto matricial 4 c = np. array ([[1,2], [3,4]]) d = np. array ([[7], [8]]) 6 dot (c,d) # devuelve array ([[23],[53]) Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 13 / 23
Matplotlib Es una librería para graficar en Python que provee gráficas de calidad y formatos interactivos de presentación de datos a través de distintas plataformas. Es ampliamente utilizado en scripts de Python y aplicaciones web. Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 14 / 23
Ejemplos # Importar el modulo 2 import matplotlib. pyplot as plt 4 # Crear los datos t = np. arange (0, 50e -3, 0.0008333) 6 y = 0.5 * (1 + np. sin (2 * np. pi * 60 * t)) 8 # Graficar plt. plot (t, y, b- ) 0 # Poner los ejes y el titulo plt. title ( Grafica de muestra ) 2 plt. xlabel ( Tiempo [s] ) plt. ylabel ( Unidades [] ) 4 # Pone una leyenda en la grafica 6 plt. text (0.04, 0.9, r $0.5(1+\ sin (2\ pi f t)$ ) 8 # Mostrar la grafica plt. show () Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 15 / 23
Gráfica resultante Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 16 / 23
PyLab Es la combinación de los módulos Scipy, NumPy y Matplotlib. Provee integración de todas las funciones numéricas y científicas para el tratamiento de datos. Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 17 / 23
PyLab Es la combinación de los módulos Scipy, NumPy y Matplotlib. Provee integración de todas las funciones numéricas y científicas para el tratamiento de datos. En palabras de sus creadores... PyLab es irresistible, integrado, utilizable y una alternativa superior a MATLAB Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 17 / 23
Ejemplo from pylab import * t = arange (0.0, 2.0, 0.01) s = sin (2* pi*t) plot (t, s) xlabel ( time (s) ) ylabel ( voltage (mv) ) title ( About as simple as it gets, folks ) grid ( True ) savefig (" test. png ") show () Ejemplo tomado de: http://matplotlib.org/1.3.1/examples/pylab_examples/simple_plot.html Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 18 / 23
pyserial Este módulo encapsula el acceso al puerto serial en Python. Es altamente configurable y fácil de utilizar. Está liberado también bajo una licencia de software libre. Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 19 / 23
Ejemplo # Importar el modulo 2 import serial 4 # Abre el puerto serial / dev / ttys1 con 8 N1@ 19200 puerto = serial. Serial ( / dev / ttys1, 19200, timeout =1) 6 # Leer un byte 8 x = puerto. read () 0 # Leer hasta 10 bytes dentro del timeout s = puerto. read (10) 2 # leer linea terminada en \ n 4 line = puerto. readline () 6 # Cerrar el puerto serial puerto. close () Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 20 / 23
Suficiente teoría por ahora... Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 21 / 23
Tarea[1] Reto de Python El reto es: Con la Tiva Launchpad, hacer un programa en Python que reciba por el puerto serial virtual muestras de una señal y graficarlas utilizando el módulo Matplotlib. Cada muestra se envía una después de otra como un byte (valores de 0 a 255). Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 22 / 23
Tarea[1] Reto de Python El reto es: Con la Tiva Launchpad, hacer un programa en Python que reciba por el puerto serial virtual muestras de una señal y graficarlas utilizando el módulo Matplotlib. Cada muestra se envía una después de otra como un byte (valores de 0 a 255). Debemos determinar Cuál es la forma de onda de la señal? Cuál es el período de la señal? Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 22 / 23
Tarea[1] Reto de Python El reto es: Con la Tiva Launchpad, hacer un programa en Python que reciba por el puerto serial virtual muestras de una señal y graficarlas utilizando el módulo Matplotlib. Cada muestra se envía una después de otra como un byte (valores de 0 a 255). Debemos determinar Cuál es la forma de onda de la señal? Cuál es el período de la señal? Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 22 / 23
Ejemplos útiles y clave 1 import matplotlib. pyplot as plt import serial 3 # Para graficar podemos utilizar solo los valores del eje Y 5 a = [1,2,3] plt. plot (a) 7 plt. show () 9 # Podemos obtener el valor numerico que corresponde a un caracter con la funcion ord () b = ord ( a ) # b = 97 1 # Para iterar sobre los caracteres de una cadena podemos hacer : 3 for char in cadena : print char 5 # La conexion hacia la Tiva Launchpad puede ser 7 puerto = serial. Serial ( COM7, 9600, timeout = 10) Rodrigo Chang (USAC) Laboratorio de Comunicaciones 4 22 de febrero de 2015 23 / 23