Sei sulla pagina 1di 39

Curso de Python aplicado a Minería

Conceptos Básicos PYTHON


Programa
- Conjunto de estamentos o sentencias almacenados en un
fichero de texto que manipulan objetos .
Objetos
- Un objeto puede representar un variable, un conjunto de
variables y puede ‘hacer cosas’
- Una variable pueden representar números (enteros, coma
flotante, complejos) o cadenas de caracteres o conjuntos de
los mismos
- Una variable es un objeto o forma parte de él.
- Combinaciones de letras y números
- Son sensitivas a las mayúsculas
- No se permiten símbolos especiales (excepto _) o blancos
- No pueden empezar por números
- Cuando se plantea una sentencia del tipo A = 10 lo que se
está diciendo es que a la variable A se asigna el valor de 10.
La sentencia A == 10 es una operación lógica que es falsa o
verdadera en función de si A toma o no el valor 10.
- Cada realización concreta de ese objeto se denomina una
instancia
Primera parte – Tema 1
1
Curso de Python aplicado a Minería
Conceptos Básicos
Tipos de Variables
- Booleans
- Integer
- Float
- String
- Complex Numbers

Los tipos son asignados automáticamente. Se pueden reasignar con las funciones int,
float, str. Bool nos permite evaluar cualquier tipo en términos lógicos. Para conocer el
tipo de una variable, función type().

Operadores
+.-,*,/ (ojo con la división entera) (ejemplo en ejercicio_2_cap_1.py)
**
Cuidado con las prioridades en las formulas. Ante la duda, ()

Funciones Matemáticas más comunes


incluir la sentencia ‘ import math’ cuando se invoque, p.e. A = math.sin(b)
si se quiere una visión del código más limpia utilizar ‘from math import sin, …’ y quedará
como A = sin(b)
Primera parte – Tema 1
2
Curso de Python aplicado a Minería
Conceptos Básicos
Print

Para imprimir usar un string en el que se sustituye la variable por % con este significado:
Formato Significado
%s string
%d integer
%f float con seis decimales
%e ,%E notation cinentifica con exponente e,E
%g ,%G notation cinentifica compacta con exponente e,E
%.yz tipo z con y decimales
%x.yz tipo z con y decimals en un total de números x
%% Representa el signo % en si mismo
Formato:

print string % (variable1,variable2,… )


print ‘Velocidad = %5.2f trayectoria = %g’ % (v0,x) # Siempre las variables entre paréntesis

Primera parte – Tema 1


3
Curso de Python aplicado a Minería
Conceptos Básicos

Ejercicio 1

Hacer un programa que calcule los valores de la distribución normal

Ejercicio_1_cap_1.py

from math import exp, sqrt, pi # Utilizamos las funciones de math

media = 0;varianza=1;x=0.04 # Iniciamos variables

fx = 1/sqrt(2*pi*varianza)*exp(-((x-media)/varianza)**2/2) # Formula

print 'x= %g f(x) = %g' % (x,fx) # Impresión con formato

Primera parte – Tema 1


4
Curso de Python aplicado a Minería
Bucles y Listas
Loops (Bloques)

En python se define un bloque de la siguiente manera

<sentencia de ejecución de bloque1> :


<4s>>sentencia 1
……………..
<4s>>sentencia n
<sentencia de ejecución de bloque1> :
<4s>>sentencia 1
……………..
<4s>>sentencia n

Todo lo que viene a continuación de ‘:’ y está situado con una sangría exacta de 4 espacios,
se considera incluido en el bloque. Un posicionamiento a una sangría anterior indica el fin
del bloque

Como ejemplo, ejercicio_1_cap_2.py

Primera parte – Tema 1


5
Curso de Python aplicado a Minería
Bucles y Listas
Bucle While

Se define en un bloque

while <condición lógica> :


<4s>>sentencia 1
……………..
<4s>>sentencia n

La condición lógica es comparativa entre Otros operadores no evidentes


variables con operadores lógicos

