3Eva_IIT2018_T3 Prueba de escritorio, arreglos

3ra Evaluación II Término 2018-2019. 15-Febrero-2019 /CCPG001

Tema 3 (10 puntos) ¿Qué muestra en la salida el siguiente código? Justifique su respuesta

import numpy as np

letras = np.array([['E','B','A','O'],
                   ['G','P','L','A'],
                   ['I','J','K','S'],
                   ['R','V','U','S']])

numeros = np.array([[93,58,63,21], 
                    [31,60,44,72],
                    [29,51,50,32],
                    [85,11,15,67]])

V1 = numeros[numeros>=60]
V2 = letras[numeros>=60]
V2 = V2[np.argsort(V1)]
for letra in V2:
    print(letra,end='')
print('!')

3Eva_IIT2018_T1 texto aleatorio

3ra Evaluación II Término 2018-2019. 15-Febrero-2019 /CCPG001

Tema 1. (30 puntos) Asuma que tiene una lista T de Términos. Un Término puede  ser una palabra o un o de los siguientes tres símbolos:
punto (.), coma (,) y guión(-).

Desarrolle un programa que forme un texto usando las siguientes reglas:

  • El texto debe estar compuesto de 73 términos seleccionados aleatoriamente
  • El primer término debe ser una palabra
  • No se puede seleccionar dos símbolos de manera consecutiva. Si eso pasa, seleccione un nuevo término aleatoriamente hasta que sea una palabra.
  • Dos Palabras seguidas deben estar separadas por un espacio.
    Ejemplo: palabra1 palabra2
  • La coma debe estar pegada a la palabra izquierda y separada por un espacio de la palabra a su derecha.
ejemplo palabra1, palabra2
  • El guión debe estar pegado a sus dos palabras.
Ejemplo: palabra1-palabra2
  • El punto debe estar pegado a la palabra de la izquierda y seguido de un salto de línea.
Ejemplo: Palabra 1.

  • No elimine términos de la lista T.

Escriba este texto resultante en un archivo de nombre: literatura.txt

s3Eva_IIT2018_T1 texto aleatorio

Ejercicio: 3Eva_IIT2018_T1 texto aleatorio

Propuesta de solución en Python:
<Ejemplo:

El texto generado es: 
Hola Hola.
Hola amigo-amiga Hola que-
>>> 
# CCPG1001-Fundamentos de Programación - FIEC-ESPOL
# 3Eva_IIT2018_T1 texto aleatorio

import random as rnd

# INGRESO
n = 10 # enunciado con 73
T = ['Hola','.','que','tal','-',',','amigo','amiga']

# PROCEDIMIENTO
k = len(T)
texto   = ''
simbolo = ',.-'
antes   = 0
cuenta  = 0
while not(cuenta>=n):
    aleatorio = int(rnd.random()*k)+0
    untermino =  T[aleatorio]
    espalabra = not(untermino in simbolo)
    if cuenta == 0 and espalabra==1:
        texto  = texto + untermino
        cuenta = cuenta + 1
        antes  = espalabra
    if cuenta >0:
        if espalabra == 1:
            if antes == 1:
                texto = texto + ' '+ untermino
            if antes == 0:
                texto = texto + untermino
            antes  = 1
            cuenta = cuenta+1
        if espalabra==0 and antes==1:
            if untermino==',':
                texto = texto + ', '
            if untermino=='.':
                texto = texto + '.\n'
            if untermino=='-':
                texto = texto +'-'
            antes = 0
            cuenta = cuenta+1
        # if espalabra==0 and antes ==0:
        #     print('no se pueden juntar simbolos')

# SALIDA
print('El texto generado es: ')
print(texto)

# Archivo
archivo = open('literatura.txt','w')
archivo.write(texto)
archivo.close()

2Eva_IIT2018_T3 Hielo y especies en Ártico-Diccionario

2da Evaluación II Término 2018-2019. 2-Febrero-2019 /CCPG001

Sección 3. Función para crear diccionario

Para el siguiente numeral, asuma que tiene un diccionario con los nombres de todas las especies del ártico en el siguiente formato:

dicEspecies = {codigo_especie:nombre_especie}

5. crearDiccionario(mHielo, mAnimales, dicEspecies) que recibe una matriz de hielo, una matriz de animales y el diccionario de las especies del Ártico.
La función crea un diccionario con los datos anteriore similar al mostrado:

