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 Valentin

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

2Eva_IIT2017_T2 Reporte comercio internacional

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

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

Tema 2. (55 puntos) Para el intercambio comercial entre paises se registran las  transacciones de compra/venta de productos por categoría.

Las categorías agrupan productos como: flores, frutas, maderas, etc.

La categoría ‘flores’ contiene: claveles, rosas, tulipanes, girasoles, etc. mientras que frutas tiene a cacao, banano, etc.

Las transacciones para cada catetoría se almacenan en archivos diferentes.

Ejemplo de archivo: Flores.txt, Maderas.txt

Comprador, Vendedor, Producto, UnidadesVendidas, Ventasen$, Fecha
Estados Unidos,Ecuador,rosas,59284,631432.21,2018-01-10
Holanda,Japon,tulipanes,2384,12424.87,2017-11-22
...
Estados Unidos,Ecuador,girasoles,38284,331432.75,2018-02-01

Note que un país puede vender el mismo producto al mismo comprador pero en una fecha diferente.

a) Elabore una función calculaTotales(categoria) que procesa los datos del archivo ‘categoria.txt’ y determina los totales de las transacciones entre países. Los totales se muestran en un diccionario de la forma:

totales ={(comprador,vendedor,producto): totalUnidades}

Por ejemplo, si en la categoríaFlores’, ‘Estados Unidos’ le compró ‘rosas’ a ‘Ecuador’ en 12 fechas diferentes, el total deberá ser la suma de los valores de las 12 transacciones:

{('Estados Unidos', 'Ecuador', 'rosas'): 257868}

b) Escriba una función consolidado(nomArchivo, categorias) que dada una lista de categorías genera el listado del acumulado de unidades vendidas por comprador, vendedor y producto.

El resultado se almacena en el archivo ‘nomArchivo.txt’ con la siguiente estructura:

Comprador,Vendedor,Categoría,Producto,TotalUnidadesVendidas

Para el resto del ejercicio, asuma que dispone de una función crearMatriz(narchivo) que recibe el nombre del archivo consolidado y devuelve una tupla con tres elementos:
(1) Matriz M cuyas filas representan países vendedores, columas representan productos ordenados alfabeticamente dentro de cada categoría y las celdas representan ventas totales en unidades.
(2) lista con las etiquetas de las filas y
(3) lista con las etiquetas de las columnas.

c) La función ventasCategorias(nomArchivo, dicCat) realiza un reporte por categoría de los 5 países que han vendido menos productos.

Cada reporte se almacena en un archivo ‘total_categoria.txt’.
Los datos provienen del archivo consolidado nomArchivo.txt y un diccionario donde las claves son las categorías y los valores son listas con todos los productos.
Los productos se encuentran ordenados alfabeticamente dentro de cada categoría, las categorías no están ordenadas alfabéticamente.

Cada archivo tendrá la siguiente estructura:

País,Total_Ventas

Rúbrica: literal a (15 puntos), literal b (15 puntos), literal c (25 puntos).


Referencia: Archivo original 2Eva_IIT2017.pdf

archivos usados: Flores.txtMaderas.txt
para obtener respuestas: categoriasconsolidado.txt, totalFlores, totalMaderas

2Eva_IT2017_T1 Contar palabras de un archivo

2da Evaluación I Término 2017-2018. Septiembre 2, 2017 /CCPG001

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

TEMA 1 (40 PUNTOS). Para el texto de un libro se requiere generar las estadísticas del uso de palabras . Dispone también de una lista con conectores = [‘la’, ‘con’, ‘de’, ‘y’, ‘…’]  que son palabras que no agregan mayor significado al texto.

Como ejemplo, el archivo con nombre=’ textolibro.txt ‘ contiene:

Con la ayuda de un grupo de amigos y de valientes aliados Frodo emprende un peligroso viaje con la
misión de destruir el Anillo Único Pero el Señor Oscuro Sauron quien creara el Anillo envía a sus
servidores para perseguir al grupo Si Sauron lograra recuperar el Anillo sería el final de la Tierra
Media Ganadora de cuatro Oscars este inmortal relato sobre el bien y el mal la amistad y el sacrificio
te transportará a un mundo más allá de tu imaginación
...