== igual que A += 1, A -= 1; A *= 2; A /= 2
!= distinto de A = A + 1; A = A – 1; A = 2 * A; A = A / 2
> mayor que
>= mayor o igual que Las sentencias pueden estar en la misma
< menor que linea separadas por ;
<= menor o igual que
Y los operadores
AND OR NOT y ( )
Primera parte – Tema 1
6
Curso de Python aplicado a Minería
Bucles y Listas

# Calculo del seno por desarrollo en serie con N términos

ejercicio_2_cap_2.py

import math # Importamos toda la librería


x = 1.2;N = 25; k = 1; s = x; sign = 1.0 # iniciamos variables
while k < N: # inicio de bucle hasta 24 incluido
sign = -sign # a cada paso, cambio de signo
k += 2 # sumamos 2 al contador
term = sign*x**k/math.factorial(k) # Calculo del kesimo termino
s += term # se suma la serie
print 'seno(%g) = %g (aproximacion con %d terminos' % (x,s,N)
# impresión con formato

Primera parte – Tema 1


7
Curso de Python aplicado a Minería
Bucles y Listas

Convertir en grados Farenhein las temperaturas medida


en Celsius desde -20º a 100º con un intervalo de 20

paso = 20 # Definimos el paso


maximo = 100 # Definimos la máxima
c = -20 # Definimos la temp. mínima
while c <= 100: # Bucle hasta c = 100 inclusive
F = (9.0/5) * c + 32 # Conversión a Farenhein
print 'Celsius = %d Farenhein = %5.1f' % (c,F)
# Impresión
c +=20 # Incremento de 20 la temperatura

Primera parte – Tema 1


8
Curso de Python aplicado a Minería
Bucles y Listas
Lists (Listas)

Es un conjunto de objetos . No tienen porqué compartir tipos.

mi_lista = *10,3.76,’mis datos’,327+

Y se accede individualmente a sus componentes a través de un índice con base 0


Valores de índices negativos indican
A = mi_lista[0] # es int mi_lista[-1] último término
S = mi_lista[2] # es un string mi_lista[-2] penúltimo
F = mi_lista[1] # es un float etc.

List tiene una serie de funciones útiles como:


mi_lista=[] inicia una lista
mi_lista.append(‘Nuevo Dato’) o equivale a mi_lista = mi_lista + *‘Nuevo Dato’+
mi_lista.insert (2,‘Dato insertado’)
len(lista)
del mi_lista[2]
mi_lista [1:3]
Primera parte – Tema 1
9
Curso de Python aplicado a Minería
Bucles y Listas
Lists (Listas)

mi_lista.remove(e) Elimina un elemento con valor e


mi_lista.index(’mis datos’) Encuentra el indice correspondiente al valor del
elemento
mi_lista.count(v) Cuenta cuantos elementos tienen el valor v
min(mi_lista) El valor más pequeño
max(mi_lista) El valor más grande
sum(mi_lista) Suma los valores de la lista
sort(mi_lista) Clasifica los valores de la lista
reversed(mi_lista) Devuelve los valores clasificados invertidos
b[3][0][2] Acceso a listas ennidadas
isinstance(mi_lista, list) Es True si mi_lista es una lista
type(mi_lista) is list Es True si mi_lista es una lista

Primera parte – Tema 1


10
Curso de Python aplicado a Minería
Bucles y Listas
Listas Anidadas

Si una lista está compuesta a su vez por listas

nl = [[0, 0, 1], [-1, -1, 2], [-10, 10, 5]]

Acceso

nl[1][2] = 2
nl[-1][2] = 5

Tuplas

Son similares a las listas, pero no es posible hacer modificaciones

mi_tupla = (t, dt, T , ‘ mis numeros’, 100)

Primera parte – Tema 1


11
Curso de Python aplicado a Minería
Bucles y Listas
Bucle For
Se aplica a bloques y está diseñado para manejar listas
for <elemento> in <lista o tupla> :
<4s>>sentencia 1
……………..
<4s>>sentencia n

Range

- range(desde,hasta,paso) genera números enteros comenzando por desde e


incrementando en paso hasta alcanzar hasta
- Si se suprimen argumentos, por defecto paso=1 y un solo número marca el límite inferior
En un bucle, se pueden generar estos valores for i in range(desde,hasta,paso) :
La iteración pues se puede hacer de dos modos si mi_lista es una lista y elemento es un
miembro de ella
for elemento in lista: o por indices for i in range(len(lista)) :