dic = {'densidad hielo':{'Q1':0.75,
                         'Q2':0.11,
                         'Q3':0.55,
                         'Q4':0.47},
       'Especies':{ 1:51,
                    2:6,
                    ...
                    67:93}
       }

Para ‘Especies’ usar {especie:poblaciónTotal}

Rúbrica: Numeral 5 (20 puntos)

s2Eva_IIT2018_T4 Hielo y especies en Ártico-programa

Ejercicio: 2Eva_IIT2018_T4 Hielo y especies en Ártico-programa

Finalmente, se crea el programa que usa las funciones anteriores:

# CCPG1001-Fundamentos de programación FIEC-ESPOL
# 2Eva_IIT2018_T4 Hielo y especies en Ártico-programa

# ----- NUMERAL 1 y 6----- 
matrices = crearMatriz(narchivo)
mhielo09 = matrices[0]
mhielo19 = matrices[1]
manimales09 = matrices[2]
manimales19 = matrices[3]

# ----- NUMERAL 7-----
especies19 = np.unique(manimales19)
k = len(especies19)
comunes = []
for i in range(0,k,1):
    animal = especies19[i]
    Q = cuadrantes(manimales09)
    animal124 = np.concatenate([Q[0],Q[1],Q[3]]) 
    if (animal in animal124) and not(animal in Q[2]):
        comunes.append(animal)
        
# ----- NUMERAL 8-----
migra3 = migracionEspecie(manimales09, manimales19,3)
migro3 = 0
if (migra3[0]!=migra3[1]):
    migro3 =1
# ----- NUMERAL 9-----
# TAREA

# SALIDA
print(' ----- NUMERAL 1 y 6 ----- ')
print('hielo 2009')
print(mhielo09)
print('hielo 2019')
print(mhielo19)
print('animales 2009')
print(manimales09)
print('animales 2019')
print(manimales19)

print(' ----- NUMERAL 7 ----- ')
print('animales comunes: ')
print(comunes)

print(' ----- NUMERAL 8 ----- ')
print('migracion de 3:')
print(migra3)
print('migracion: ',migro3)

print(' ----- NUMERAL 9 ----- ')
print('Tarea...')

s2Eva_IIT2018_T3 Hielo y especies en Ártico-Diccionario

Ejercicio2Eva_IIT2018_T3 Hielo y especies en Ártico-Diccionario

}continuación de los temas anteriores:

# CCPG1001-Fundamentos de programación FIEC-ESPOL
# 2Eva_IIT2018_T3 Hielo y especies en Ártico-Diccionario

# ----- NUMERAL 5 -----
def crearDiccionario(mHielo, mAnimales, dicEspecies):
    densidad = densidadHielo(mHielo)
    k = len(densidad)
    tablad = {}
    for i in range(0,k,1):
        indice = 'Q'+str(i+1)
        tablad[indice] = densidad[i]

    especies = list(dicEspecies.keys())
    ke = len(especies)
    tablae = {}
    for j in range(0,ke,1):
        animal = especies[j]
        conteo = poblacionEspecie(mAnimales, animal)
        tablae[animal] = np.sum(conteo)
    
    tabla={}
    tabla['densidad hielo'] = tablad
    tabla['Especies'] = tablae
    return(tabla)

para probar con el computador, se usa el diccionario y los resultados anteriores:

# CCPG1001-Fundamentos de programación FIEC-ESPOL
# 2Eva_IIT2018_T3 Hielo y especies en Ártico-Diccionario

# ----- NUMERAL 5 -----
dicEspecies = {0:'No hay animal',
               1:'Lobo ártico',
               2:'Oso Polar',
               3:'Reno',
               4:'Foca',
               5:'...',
               7:'a7',
               9:'a9',
               22:'a22'}
datosdic = crearDiccionario(mhielo09,
                            manimales09,
                            dicEspecies)

#------------------------------------
print(' ----- NUMERAL 5 ----- ')
print('diccionario para año 2009')
print(datosdic)

con lo que los resultados son:

 ----- NUMERAL 5 ----- 
diccionario para año 2009
{'densidad hielo': {'Q1': 0.5,
                    'Q2': 0.6666666666666666,
                    'Q3': 0.8333333333333334,
                    'Q4': 0.5},
 'Especies': {0: 1,
              1: 7,
              2: 3,
              3: 2,
              4: 6,
              5: 2,
              7: 1,
              9: 1,
              22: 1}
 }

s2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar

Ejercicio2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar

