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)

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())

2Eva_IIT2018_T4 Hielo y especies en Ártico-programa

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

Sección 4. Programa que usa las funciones de la sección 1, 2, 3 (preguntas 6-9)

implemente un programa principal que:

6. Forme las matrices a partir del archivo ‘artico2009-2019.txt

7. Muestre por pantalla el código de las especies que en el 2019 son comunes (se repiten) para los cuadrantes Q1, Q2 y Q4 pero que no existan en Q3.

Los siguientes dos numerales se resuelven juntos.

8. Determine si ha habido migración de la especie con código 3. Existe migración si el cuadrante con mayor población en el 2009 y 2019 son diferentes .

9. Una posible explicación para la migración de una especie puede ser el deshielo. Entonces, si existió migración (de la especie con código 3) del cuadrante con mayor población en el 2009 (Qx) al cuadrante con mayor población en el 2019 (Qy), muestre la diferencia (positiva o negativa) de densidad de hielo del 2009 al 2019 para el cuadrante Qx.

Calcule la diferencia con la siguiente fórmula:

Diferencia = densidad_Qx_2019 - densidad_Qx_2009

Por ejemplo:

Si migracionEspecie retorna (‘Q1’, ‘Q4’), la diferencia será la densidad de hielo en el 2009 del cuadrante ‘Q1’ menos la densidad de hielo en el 2019 del mismo cuadrante ‘Q1’.

Rúbrica: numeral 6 (1 punto), numeral 7 (9 puntos), numeral 8 (1 punto),numeral 9 (9 puntos)

2Eva_IIT2018_T1 Hielo y especies en Ártico-Archivo

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

(Editado para tarea, se manteniene el objetivo de aprendizaje)
Sección 1
. (pregunta 1) Descripción del Problema y lectura de datos desde archivo

La World Wide Fund for Nature (WWF) se encuentra realizando el #TenYearChallenge del Ártico. http://diarioecologia.com/el-deshielo-del-artico-aumenta-la-mortalidad-del-oso-polar/

Referencia: https://www.worldwildlife.org/stories/imperiled-polar-bears-face-new-threat-in-alaska-s-arctic-national-wildlife-refuge

Para esto dispone de información sobre la cantidad de hielo y población de animales de diversas especies durante los años 2009 y 2019 en un archivo con el siguiente formato:

Número de filas
Número de columnas
Año,fila,columna,hielo,especie

Ejemplo: ‘artico2009-2019.txt

22
14
Año,fila,columna,hielo(0/1),especie
...
2009,14,8,1,9
...
2019,5,7,0,3

Implemente las siguientes funciones:

  1. crearMatriz(nomArchivo) que recibe el nombre del archivo con los datos de la WWF y retorna una tupla que contiene las siguientes cuatro matrices:
mhielo2009: Cantidad de 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
mhielo2019: Cantidad de 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
mAnimales2009: Especies de animales 2009
1 2 4 4
2 5 5 3
1 3 9 1
1 1 4 2
4 22 4 7
1 1 14 4
mAnimales2019: Especies de 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

En las matrices de hielo cada valor uno (1) en una celda representa la presencia de hielo.

En las matrices de animales cada celda representa la presencia de un animal de una especie usando una cierta codificación, como la del ejemplo:

0: No hay animal 
1: Lobo ártico 
2: Oso Polar 
3: Reno 
4: Foca 
5: ...

Rúbrica: numeral 1 (15 puntos): abrir y cerrar archivo, procesar lineas de tamaño de matriz, crear matrices, procesar líneas de datos de matriz, llenar matrices.

2Eva_IT2018_T2 Pago nomina mensual

2da Evaluación I Término 2018-2019. 31-Agosto-2018 /CCPG001

(Editado para tarea, se mantiene el objetivo de aprendizaje)

Tema 2. (50 puntos) Una compañía, con miles de empleados y varias sucursales en el país, paga sus salarios por hora clasificadas como:

– horas regulares (HR),
– horas fuera de horario normal (HER),
– fines de semana (HFDS) y
– feriados (HF).

El registro de asistencia de los empleados contiene: dia, mes, año, cantidad de horas trabajadas, entre otros mostrados en el archivo ejemplo.

El archivo inicia con líneas del valor en dólares por hora, los factores de pago por tipo, una linea de encabezado y el detalle de las horas trabajadas por empleado. Por ejemplo:

VH,10,Valor Hora en ésta compañía
HR,1,Factor Horas Regulares
HER,1.21,Factor Horas Extras en dias Regulares (lunes-viernes)
HFDS,1.37,Factor Horas en Fin De Semana (Sabado o domingo)
HF,1.39,Factor Horas en Feriado
Fecha,dia,feriado,ID,nombre,sucursal,ciudad,horas-trabajadas
...
10-Agosto-2018,5,Si,FG848801,Fabricio Granados,River Mall,Cuenca,1
10-Agosto-2018,5,Si,GH907603,Segunda Vez Zambrano,River Mall,Cuenca,1
09-Agosto-2018,4,No,FG848801,Fabricio Granados,River Mall,Cuenca,9
...