Para obtener a la vez el índice y el elemento:


for i,elemento in enumerate(lista):
lista[i] = elemento * 2
Primera parte – Tema 1
12
Curso de Python aplicado a Minería
Bucles y Listas

Demostracion en listas con bucle for con conversión y añadido de datos

ejercicio_5_cap_2.py

C = [-10,-12,-45,-7,0,30,70,80] # Lista de temperaturas en Celsius

for i in C: # Comienza el bucle recorriendo la lista C


F = (9.0/5) * i + 32 # Conversión del elemento i de la lista a Farenhein
print 'Celsius = %d Farenhein = %5.1f' % (i,F) # Impresión con formato

C = C + [85,100] # Añadido # Se añade dos nuevos elementos a la lista C

for i in C:
F = (9.0/5) * i + 32 # Se verifica lo anterior con la ampliación
print 'Celsius = %d Farenhein = %5.1f' % (i,F)

Primera parte – Tema 1


13
Curso de Python aplicado a Minería
Bucles y Listas
Demostracion en listas con bucle while con lista ejercicio_4_cap_2.py
Celsius = [-10,-12,-45,-7,0,30,70,80]
i=0
while i < len(Celsius): # En este ejercicio se ha hecho lo mismo que en el
# anterior pero utilizando while en lugar de for
C = Celsius[i]
F = (9.0/5) * C + 32
print 'Celsius = %d Farenhein = %5.1f' % (C,F)
i += 1
Demostracion uso de range ejercicio_5_cap_2.py
Celsius = [];i=0
Celsius = range(-20,120,15) # Uso de range para crear y cargar la lista Celsius con
# enteros desde -20 hasta 120 (excluido)
# con paso de 15
for i in range(len(Celsius)): # Queremos un contador i en lugar de los elementos
# de la lista. Por eso se refiere a len(Celsius) en lugar de
C = Celsius[i] # Celsius a secas. I va de 0 a 8.
F = (9.0/5) * C + 32
print 'Celsius = %d Farenhein = %5.1f' % (C,F)
# La posición indica impresión dentro de bucle
Primera parte – Tema 1
14
Curso de Python aplicado a Minería
Bucles y Listas
#Demostracion trabajo con dos listas que se almacenan ejercicio_7_cap_2.py

n=21
C_min = -10
C_max = 40 # Asignamos los grados Celsius máximos y mínimos
dC = (C_max-C_min)/float(n-1) # Calculamos el paso
Celsius = [0]*n # Creamos una lista con n=21 ceros y longitud
print len(Celsius) # obviamente 21

for i in range(len(Celsius)): # Utilizamos un bucle for para cargar la lista Celsius con
Celsius[i] = C_min + i * dC # temperaturas desde C_min a C_max con paso dC

Farenhein = [0]*n
for i in range(len(Celsius)): # Carga de lista Farenhein mediante conversion
Farenhein[i] = (9.0/5) * Celsius[i] + 32 # desde Celsius

for i in range(len(Celsius)): # Impresión de las dos listas


print 'Celsius = %5.1f Farenhein = %5.1f %d de %d' % (Celsius[i],Farenhein[i],i+1,len(Celsius))

Primera parte – Tema 1


15
Curso de Python aplicado a Minería
Bucles y Listas
Bucle for implicito
Se puede realizar un bucle for de modo implicito para cargar una lista de la forma

Nueva_Lista = (sentencia for <elemento> in <lista o tupla> )


o
Nueva_Lista = (sentencia for <elemento> in range(arg))
n=21
Celsius = [-5 + i*0.5 for i in range(n)]
Farenhein = [(9.0/5)*C + 32 for C in Celsius] # Uso de metodo compactado para crear y
Celsiusplus5 = [C+5 for C in Celsius] # cargar listas con bucle for
Sentencia zip
for C,F in zip(Celsius,Farenhein):
Reúne n listas en una sola de listas anidadas
print '%5.1f %5.1f' % (C,F)
compuestas por n elementos antiguos.
tabla = [Celsius,Farenhein]
También se puede hacer de forma directa
for C in tabla:
Así se recorren los valores de una lista anidad con
for F in C:
dos bucles
print '%5.1f' % F

