Skip to content Skip to navigation

Connexions

You are here: Home » Content » Introducción a Python para Computación Científica

Navigation

Recently Viewed

This feature requires Javascript to be enabled.
 

Introducción a Python para Computación Científica

Module by: Exequiel Sepúlveda. E-mail the author

Sesión #1 – Lo Básico

Tópicos que veremos:

  • Introducción
  • El Zen de Python
  • Elementos básicos
  • Variables
  • Sentencias, condiciones, ciclos
  • Tuplas, listas, diccionarios
  • Funciones
  • Documentación
  • Map-Reduce

Al final de la sesión el asistente deberá poder construir programas python bien estructurados, documentados y con un uso amplio del lenguaje básico.

Introducción a Python

  • Lenguaje de programación creado el año 1991 (19 años)
  • Interpretado (usa máquina virtual)
  • Estructurado
  • Funcional
  • Orientado a Objetos
  • Simple de programar y de usar
  • Amplia biblioteca para no reinventar la rueda
  • Amplitud de usos
  • Sistemas de Información
  • Scripts rápidos
  • WWW
  • GUI
  • Científica ***

El Zen de Python

  • Bello es mejor que feo.
  • Explícito es mejor que implícito.
  • Simple es mejor que complejo.
  • Complejo es mejor que complicado.
  • Plano es mejor que anidado.
  • Ralo es mejor que denso.
  • La legibilidad cuenta.
  • Los casos especiales no son tan especiales como para quebrantar las reglas.
  • Aunque lo práctico gana a la pureza.
  • Los errores nunca deberían dejarse pasar silenciosamente.
  • A menos que hayan sido silenciados explícitamente.
  • Frente a la ambigüedad, rechaza la tentación de adivinar.
  • Debería haber una -y preferiblemente sólo una- manera obvia de hacerlo.
  • Aunque esa manera puede no ser obvia al principio a menos que usted sea holandés.18
  • Ahora es mejor que nunca.
  • Aunque nunca es a menudo mejor que ya mismo.
  • Si la implementación es dificil de explicar, es una mala idea.
  • Si la implementación es fácil de explicar, puede que sea una buena idea.
  • Los espacios de nombres (namespaces) son una gran idea ¡Hagamos más de esas cosas!

Instalando Python

Windows

  1. Ejecute: python-2.7.1.msi
  2. Configure en variables de entorno la variable PATH y agregue la ruta C:\Python27

Linux (ubuntu)

  1. Ejecute: sudo apt-get install python2.7

Ejecutando Python

Hay dos formas de ejecutar programas python. Uno es en forma interactiva y la otra es usando un archivo script python.

Interactiva

  1. Abra una consola de su sistema operativo
  2. Ejecute: python

Python 2.7.1

Type "help", "copyright", "credits" or "license" for more information.

>>> quit()

Scripting

  1. Edite un archivo de nombre “hola.py” con el siguiente contenido:

print “hola”

  1. Ejecute el script “hola.py”

[console] python hola.py

hola

Sintaxis

  • Un programa Python se puede escribir en cualquier editor de texto
  • Por convensión la extensión es “.py”
  • Los comentarios de una línea empiezan con #
  • Los comentarios de más de una línea se encierrar entre triple comillas,por ejemplo:
'''Este es un programa que incluye
las funciones de cálculo de flujos de sustancias
	no distinguibles'''
  • No se usa el terminador “;” como en otros lenguajes
  • En inicio y fin de un bloque está dado por la indentación

Tipos de Datos y Variables

En Python se distinguen tipos de datos primitivos o básicos y objetos. Los pricipales son:

Tabla 1
Tipo Palabra clave Valores Ejemplo
Nada None No asignado, Nulo None
Enteros int -2147483648 hasta 2147483647 1, 0, -2, 2010
Enteros Largos long Sin límite 99999999999L, 1L,0L
Lógicos bool True o False True o False
Reales float ±2,2250738585072020 x 10-308 hasta ±1,7976931348623157 × 10+308 2.45, -0.1, 1e10
Complejos complex a + bj 1 + 2j
String str Texto de tamaño variable “hola”, 'chao'
Secuencias inmutables. Tuplas tuple Lista arbitraria de valores (1,2,3)('uno',2,(0,2))
Secuencias mutables.Listas list Lista arbitraria de valores [1,2,3]['uno',2,(0,2)]
Mapas o diccionarios dict Lista de Par llave – valor {1: 'uno', 2: 'dos'}
Arreglos Array Lista de valores arr = array('f',[1.0, 2.0])