Las horas extras en días regulares se calculan después de la 8va hora de trabajo.

Si el empleado trabajó en un dia feriado, que también es fin de semana, el factor aplicado es el más alto, es decir feriado.

Desarrolle las funciones descritas a continuación y un programa para calcular los valores a pagar para cada empleado.

a) calcularHoras(linea). Recibe una línea del archivo y determina el número de horas trabajadas para cada categoría. El resultado es una tupla con el identificador del empleado, ciudad y horas trabajadas regulares, extras, fines de semana y feriado.

>>> linea = "09-Agosto-2018,4,No,FG848801,Fabricio Granados, River Mall, Cuenca,9"
>>> calcularHoras(linea)
('FG848801','Cuenca',8,1,0,0)

b) leerData(nomA). Recibe el nombre del archivo de nómina (nomA) correspondiente a un mes de un año y retorna una tupla de tres elementos: (totales, mes, año).   Totales es un diccionario con la suma en dólares de HR, HER, HFDS y HF trabajados por cada empleado con la siguiente estructura:

totales = {'Cuenca':
            {'FG848801': {'HR': 530.0, 'HER': 36.30,
                          'HFDS': 0.0, 'HF': 13.89},
             'GH907603': {'HR': 425.0, 'HER': 48.30,
                          'HFDS': 13.70, 'HF': 13.90}
             ...
             }
          'Quito' :
            {...},
          ...
          }

c) generaReporte(nomA). Recibe el nombre del archivo de nómina (nomA) correspondiente a un mes de un año y genera un nuevo archivo reporte para cada ciudad.
Cada archivo reporte tiene como nombre «ciudadMes-Año.txt» y contiene: cabecera y la siguiente información por cada empleado:

idEmpleado, total$HorasRegulares, total$HorasExtras(HER+HFDS+HF)

Rúbrica: literal a (12 puntos), literal b (25 puntos), literal c (13 puntos)

Referencia: Archivo original 2daEvaI_Term2018.pdf

2Eva_IT2018_T3 Prueba de Escritorio – cadenas, indexación, diccionarios

2da Evaluación I Término 2018-2019. 31-Agosto-2018 /CCPG001

Tema 3. (10 puntos) Indique la salida por pantalla del siguiente código. Justifique su respuesta.

import numpy as np

letters = np.array(['A', 'Z', 'P', 'B',
                    'E', 'R', 'O', 'M',
                    'B', 'A', 'C', 'D',
                    'Q', 'O'])
indexes = np.array([54, 23, 60, 13, 29,
                    65, 31, 23, 30, 99,
                    19, 89, 10, 56])
n1 = letters[indexes>=30]

res= {}
for x in n1:
    res[x] = res.get(x,0)+1

print(res)

Referencia: Archivo original 2daEvaI_Term2018.pdf

2Eva_IT2018_T1 Niveles seguridad por ciudad

2da Evaluación I Término 2018-2019. 31-Agosto-2018 /CCPG001

(Editado para tarea, se mantiene el objetivo de aprendizaje)

http://www.ecu911.gob.ec/wp-content/uploads/2017/06/1-37.jpeg
Sistema ECU911

Tema 1. (40 puntos) Para analizar los niveles de seguridad en el país, se registran los incidentes por ciudad y tipo delito en un archivo.

incidentes
robo vehículo asalto Escandalo vía pública
Quito 540 4523 24
Guayaquil 605 6345 5
Cuenca 123 676 133
Machala 67 1234 412
…. ….

Dispone de un modulo «ecu911» con la función cargarDatos(nombrearchivo) que lee el archivo y entrega un diccionario con la las veces que se ha reportado cada tipo de delito para cada ciudad del país en  el siguiente formato:

diccionario = {
    'Guayaquil':{'robo vehiculo':605, 'asalto':6345, ...},
    'Cuenca':   {'robo vehiculo':123, 'asalto': 676, ...},
    ...
    }

Para  crear el diccionario debe importar el módulo.

Se requiere implementar lo siguiente:

a.  Una función tablatitulos(diccionario) que recibe el diccionario descrito y retorna una coleccion:

titulos = (ciudad, tipodelito)

ciudad contiene las ciudades del archivo, y tipodelito contiene los tipos considerados en el diccionario, ambos sin duplicados.

b. La función crearMatriz(diccionario) que usando la información del diccionario crea una matriz con el número de incidentes por ciudad y tipo de delito. La matriz es un arreglo de numpy, semejante al ejemplo:

>>> matriz
array([[ 530, 4523,  24, ...],
       [ 605, 6345,   5, ...],
       [ 123,  676, 133,...],
       [  67, 1234, 412, ...],
       ... 
        ])