Primera parte – Tema 1


16
Curso de Python aplicado a Minería
Funciones y Control de Flujo

Funciones
Se utiliza para independizar acciones del flujo principal del programa

def <nombre > (<arg_e1>…<arg_em>=defecto) :


<4s>>sentencia 1
……………..
<4s>>sentencia n
<4s>>return <arg_s1>…<arg_sn>

- Se puede invocar en cualquier parte del programa


- Las variables definidas en la función son válidas únicamente en ella (locales)
- Es posible enviar argumentos múltiples (incluso alguno por defecto si no se emplea)
- En posible obtener resultados múltiples

La invocación es:
s1, .., sn = <nombre> (e1, …, em)

Primera parte – Tema 1


17
Curso de Python aplicado a Minería
Funciones y Control de Flujo

ejercicio_1_cap_3.py

def Celsius_to_Farenhein (C): # Definición función Farenhein


return 32 + C*9.0/5 # Devuelve un float Celsius

def Farenhein_to_Celsius (F): # Definición función Celsius


return (F-32)*5/9.0 # Devuelve un float Farenhein

for c in range(-10,100,15): # Creamos y utilizamos una lista celsius


print 'Celsius %5.1f Farenhein %5.1f' % (c,Celsius_to_Farenhein (c))
# e imprimimos su conversion

# Y este es el ejercicio inverso


print '---- inverso'

for f in range(0,200,15):
print 'Celsius %5.1f Farenhein %5.1f' % (Farenhein_to_Celsius (f),f)

Primera parte – Tema 1


18
Curso de Python aplicado a Minería
Funciones y Control de Flujo

Variable Locales y Globales

Variables Locales solo tienen validez dentro de la función


Variables Globales son validas en todo el programa.
Si hay conflictos de nombre dentro de una función, predomina el local de la función.

ejercicio_2_cap_3.py

print 'inicio', sum #Objeto python implicitamente construido como str


sum = 500 #redefinicion a entero
print 'antes de funcion', sum #sum es una variable global

def funcion(n):
sum = n + 1
print 'en funcion ',sum #sum es una variable local
return sum

sum = funcion(2)+1 #reasignacion de sum global


print 'despues de funcion ',sum
Primera parte – Tema 1
19
Curso de Python aplicado a Minería
Funciones y Control de Flujo

Variable Locales y Globales

Utilizando la sentencia global es posible manipular una variable global dentro de una
función. Sino no es posible.
ejercicio_3_cap_3.py
a = 20; b = -2.5 # inicio de variables

def f1(x): # funcion f1(x) que devuelve 21*x – 2.5


a=21
return a*x + b
print a # como ‘a’ no ha variado (la ‘a’ de la función es local)
# imprime 20
def f2(x): #Funcion f2(x) que declara global a ‘a’
global a #y por tanto, puede cambiar de valor.
a = 21
return a*x + b # Devuelve lo mismo que f1(x) pero ‘a’ global cambia a 21

f1(3);print a # imprime 21*3-2.5=60.5 , 20


f2(3);print a # imprime 60.5 , 21
Primera parte – Tema 1
20
Curso de Python aplicado a Minería
Funciones y Control de Flujo
Ejemplo de uso de argumentos múltiples de entrada en una función
ejercicio_5_cap_3.py
def trayectoria (v0,t): # Función que admite dos argumentos
g = 9.81
return v0*t - g*t*t/2

for v0 in range (1000,2000,500): # Bucle for con rango e invocación de función


for t in range(0,100,10):
print ' V0 = %d tiempo = %d espacio = %5.2f' % (v0,t,trayectoria(v0,t))
Y también de salida y
def trayectoria_velocidad (v0,t):
g = 9.81
return v0*t - g*t*t/2,v0-g*t # Se devuelven dos argumentos

for v0 in range (1000,2000,500):


for t in range(0,100,10):
espacio, velocidad = trayectoria_velocidad(v0,t) # Se asignan los argumentos a objetos
print ' V0 = %d t= %d s= %5.2f v= %5.2f' % (v0,t,espacio,velocidad)