Se añade las instrucciones al tema anterior,

Se incluyen las funciones que se asume como existentes para prueba de programa. En caso de problemas o dudas con el conteo, elaborar una función contar.

# CCPG1001-Fundamentos de programación FIEC-ESPOL
# 2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar
import numpy as np

# ----- NUMERAL 2 ----- 
# Funciones que suponen que existen:
def cuadrantes(matriz):
    tamano = np.shape(matriz)
    n = tamano[0]
    m = tamano[1]
    mitadfila = n//2
    mitadcolumna = m//2
    Q1 = matriz[0:mitadfila,0:mitadcolumna]
    Q2 = matriz[0:mitadfila,mitadcolumna:]
    Q3 = matriz[mitadfila:,0:mitadcolumna]
    Q4 = matriz[mitadfila:,mitadcolumna:]
    Q = np.array([Q1,Q2,Q3,Q4])
    return(Q)

def poblacionEspecie(mAnimales, especie):
    Q = cuadrantes(mAnimales)
    # pQ1 = np.count_nonzero(Q[0],especie)
    # np.count_nonzero no hay en funciones referencia
    # no en cheatsheet “Cheat Sheet”
    # se procede con algoritmo básico
    k = len(Q)
    poblacion = np.zeros(k,dtype=int)
    for i in range(0,k,1):
        unaQ = Q[i]
        tamano = np.shape(unaQ)
        n = tamano[0]
        m = tamano[1]
        for f in range(0,n,1):
            for c in range(0,m,1):
                if (unaQ[f,c] == especie):
                    poblacion[i] = poblacion[i] +1
    return(poblacion)

# otra forma es usar una funcion contar en arreglo
def contarenarreglo(arreglo,cual):
    tamano = np.shape(arreglo)
    n = tamano[0]
    m = tamano[1]
    contar = 0
    for f in range(0,n,1):
        for c in range(0,m,1):
            if (arreglo[f,c] == cual):
                contar = contar+1
    return(contar)



Desarrollo del numeral 2:

# CCPG1001-Fundamentos de programación FIEC-ESPOL
# 2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar
import numpy as np

# funcion numeral 2
def densidadHielo(mHielo):
    Q = cuadrantes(mHielo)
    k = len(Q)
    densidad = np.zeros(k,dtype=float)
    for i in range(0,k,1):
        unaQ = Q[i]
        tamano = np.shape(unaQ)
        n = tamano[0]
        m = tamano[1]
        densidad[i]=np.sum(unaQ)/(n*m)
    return(densidad)

desarrollo del numeral 3:

# CCPG1001-Fundamentos de programación FIEC-ESPOL
# 2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar
import numpy as np

# ----- NUMERAL 3 -----
def especieDominante(mAnimales):
    especies = np.unique(mAnimales)
    ke = len(especies)
    
    Q = cuadrantes(mAnimales)
    k = len(Q)
    dominante = np.zeros(k,dtype=int)
    for i in range(0,k,1):
        unaQ = Q[i]
        cuantos = np.zeros(ke,dtype=int)
        for j in range(0,ke,1):
            # solución semejante al NUMERAL 2
            # para poblacionEspecie
            animal = especies[j]
            cuantos[j] = contarenarreglo(unaQ,animal)
        mayoria = np.argmax(cuantos)
        dominante[i]= especies[mayoria]
    return(dominante)

desarrollo del numeral 4

# CCPG1001-Fundamentos de programación FIEC-ESPOL
# 2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar
import numpy as np

# ----- NUMERAL 4 -----
def migracionEspecie(mAnimales2009, mAnimales2019, especie):
    Q = cuadrantes(mAnimales2009)
    k = len(Q)
    cuantos = np.zeros(k,dtype=int)
    for i in range(0,k,1):
        unaQ = Q[i]
        cuantos[i] = contarenarreglo(unaQ,especie)
    mayoria09 = np.argmax(cuantos)

    Q = cuadrantes(mAnimales2019)
    k = len(Q)
    cuantos = np.zeros(k,dtype=int)
    for i in range(0,k,1):
        unaQ = Q[i]
        cuantos[i] = contarenarreglo(unaQ,especie)
    mayoria19 = np.argmax(cuantos)
    
    # considere numeración desde 0
    a = 'Q'+str(mayoria09+1)
    b = 'Q'+str(mayoria19+1)
    migraron =[a,b]
    return(migraron)


Programa de prueba, incluye las partes del tema anterior