Operaciones sobre números (las no típicas)

  • Potencia → **, ejemplo: 2**8,
  • División entera → //, ejemplo: 3//2 → 1, 3.99//2 → 1.0
  • Módulo → %, ejemplo: 3%2 → 1, 5%3 → 2

Secuencias

Pueden ser mutables (list) o inmutables (tuple). Mutable significa que el contenido puede cambiar e inmutable significa que el contenido no puede cambiar. Es una especie de arreglo de largo variable que puede contener cualquier cosa, incluso en forma no homogénea.

Las secuencias siempre parten de 0 hasta su tamaño – 1.

Operaciones sobre secuencias:

  • secuencia[i], obtiene el elemento i de la secuencia (con base 0)
  • secuencia[i:j], obtiene una nueva secuencia con los elementos desde i a j (j no incluido)
  • secuencia[:], obtiene una nueva secuencia con todos los elementos
  • secuencia[:-1], obtiene una nueva secuencia con todos los elementos salvo el último

Operaciones sobre secuencias mutables:

  • del secuencia[i], elimina el elemento i
  • secuencia.remove(e), elimina el primer elemeno que sea igual a e (en su valor)
  • secuencia.sort(), ordena la lista
  • secuencia.append(e), agrega a la lista el elemento e
  • len(secuencia), obtiene el tamaño
  • min/max, obtiene el mínimo o máximo.

Tuplas

Son secuencias inmutables, por lo que no se pueden reemplazar los valores de cualquier elemento. Para crear un tupla modificada hay que construir una nueva:

t1 = tuple((1,2,3)) #o simplemente t1 = (1,2,3)

t2 = tuple(t1[:-1]) #o simplemente t2 = t1[:-1]

Listas

Son secuencias mutables, por lo que se pueden reemplazar, borrar, ordenar los valores de cualquier elemento.

Operaciones sobre listas:

  • lista[i] = v, asigna al elemento i el valor v
  • del lista[i], elimina el elemento i
  • lista.remove(e), elimina el primer elemeno que sea igual a e (en su valor)
  • lista.sort(), ordena la lista
  • lista.append(e), agrega a la lista el elemento e
  • lista.extend(e), agrega a la lista los elementos del conjunto e

Arreglos Homogéneos

Son listas optimizadas que contienen datos del mismo tipo. Se requiere importar el módulo array.

Operaciones sobre arrelgos:

  • arreglo.tolist(), devuelve los elementos como una lista
  • arreglo.fromfile(), carga los valores de un arreglo desde un archivo
  • arreglo.tofile(), graba los valores de un arreglo a un archivo

Diccionarios

Corresponden a un contenedor del tipo par llave-valor. No se accede por índice sino por llave.

d = dict() #mejor d = {}

d['a'] = 7.0

d['b'] = 6.0

es equivalente a

d = {'a': 7.0, 'b': 6.0}

Operaciones sobre diccionarios:

  • diccionario[llave], accede a un valor dado una llave
  • diccionario.has_key(llave) o llave in diccionario, saber si está o no una llave
  • del diccionario[llave], elimina el elemento para esa llave
  • diccionario.values(), retorna una lista con sólo los valores
  • diccionario.keys(), retorna una lista con sólo los valores

Sentencias de Control de Flujo

Estas permiten dar un flujo de ejecución del programa.

Condiciones

if condición:

accion

if condición:

accion

else:

accion alternativa

if condición 1:

accion 1

elif condicion 2:

accion 2

else:

accion alternativa

x = expresion if condición else expresion

x = u if abs(u) < 1.0 else 0.0

Ciclos

While

while condición:

accion

n = 10

i = 1

while i <= 10:

print 'i vale ' + i

i += 1 #i = i + 1

For

El for itera sobre los elementos de una secuencia. Las tuplas, listas, arreglos y string son iterables.

for e in iterador:

print e

for i in range(10): #range(n) devuelve una lista secuencial de 0 hasta n-1

print i

lista = ['a','b','c']

for i,c in enumerate(lista): #enumerate agrega un indice que parte en 0

print i,c

Todos los ciclos permiten salir rápidamente sin importar la condición usando la palabra “break”

for i,c in enumerate(lista):

if c == 'b':

break

print i,c

Funciones

Python permite la definición de funciones de la siguiente forma:

def mi_funcion():

print “hola”

#llamada a la función

mi_funcion()