Desarrolle lo necesario para implementar las siguientes funciones:

a)  cargarArchivo(nombre), que lea el archivo de texto denominado ‘nombre’ para crear una tabla (NumPy con dtype=’U20′), donde cada fila representa una línea y cada columna contiene una palabra de dicha línea.

Notas:
Cada línea del archivo está limitada por ‘\n‘  y cada palabra está separada por un espacio en blanco.
Asuma que cada palabra tendrá 20 caracteres como máximo y que el número máximo de palabras por líneas es 30. Si la línea tiene menos de 30 palabras, las celdas restantes deben ser llenadas con una cadena vacía (»).

b) ocurrencias(palabra, tabla), que tiene como resultado el número de veces que la palabra aparece en la tabla.

c) lineas(palabra, tabla), que entrega un vector (tupla) con los números de fila donde aparece la palabra en tabla.

d) contarPalabras(tabla , conectores) que muestra como resultado una tupla con:
– la cantidad de palabras únicas en el texto (incluyendo los conectores) y
– el número solo de conectores que se incluyen en el texto.
Cada palabra (regular o conector) debe ser contada una sola vez sin importar cuantas veces se repita en el texto.

e) concordancia(tabla, conectores) que obtiene las estadísticas de las palabras  y entrega el diccionario mostrado en ejemplo.
Para el diccionario interno ‘palabras‘ no debe incluir los ‘conectores’. .
Puede apoyarse en las funciones anteriores para generar el diccionario.

Ejemplo:
resultado = 
{
    'NTP': 83,
    'NPC': 22,
    'palabras':{
        'Anillo': {'veces': 3, 'NL': (2,2,3)},
        'Sauron': {'veces': 2, 'NL': (2,3) },
        ...
        }
 }
 Donde,
 NTP = Número total de palabras
 NPC = Número solo de palabras stopwords
 NL = Número de líneas

Referencia del texto: Tolkien, J. R. R. (1991). La comunidad del anillo (Vol. 1). Planeta Publishing.

Archivo Original 2Eva_IT2017.pdf

Rúbrica: literal a (6 puntos + 5 puntos de bono),  literal b y c (6 puntos cada uno), literal d y e (11 puntos cada uno).

2Eva_IT2017_T2 Plantas energía eléctrica

2da Evaluación I Término 2017-2018. Septiembre 2, 2017 /CCPG001

TEMA 2. (50 PUNTOS) Para administrar la nueva matriz energética del Ecuador, se dispone de un diccionario con la información de las plantas de energía y las ciudades que atienden cada una.

Cada ciudad tiene: una tupla con los consumos mensuales (12) del año en megavatios-hora (MWh) y la tarifa de consumo en dólares por megavatio-hora (MWh) que le cobra la planta eléctrica.

Una ciudad puede estar servida por más de una planta eléctrica. No todas las ciudades son servidas por todas las plantas eléctricas.

consumo_energia = {
    'Coca Codo Sinclair': {
        'Quito': { 'consumos':(400, 432, …, 213),'tarifa': 65},
        'Guayaquil': { 'consumos': (120, 55, 32, …, 70),'tarifa': 84},
        ...
        },
    'Sopladora': {
        'Guayaquil':{ 'consumos': (310, 220, 321, …, 200),'tarifa':55},
        'Quito': { 'consumos': (400, 432, …, 587),'tarifa': 79},
        'Loja': { 'consumos': (50, 32, 32, …, 40),'tarifa': 32},
        ...
        },
    ...
    }

Además, dispone del siguiente diccionario con información de ciudad por región :

informacion = {
    'costa': ('Guayaquil', 'Manta', …),
    'sierra': ('Quito', 'Ambato', …),
    'oriente': ('Tena', 'Nueva Loja', …),
    }