Primera parte – Tema 1


21
Curso de Python aplicado a Minería
Funciones y Control de Flujo

Condicionales con IF_ELIF_ELSE

if condition1 es cierta:
<4s><bloque de sentencias 1>
elif condition2 es cierta:
<4s><bloque de sentencias 2>
elif condition3 es cierta:
<4s><bloque de sentencias 4>
else :
<4s><bloque de sentencias 3>
<next statement>

Primera parte – Tema 1


22
Curso de Python aplicado a Minería

Flujos encadenados
Ejemplo de Control de Flujo simple
from math import pi,sin
ejercicio_6_cap_3.p def f(x):
from math import pi,sin if x < 0:
return 0.0 # Define una función
def f(x): elif 0 <= x < 1: # a tramos
if 0 <= x <= pi: return x
valor = sin(x) # Solo calcula sin(x) elif 1 <= x < 2:
else: # si x está entro 0 y pi return 2-x
valor = 0 # si no es así = 0 elif x >= 2 :
return valor return 0.0

print pi/4, f(pi/4),f(100) x = -0.1


while x <2.2:
funcion = f(x)
print 'x = %5.2f f(x) = %5.2f' % (x,funcion)
x += 0.1

Primera parte – Tema 1


23
Curso de Python aplicado a Minería
Funciones y Control de Flujo

Utilización de números aleatorios y cadenas con control de flujo implícito.

ejercicio_8_cap_3.py

import random # Biblioteca para generar aleatorios


N = 100000
alfabeto = list('ATGC') # se define una lista (list evita la ambigüedad str
dna = [random.choice(alfabeto) for i in range(N)] # carga una lista
dna = '.'.join(dna) # con N datos aleatorios desde la base de alfabeto
print dna # Se intercalan puntos y se imprime

La sentencia <str>.join(<Lista>) coloca todos los elementos de la <Lista>


en un string intercalando el string <str>

Primera parte – Tema 1


24
Curso de Python aplicado a Minería
Manejo de Ficheros

Una función mágica : eval()

ejercicio_1_cap_4.py
La función eval(<expresión> ) devuelve la evaluación de una expresión matemática con su
tipo más conveniente. Muy útil para filtrar la entrada de datos.
eval (‘sqrt(2)’) devuelve 1.41421 float
eval(‘*1,2,4,5’+) devuelve [1,2,3,4,5] list

from math import sqrt,sin


y = 0.3
x=2
formula = eval('sin(y) + sqrt(x)') # Una expresion simbolica la convierte en codigo
# y la calcula
print x,y,formula

Primera parte – Tema 1


25
Curso de Python aplicado a Minería
Manejo de Ficheros

Una función mágica : exec()


La función exec(<expresión>) incluye una función en el código del programa de modo
externo en tiempo de ejecución.
La triple comilla define un string con varias líneas

ejercicio_1_cap_4.py

formula ="10*x + 4"


codigo = '''
def f(x):
return %s ''' % formula
print formula
exec(codigo)
print f(2)

# Aquí damos un paso más y incluimos en el codigo una funcion externa

Primera parte – Tema 1