# CCPG1001-Fundamentos de programación FIEC-ESPOL
# 2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar
import numpy as np

# PROGRAMA DE PRUEBA
# INGRESO
narchivo = 'artico2009-2019.txt'
especie = 4

# PROCEDIMIENTO

# ----- NUMERAL 1 ----- 
matrices = crearMatriz(narchivo)
mhielo09 = matrices[0]
mhielo19 = matrices[1]
manimales09 = matrices[2]
manimales19 = matrices[3]

# ----- NUMERAL 2 ----- 
Q = cuadrantes(manimales09)
poblacion = poblacionEspecie(manimales09, especie)
densidad = densidadHielo(mhielo09)

# ----- NUMERAL 3 -----
dominante = especieDominante(manimales09)

# ----- NUMERAL 4 -----
migraron = migracionEspecie(manimales09, manimales19, especie)


# SALIDA
print(' ----- NUMERAL 1 ----- ')
print('hielo 2009')
print(mhielo09)
print('hielo 2019')
print(mhielo19)
print('animales 2009')
print(manimales09)
print('animales 2019')
print(manimales19)

print(' ----- NUMERAL 2 ----- ')
print('cuadrantes de manimales09')
print(Q)
print('población por cuadrantes de manimales09')
print('para especie = 4')
print(poblacion)
print('densidad de hielo para mhielo09')
print(densidad)

print(' ----- NUMERAL 3 ----- ')
print('dominantes en manimales09')
print(dominante)
print(' ----- NUMERAL 4 ----- ')
print('migraron de la especie: ',especie)
print(migraron)

Los resultados obtenidos son:

animales 2009
[[ 1  2  4  4]
 [ 2  5  5  3]
 [ 1  3  9  1]
 [ 1  1  4  2]
 [ 4 22  4  7]
 [ 1  1  4  0]]

 ----- NUMERAL 2 ----- 
cuadrantes de manimales09
[[[ 1  2]
  [ 2  5]
  [ 1  3]]

 [[ 4  4]
  [ 5  3]
  [ 9  1]]

 [[ 1  1]
  [ 4 22]
  [ 1  1]]

 [[ 4  2]
  [ 4  7]
  [ 4  0]]]
población por cuadrantes de manimales09
para especie = 4
[0 2 1 3]
densidad de hielo para mhielo09
[0.5        0.66666667 0.83333333 0.5       ]
 ----- NUMERAL 3 ----- 
dominantes en manimales09
[1 4 1 4]
 ----- NUMERAL 4 ----- 
migraron de la especie:  4
['Q4', 'Q2']

s2Eva_IIT2018_T1 Hielo y especies en Ártico-Archivo

Ejercicio: 2Eva_IIT2018_T1 Hielo y especies en Ártico-Archivo

Usando el archivo proporcionado en el ejemplo: ‘artico2009-2019.txt

se crea la función y programa de prueba con las instrucciones más básicas y simples:

# CCPG1001-Fundamentos de programación FIEC-ESPOL
# 2Eva_IIT2018_T1 Hielo y especies en Ártico-Archivo

# ----- NUMERAL 1 ----- 
def crearMatriz(narchivo):
    archivo = open(narchivo,'r')
    
    # dimensiones de matriz
    linea = archivo.readline()
    n = int(linea.strip('\n'))
    linea = archivo.readline()
    m = int(linea.strip('\n'))
    # se crean las matrices
    mhielo09 = np.zeros(shape=(n,m),dtype=int)
    mhielo19 = np.zeros(shape=(n,m),dtype=int)
    manimales09 = np.zeros(shape=(n,m),dtype=int)
    manimales19 = np.zeros(shape=(n,m),dtype=int)
    
    # linea encabezados, No procesada
    linea = archivo.readline()
    
    # linea datos
    linea = archivo.readline()
    while not(linea==''):
        linea = linea.strip('\n')
        partes = linea.split(',')
        anio    =  partes[0]
        fila    = int(partes[1])
        columna = int(partes[2])
        hielo   = int(partes[3])
        animal  = int(partes[4])
        if (anio =='2009'):
            mhielo09[fila,columna] = hielo
            manimales09[fila,columna] = animal
        if (anio =='2019'):
            mhielo19[fila,columna] = hielo
            manimales19[fila,columna] = animal
        linea = archivo.readline()
    archivo.close()
    matrices = [mhielo09,
                mhielo19,
                manimales09,
                manimales19]
    return(matrices)