Implemente lo siguiente:

  1.  Una función total_anual(consumo_energia, planta, ciudad) que recibe el diccionario consumo_energia, el nombre de una planta y el nombre de una ciudad. La función debe calcular y retornar el total anual de megavatios-hora servido por planta a ciudad. (7 puntos)
  2.  Una función total_plantas_ciudad(consumo_energia, ciudad) que recibe el diccionario consumo_energia y el nombre de una ciudad. La función debe devolver un diccionario cuyas claves corresponden a los nombres de las plantas generadoras que proveen energía a ciudad y los valores corresponden al total anual de megavatios-hora servido por cada planta a ciudad. (13 puntos)
  3.  Una función megavatios_hora(consumo_energia, informacion) que recibe el diccionario consumo_energia y el diccionario informacion . La función retorna el total anual de megavatios-hora consumido por todas las ciudades de la región COSTA. (15 puntos)
  4. Una función facturacion(consumo_energia) que recibe el diccionario consumo_energia y genera un archivo con la facturación total en dólares de los seis primeros meses de cada planta generadora. El archivo resultante se llamará <code?’facturacion.txt’ y tendrá la siguiente estructura: (15 puntos)
Planta,enero,febrero,marzo,...,junio
Coca Codo Sinclair,2903,2145,3010,...,2945
Sopladora,3102,3234,3223,...,3417
…

Referencia: Archivo Original 2Eva_IT2017.pdf

2Eva_IT2017_T3 Prueba de escritorio – cadenas, archivos, listas

2da Evaluación I Término 2017-2018. Septiembre 2, 2017 /CCPG001

TEMA 3 (10 PUNTOS)
a. Considere:

archivo = open( 'datos.txt' , 'w' )
archivo.write( 'Días de la semana\n' )
archivo.close()

lista = [ 'lunes' , '\n' , 'martes' , '\n' ,
          'miércoles' , 'jueves' , 'viernes' ]

archivo = open ( 'datos.txt' , 'a+' )
archivo.writelines( lista )
archivo.close()

¿Cuántas líneas de texto tiene el archivo ‘datos.txt’ al final del programa y con qué contenido? Justifique su respuesta. (5 puntos)

b. Muestre la salida por pantalla la ejecución del siguiente código y justifique su respuesta: (5 puntos)

a = set([4,5,9,7,1])
b = set([6,3,8,2,10])
c = set([1,4,5])

d = set([len(a), len(c), len(b)])

f = (a | b) & d
g = (b - c) | d
h = d ^ a

print(f)
print(g)
print(h)

Referencia: Archivo Original 2Eva_IT2017.pdf

2Eva_IIT2016_T3 Prueba de Escritorio – conjuntos, operaciones, diferencia simétrica

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

Tema 3. (10 puntos) Dados los conjuntos:

A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8, 9}
C = {5, 4, 7, 0, 1}
Y = {len(A), len(B), len (C)}

a. Indique la salida del programa. Justifique su respuesta

X = A|B
Z = X^C
E = X-C
print(A.issubset(E))

b. Indique la salida del programa. Justifique su respuesta

Y = A&Y
Z = Y-C
print(Z)

Referencia: Archivo original 2Eva_IIT2016.pdf

2Eva_IIT2016_T2 País destino para jubilados extranjeros

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

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

Tema 2. Para ayudar a las personas alrededor del mundo a seleccionar un país donde vivir cuando se jubilen, se ofrece información como el  costo de vida, las temperaturas medias por ciudad, etc.jubiladocuenca01

a. Escriba la función cargarDatos(nomFile)
que recibe el nombre de un archivo con las ciudades y sus métricas y retorna un diccionario con la estructura mostrada a continuación:

Ejemplo: "datos.txt" contiene:

Cuenca,temperatura,22
Guayaquil,canastaBasica,630
Cuenca,canastaBasica,457
Bogota,canastaBasica,321
Bogota,temperatura,20
Guayaquil,temperatura,29

cargarDatos("datos.txt") retorna un diccionario con la siguiente estructura:
datos=
{"Guayaquil":{"canastaBasica":630, "temperatura":29},
 "Cuenta":   {"canastaBasica":457, "temperatura":22},
  ...}

Nota: para el ejercicio solo existen dos métricas posibles: “canastaBásica” y “temperatura” y todas las ciudades tienen ambas métricas.