26
Curso de Python aplicado a Minería
Manejo de Ficheros
¿Cómo se utiliza exec()?
ejercicio_2_cap_4.py
# Integración de una función por Simpson
# Definición de Funcion
def integracion_por_mitad_segmento(f,a,b,n=100): # n=100 indica el valor si se omite el
h = (b-a)/float(n) # argumento
I = 0.0
for i in range(n):
I += f(a + i*h + 0.5*h)
return I*h
formula = '(sin(x)*cos(3*x) + x**2)‘ # Formula que se puede cargar desde fuera como str
codigo = ''‘ # Triple comilla para literales de + de 1 linea
def f(x):
return %s
''' % formula
exec(codigo) # String que incluye la funcion

a = 0;b = pi/2 # iniciacion de variables


I = integracion_por_mitad_segmento(f,a,b) # integral
print 'integral [%f,%f] de %s = %f' % (a,b,formula,I)
Primera parte – Tema 1
27
Curso de Python aplicado a Minería
Manejo de Ficheros

Leer desde un fichero de datos

Un fichero es una lista especial. Puede ser


- Fichero texto – caracteres ASCII separados por fin de línea
- Fichero binario.

Un fichero ha de ser abierto y cerrado. El final del fichero está delimitado por un
carácter especial (EOF).

SI el fichero es fichero texto.

- Se abre: fichero1 = open(<nombre_fichero>,’r’)


- Cada línea se con una función del objeto lista = fichero1.readline y es una lista
lo que es equivalente a
listas =[elemento_lista for elemento_lista in fichero1]
(mejor opción)

Primera parte – Tema 1


28
Curso de Python aplicado a Minería
Manejo de Ficheros

Ejemplo de lectura de texto ejercicio_3_cap_4.py

camino = «<path del fichero de datos»>»


camino = camino + "ejercicio_3_4.txt"
fichero1 = open(camino,'r')
lineas = [linea for linea in fichero1]
print type(lineas), len(lineas)
SI el fichero es fichero binario.
for i in range(len(lineas)):
Usar la función lista = fichero1.read
print eval(lineas[i]),lineas[i]
No se tiene en cuenta el final de linea
fichero1.close()

fichero1 = open(camino,'r')
media = sum([float(linea) for lineas in fichero1.readlines()])/len(lineas)
print ' Media %f' % media

fichero1.close()
Primera parte – Tema 1
29
Curso de Python aplicado a Minería
Manejo de Ficheros
Leer desde un fichero de texto con datos y literales ejercicio_4_cap_4.py
def extraer_datos(nombre_fichero):
fichero1= open(nombre_fichero,'r')
fichero1.readline() # Linea no util
mes = [];lluvia = [] # iniciar listas
for linea in fichero1:
palabras = linea.split() #Función que convierte un string
# en una lista de strings separados por blancos
# o tabuladores
mes.append(palabras[0]);lluvia.append(palabras[1])
# asignamos a las listas mes y lluvia los elementos de la lista de linea de
# lectura 0 y 1
fichero1.close()
mes = mes[:-1]; lluvia = lluvia[:-1];lluvia_anual = lluvia[-1] # -1 ultimo termino
return mes,lluvia,lluvia_anual # Devuelve tres listas
nombre_fichero = ‘ejercicio_4_4.txt'
meses, valores, media = extraer_datos(nombre_fichero)
for meses, valores in zip(meses,valores): # Crea una lista compuesta de dos (tabla)
print meses,valores
print 'Media Anual',media
Primera parte – Tema 1
30
Curso de Python aplicado a Minería
Manejo de Ficheros
Escritura de Datos

Fichero2 = open(<nombre_fichero>,’w’) Si es de escritura destruyendo la anterior


Fichero2 = open(<nombre_fichero>,’a’) Si es de escritura añadiendo al final

La sentencia es de

Fichero2.write(<string> % varia_1, …, varia_n) similar a print

Ojo que el fin de línea hay que marcarlo con ‘\n’.

Primera parte – Tema 1


31
Curso de Python aplicado a Minería
Manejo de Ficheros
Ejemplo de Transformación de Datos ejercicio_5_cap_4.py
def abrir_fichero_entrada(nombre_fichero_entrada): # Funcion que abre un fichero a convertir y
entrada = open(nombre_fichero_entrada,'r') # devuelve el objeto
return entrada

def abrir_fichero_salida (nombre_fichero_salida): # Funcion que abre el fichero convertido


salida = open(nombre_fichero_salida,'w') # devuelve el objeto
return salida

def cambiar_datos(entrada): # función que sustituye los , por . para el string


s = entrada # entrada
variable = s.replace(',','.')
salida = variable.split(';') # crea una lista salida con los string separados por ;
return salida # devuelve la lista salida

def escribir_datos(fichero_salida,salida): # recibe el objeto fichero_salida y la lista de str


s = ';'.join(salida) # genera un string con los miembros de la
fichero_salida.write(s) # lista separados por ;
return

Primera parte – Tema 1


32
Curso de Python aplicado a Minería
Manejo de Ficheros
Ejemplo de Transformación de Datos ejercicio_5_cap_4.py

camino = "<mi_path>"
nombre_fichero_salida = camino + "sondeos_tema_1_puntos.csv"
nombre_fichero_entrada = camino + "sondeos_tema_1.txt«

entrada = abrir_fichero_entrada(nombre_fichero_entrada) #Genera un objeto fichero entrada


salida = abrir_fichero_salida (nombre_fichero_salida) #Genera un objeto fichero salida
entrada.readline() #Lee una linea
for lineas in entrada: #Para cada linea de entrada carga un str lineas
linea=cambiar_datos(lineas) # que la rutina devuelve una lista de variables str en linea
escribir_datos(salida,linea) # que escribe en el objeto salida
entrada.close() # cierre de ficheros
salida.close()

Primera parte – Tema 1


33
Curso de Python aplicado a Minería

Uso de listas anidadas como matrices (ARRAYS)

- Las listas anidadas pueden ser utilizadas como matrices (arrays)

- Sin embargo existen librerías específicas que pueden ser usadas para utilizar
matrices en el sentido matemático (listas rectangulares con los mismos tipos de
datos).
Optimizan el cálculo.

La librería es numpy y se puede descarga fuera del entorno QGIS. Por ejemplo en
Anaconda (entorno Spider)

Primera parte – Tema 1


34
Curso de Python aplicado a Minería
Uso de listas anidadas como matrices ejercicio_7_cap_4.py

# Sobre el programa anterior hacemos algunos cambios


variables = [] # iniciamos la lista anidada variables
nlin = 0 # iniciamos contador
for lineas in entrada: # Hasta fin de fichero
linea=cambiar_datos(lineas)
variables.append(linea) # añadimos la lista linea a variables
escribir_datos(salida,linea)
nlin +=1 # contador de lineas
nlin_efec = 0 #iniciamos variable de conteo
for j in range(6,11): # seleccionamos los elementos de la lista que nos interesen
media = 0 # inicio de acumulador
for i in range(nlin): # hasta final de fichero
if len(variables[i][j]) > 0 : # filtro para datos nulos
media += float(variables[i][j]) # calculamos la suma de la misma columna
nlin_efec += 1 # sumamos acumulador
media/=nlin_efec # calculo de media
print 'media de %s %f' % (nombres_variables[j],media) # impresion

Primera parte – Tema 1


35
Curso de Python aplicado a Minería
Uso de Diccionarios
Así como las listas son un conjunto de datos indexados por un entero, este objeto permite
utilizar como índice cualquier objeto del conjunto.
Se define como:

Diccionario = { indice1: Objeto1, indice2: Objeto2, …}

Objeto puede ser un string, lista, número, etc.

Se accede a un objeto concreto a través de su índice

Diccionario[indice1] es Objeto1

Muy utilizado en QGIS.

Primera parte – Tema 1


36
Curso de Python aplicado a Minería

Operadores de Diccionarios

- <Objeto> in <Diccionario> función true si está en el diccionario


- <Diccionario>.keys() extrae los valores de los índices
- <Diccionario>.values() Los Objetos del mismo
- sorted(<Diccionario>) Iteración de objetos ordenados por su índice
- len(<Diccionario>) longitud del diccionario
- del <Diccionario>[indice] destruye el Objeto que corresponde a ese índice
- <Diccionario>.copy() copia el diccionario

Primera parte – Tema 1


37
Curso de Python aplicado a Minería

Ejemplo de Uso de Diccionario ejercicio_1_cap6.py

Primera parte – Tema 1


38
Curso de Python aplicado a Minería

Manipulación de Strings (cadenas de caracteres)


Split Separa la cadena en subcadenas separadas por un delimitador
words = s.split(delimiter)
Join Situa un delimitador entre una lista de cadenas y devuelve una cadena con
ello
newstring = delimiter.join(lista)
Extrae un substring:
substring = s[2:n-4]
Replace Reemplaza a substring substr con otro y devuelve el manipulado:
s_new = s.replace(substr, replacement)
Find Chequea si una cadena está contenido dentro de otra cadena:
index = s.find(text)
if index == -1:
print No está"%s" en "%s" (text, s)
else:
substr

Primera parte – Tema 1


39

Potrebbero piacerti anche