# PROGRAMA DE PRUEBA
# INGRESO
narchivo = 'artico2009-2019.txt'

# PROCEDIMIENTO
# ----- NUMERAL 1 ----- 
matrices = crearMatriz(narchivo)
mhielo09 = matrices[0]
mhielo19 = matrices[1]
manimales09 = matrices[2]
manimales19 = matrices[3]

# SALIDA
print(' ----- NUMERAL 1 ----- ')
print('hielo 2009')
print(mhielo09)
print('hielo 2019')
print(mhielo19)
print('animales 2009')
print(manimales09)
print('animales 2019')
print(manimales19)

para obtener:

 ----- NUMERAL 1 ----- 
hielo 2009
[[1 0 0 1]
 [0 1 1 1]
 [1 0 1 0]
 [1 1 1 0]
 [0 1 0 1]
 [1 1 1 0]]
hielo 2019
[[1 0 0 1]
 [0 1 0 1]
 [1 0 1 0]
 [1 0 1 0]
 [0 1 0 1]
 [0 0 1 0]]
animales 2009
[[ 1  2  4  4]
 [ 2  5  5  3]
 [ 1  3  9  1]
 [ 1  1  4  2]
 [ 4 22  4  7]
 [ 1  1  4  0]]
animales 2019
[[ 3  2  4  1]
 [ 0 11  3  5]
 [ 1  0 67  1]
 [ 2 22  3  2]
 [13 13  2  3]
 [ 3  0  1  0]]

2Eva_IIT2018_T2 Hielo y especies en Ártico-Procesar

2da Evaluación II Término 2018-2019. 2-Febrero-2019 /CCPG001

(Editado para tarea, se manteniene el objetivo de aprendizaje)
Sección 2
. Descripción del Problema y funciones con matrices (pregunta 2,3,4)

Para el resto del examen considere lo siguiente:

Cuadrantes de la matriz

Las matrices pueden ser divididas en cuadrantes, cuatro subregiones de igual tamaño,  denominados:
Q1, Q2, Q3 y Q4
como se muestra en la gráfica:

Asuma que existen las siguientes funciones:

a.  cuadrantes(matriz) que recibe una matriz y devuelve un vector con los cuadrantes de la matriz [Q1, Q2, Q3, Q4], que son a su vez matrices (arreglos).

b. poblacionEspecie(mAnimales, especie) que recibe una matriz de animales, el código de una especie y determina la cantidad total de animales de esa especie en cada uno de los cuadrantes. El resultado es un vector con el siguiente formato [pQ1, pQ2, pQ3, pQ4].


Realice las funciones:

2. densidadHielo(mHielo) que recibe una matriz de hielo y determina la densidad de hielo para cada cuadrante. El resultado es un vector con el  formato [dQ1, dQ2, dQ3, dQ4].
La densidad de un cuadrante es la cantidad total de sus celdas con valor uno (1) dividido para el número total de celdas del cuadrante.

3. especieDominante(mAnimales) que recibe una matriz de animales y encuentra la especie dominante por cuadrante.
El resultado es un vector con los códigos de la especie que más se repite en cada cuadrante: [eQ1, eQ2, eQ3, eQ4]

4. migracionEspecie(mAnimales2009, mAnimales2019, especie) que recibe la matriz de animales del 2009, la matriz de animales del 2019 y el código de una especie. La función debe retornar un vector [a,b] con dos valores:

a.  El primer valor corresponde al cuadrante donde hubo mayor población de animales de la especie en el 2009.
b.  El segundo valor corresponde al cuadrante donde hay mayor población de animales de la especie en el 2019.
Los valores son  los códigos de los cuadrantes: ‘Q1’, ‘Q2′,’Q3’, ‘Q4’

Rúbrica: numeral 2 (10 puntos), numeral 3 (20 puntos), numeral 4 (15 puntos),

2Eva_IIT2018_T5 Prueba de escritorio, arreglos

2da Evaluación II Término 2018-2019. 2-Febrero-2019 /CCPG001

Sección 5. BONO (+10 PUNTOS)
¿Qué resultado muestra el siguiente código? Justifique su respuesta

import numpy as np

M = np.ones((20,17), int)
M1 = M[5:14,7:15]
M2 = M[1:9,8:]

f,c = M2.shape
if M1.size == f*c:
    M[5:14,7:15] = 0
else:
    M[1:9,8:] = -1

print(M.sum())