b. Escriba la función metricaPais(datos, paises) que recibe el diccionario datos, generado con la función anterior, y el diccionario paises que tiene como clave el nombre del país y como valor la lista de ciudades para ese país. Esta función calcula el valor promedio de cada métrica por país y retorna un diccionario cuya clave es el país y cuyo valor es otro diccionario con los promedios por métrica.

paises={'Ecuador':{'Cuenca','Guayaquil'},'Colombia':{'Bogotá'}, ...}

Por ejemplo, para Guayaquil y Cuenca que pertenecen al mismo país se calcula el promedio de las métricas: "canastaBasica" y "temperatura", cuyo resultado se lo asigna al país Ecuador

{"Ecuador":  {"canastaBasica":542.50, "temperatura":25.5},
 "Colombia": {"canastaBasica":321, "temperatura":20},
 ...}

c. Escriba la función generaPaises(promedios, metrica, minimo, maximo)  para buscar los paises que en su promedios cumplen con los valores entre mínimo y máximo para una métrica deseada.

Los argumentos son promedios, con la estructura del diccionario generado en la función anterior, una cadena denominado métrica que puede ser “canastaBasica” o “temperatura” y un valor mínimo y un máximo para dicha métrica. El resultado será un archivo con el nombre de la métrica”.csv” que contiene: los países y el valor de la métrica buscada separados por coma.

Usando el ejemplo anterior:
generaPaises(proms, "temperatura", 23, 26) 

"temperatura.csv" tendrá el siguiente contenido:
Ecuador,temperatura, 25.5

Referencia: “Ecuador, a la cabeza de los mejores países para los jubilados“. 2 de Enero, 2015, www.eluniverso.com,

Archivo original 2Eva_IIT2016.pdf

2Eva_IIT2016_T1 Multas de Transito por sector

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

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

Tema 1. (30 puntos) Para registrar las multas de tránsito, la ciudad será representada por una matriz de 5×5 dividida en cuadrantes y sectores. multastransito01

Cada celda corresponde a un cuadrante y registra los valores acumulados de las multas reportadas por los agentes de tránsito. Existen cinco “sectores” (Norte Sur, Centro, Este y Oeste) que agrupan a varios cuadrantes mostrados en la tabla “sectores”.

Sectores
 Norte  Norte Norte  Norte  Norte
 Oeste  Oeste  Centro  Este  Este
 Oeste  Oeste  Centro  Este  Este
 Oeste  Oeste  Centro  Este  Este
 Sur  Sur  Sur  Sur  Sur

La tabla sectores muestra únicamente la distribución de sectores. No debe crear esta matriz “sectores”.

Para cumplir con la tarea, deberá implementar lo siguiente:

a. Una función generaMatriz(listamultas) que recibe una lista de tuplas  con las coordenadas del cuadrante y el valor de la multa (fila, columna, valor). La función deberá retornar una matriz (arreglo Numpy) con el valor agregado de las multas generadas para cada cuadrante.

Por ejemplo, para:
listamultas=
[(0, 0, 120), 
 (1, 2, 330), 
 (3, 4, 123), 
 (4, 2, 62), 
 (0, 0, 50), 
 (4, 4, 89), 
 (0, 3, 25), 
 (2, 0, 43), 
 (3, 2, 21), 
 (0, 0, 120)]

la función retorna:
totalmultas
 290  0 0  25  0
 0  0  330  0  0
 43  0  0  0  0
 0  0  21  0  123
 0  0  62  0  89

Nota: las coordenadas de la totalmultas empiezan en 0,0. En listamultas, las coordenadas pueden repetirse al haber varias multas en un mismo cuadrante.

b. Una función sectorTop(matriz) que reciba la matriz generada en el tema anterior, calcule el sector con el vator total de multas más alto y retorne una tupla con el nombre del sector (Norte, Sur, Centro, Este, Oeste) y dicho valor.

Para el ejemplo anterior, la función retornará: 
('Centro',351)

Referencia: “Doble columna y uso de zonas prohibidas, problemas por resolver en Guayaquil“, 27 de Agosto, 2015, www.eluniverso.com

Archivo original 2Eva_IIT2016.pdf