c. Una función ciudadesMenosSeguras(matriz, titulos, untipo, poblacion) que retorna los nombres de las tres ciudades que tienen el mayor indice per capita de para untipo de delito.

\text{indice per capita} = \frac{\text{numero de incidentes reportados}}{\text{poblacion de la ciudad}}

La función recibe la matriz , titulos de los literales anteriores, un tipo de delito  y  la población de cada ciudad del país en un vector, arreglo Numpy.

Rúbrica: literal a (10 puntos), literal b (20 puntos), literal c (10 puntos).

Referencia: Archivo original 2daEvaI_Term2018.pdf

2Eva_IIT2017_T1 Citas San Valentín

2da Evaluación II Término 2017-2018. Febrero 14, 2018 /CCPG001

(Editado para tarea, se mantiene el objetivo de aprendizaje)

Tema 1. (35 puntos) Para un servicios de citas «san valentín» , se pretende presentar parejas para el día del «amor y la amistad». Los datos de las personas se almacenan en una estructura de datos tipo diccionario: dicPersonas.

Para conocer la compatibilidad entre dos personas, se utilizan sus características y el índice de Tanimoto  que es un valor entre [0, 1] determinado como:

Tanimoto(P_1,P_2) = \frac{|caracteristicasP_1 \cap caracteristicasP_2|}{|caracteristicasP_1 \cup caracteristicasP_2|}

El emparejamiento resulta verdadero cuando: el valor del índice de Tanimoto es superior o igual al nivel de aceptación y la pareja no han tenido citas previas (sin importar su tipo: exitosa o fallida).

dicPersonas = {
    'p1021': {'nombre': 'Carlos S.',
              'caracteristicas': {'alegre',
                                  'fumador',
                                  'hacker',
                                  'deportista'},
              'citas': {'fallidas': ['P1902',
                                     'P2893',
                                     'P2310'],
                        'exitosas': ['P4025',
                                     'P1001']}
              },
    'p1001': {'nombre': 'Andrea V.',
              'caracteristicas': {'farrero',
                                  'programador',
                                  'fabuloso',
                                  'deportista'},
              'citas': {'fallidas': ['P1802'],
                        'exitosas': ['P1021',
                                     'P1002']}
              }
    }

a) Realice una función hayEmparejamiento(codigoP1, codigoP2, dicpersonas, aceptacion) para encontrar los valores del índice de Tanimoto y emparejamiento.

La función recibe el código de dos personas, el diccionario de personas (dicpersonas) y el nivel de aceptación mínimo [0,1]  para entregar los resultados en una tupla.

b) Desarrolle la función imprimirResultados(codigoPersona, dicPersonas, aceptacionMinimo, aceptacionMaximo) que genera un un archivo codigoPersona.txt, con el reporte de compatibilidad de la codigoPersona con las de género opuesto en el diccionario.

Cada línea del archivo tiene el formato siguiente:

codigo$Nombre$Caracteristica1,caracteristica2, ... $indiceTanimoto$textoCompatibilidad\n

Donde textoCompatibilidad es ‘aceptar‘ si el índice de Tanimoto está entre los niveles de aceptación mínimo y máximo, sino tiene la palabra ‘rechazar‘.

c) Elabore la  función compatibles(codigoPersona, dicPersonas, aceptacion) que a partir de un codigoPersona y considerando el nivel de aceptación, genera un reporte de emparejamiento en la forma del diccionario «respuesta» .

El diccionario «respuesta» contiene el nombre, caraterísticas, índice de Tanamoto y cantidad de citas fallidas.
El parámetro de aceptación tiene valor por defecto de 0.43,

Ejemplo:
respuesta = {
    'p1001': {'nombre': 'Andrea V.',
              'caracteristicas': {'deportista',
                                  'programador',
                                  'fabuloso',
                                  'farrero'},
              'indice': 0.14,
              'fallidas': 1
              }
    }

Rúbrica: literal a (10 puntos), literal b (13 puntos), literal c (12 puntos)

Referencia: Archivo original 2Eva_IIT2017.pdf

2Eva_IIT2017_T3 Prueba de escritorio, arreglos

2da Evaluación II Término 2017-2018. Febrero 14, 2018 /CCPG001

Tema 3. (10 puntos) Para las preguntas, considere matriz M como un arreglo (Numpy) :

import numpy as np

M =  np.array([['h','o','l','a'],
               ['m','u','n','d'],
               ['o','E','S','P'],
               ['O','L',':',')']])

a) Indique la salida por pantalla de las siguientes instrucciones. Justifique su respuesta:

f,c = M.shape
t = ''
for j in range(c):
    t = t + ''.join(M[:,j].tolist())
    
print(t)

b) Indique la salida por pantalla de las siguientes instrucciones. Justifique su respuesta:

print((((M =='o')|(M=='O')).sum(axis=0)>0).sum())

Rúbrica: cada literal 5 puntos

Referencia: Archivo original 2Eva_IIT2017.pdf