def mi_funcion2(nombre = 'anónimo'):

return 'hola %s'%nombre

#llamada a la función

print mi_funcion2()

def mi_funcion3(nombre = 'anónimo', **kargs):

return 'hola %s. %s'%(nombre,kargs)

#llamada a la función

print mi_funcion3('exequiel',edad=21,situacion='aun-feliz')

from math import sqrt #importamos del módulo matemático la función sqrt

def distancia(p1,p2):

#distancia de un punto a otro en 2D

d = (p1[0] – p2[0]) ** 2 + (p1[1] – p2[1]) ** 2

return sqrt(d)

#llamada a la función

distancia((2,0),(4,8))

def distancia2(p1,p2):

#distancia de un punto a otro en cualquier dimension

dif = map(lambda x,y: x-y, p1,p2)

return sqrt(reduce(lambda x,y: x**2 + y**2, dif))

def distancia3(p1,p2):

#distancia de un punto a otro en cualquier dimension

return sqrt(sum(map(lambda x,y: (x-y)**2, p1,p2)))

Documentación

En Python la documentación está en el mismo código y corresponde al primer comentario debajo de lo que se quiere documentar.

Hay documentación para:

  • script
  • una función
  • parte de una función

---------------------------- inicio script ------------------

'''Este script contiende funciones sencillas.

También es posible agregar más funciones, pero bien documentadas'''

def mi_funcion_saludo():

#imprime un saludo en castellano

print “hola”

def factorial(n):

#retorna el factorial de n que es 1*2*3*4*...*n

return reduce(lambda x,y: x*y, range(1,n+1))

---------------------------- fin script ------------------

Map – Reduce

Map y Reduce es una técnica que permite aplicar una función a una lista de valores (map) y luego obtener un valor único de la lista (reduce).

Map

map(f,lista1,lista2,lista3): aplica a cada elemento de las listas la función f especificada y retorna una nueva lista con los valores obtenidos. La función f debe recibir tantos parámetros como listas hayan sido indicadas.

lista = range(1,11)

map(lambda x: x**2,lista)

o bien:

lista = range(1,11)

def cuadrado(x):

return x**2

map(cuadrado,lista)

Es equivalente también:

map(lambda x: x**2,lista) <=> [x**2 for x in lista] <=> [cuadrado(x) for x in lista]

Reduce

reduce(f(x,y),lista): aplica la función f con los dos primeros elementos de la secuencia, luego con el resultado y el siguiente elemento y así sucesivamente.

lista = range(1,11)

suma = reduce(lambda x,y: x+y,lista)

o bien:

n = 10

factorial = reduce(lambda x,y: x * y,range(1,n))

Map-Reduce es una estrategia adecuada para distribuir procesamiento, aplicando la función f a varios elementos a la vez (en paralelo idealmente) y finalmente haciendo un reduce.

¿Cómo calculo la varianza muestral usando una estrategia map reduce?

Figura 1
Figura 1 (graphics1.wikimedia.org/math/6/a/d/6ad02bc5a6ac0482207e30f84225956c.png)

Ejercicio Guiado Sesión #1

Vamos a disponer de un archivo de datos en formato CSV (delimitado) donde tendremos seis variables: coordenadas (x,y,z), ley de cobre, ley de oro y unidad geológica.

El script load_data.py permite cargar datos desde archivos csv.

Con esta función usted podrá tener una lista de datos. Se pide hacer lo siguiente:

  1. Entregar las estadísticas básicas, esto es, mínimo, máximo, rango, promedio, varianza y desviación para cada variable
  2. Determinar el cubo que envuelve los datos (entregar las ocho aristas)
  3. Para cada punto, entregar el punto más cercano

Content actions

Download module as:

Add module to:

My Favorites (?)

'My Favorites' is a special kind of lens which you can use to bookmark modules and collections. 'My Favorites' can only be seen by you, and collections saved in 'My Favorites' can remember the last module you were on. You need an account to use 'My Favorites'.

| A lens I own (?)

Definition of a lens

Lenses

A lens is a custom view of the content in the repository. You can think of it as a fancy kind of list that will let you see content through the eyes of organizations and people you trust.

What is in a lens?

Lens makers point to materials (modules and collections), creating a guide that includes their own comments and descriptive tags about the content.

Who can create a lens?

Any individual member, a community, or a respected organization.

What are tags? tag icon

Tags are descriptors added by lens makers to help label content, attaching a vocabulary that is meaningful in the context of the lens.

| External bookmarks