5 2020-06-19
Examen de Inteligencia de los Negocios
Grado: Inteligencia de los Negocios
Fecha: 19 de Junio de 2020
Ejercicio 5.1 Escribe un programa en python que permita guardar las notas de un alumno conseguidas en un cuatrimestre. Guarda la información en un diccionario cuyas claves sean las asignaturas y los valores las notas de cada asignatura. El programa pedirá la asignatura y la nota para esa asignatura. Si se recibe un número negativo en la nota, el programa termina y muestra las asignaturas suspensas.
Ejemplo
Introduce una asignatura: matemáticas
Introduce la nota: 4
Introduce una asignatura: economía
Introduce la nota: 8
Introduce una asignatura: programación
Introduce la nota: 10
Introduce una asignatura: ninguna
Introduce la nota: -2
Las asignaturas suspensas son:
matemáticas
La solución de este ejercicio no está disponible en el repositorio de origen.
Ejercicio 5.2 Escribir una función que tome una lista de números enteros desordenados y devuelva dos listas ordenadas. La primera con los números pares y la segunda con los números impares.
def pares_impares(lista):
'''Función que recibe una lista de números enteros y devuelve dos listas ordenadas con los números impares y pares de la lista dada.
Parámetros:
- lista: Es una lista de números enteros.
Devuelve: Dos listas ordenadas con los números impares y pares de la lista dada.
'''
# Definimos dos listas vacías para guardar los números pares e impares.
pares = []
impares = []
# Bucle para recorrer la lista de números.
for i in lista:
# Condicional para ver si el número es par o impar.
if i%2 == 0:
# Si el resto de la división entera por 2 es 0, el número es par y se añade a la lista de pares.
pares.append(i)
else:
# Si el resto de la división entera por 2 no es 0, el número es impar y se añade a la lista de impares.
impares.append(i)
# Ordenamos las listas.
pares.sort()
impares.sort()
# Devolvemos las listas de pares e impares.
return pares, impares
# Ejemplo
lista = [3, 8, 2, 7, 5, 4, 6, 1, 9]
pares, impares = pares_impares(lista)
print('Pares: ', pares)
print('Impares: ', impares)Pares: [2, 4, 6, 8]
Impares: [1, 3, 5, 7, 9]
Solución 2
def pares_impares(lista):
'''Función que recibe una lista de números enteros y devuelve dos listas ordenadas con los números impares y pares de la lista dada.
Parámetros:
- lista: Es una lista de números enteros.
Devuelve: Dos listas ordenadas con los números impares y pares de la lista dada.
'''
# Comprensión de listas para obtener la lista de números pares.
pares = [n for n in lista if n % 2 == 0]
# Comprensión de listas para obtener la lista de números impares.
impares = [n for n in lista if n % 2 != 0]
# Ordenamos las listas.
pares.sort()
impares.sort()
# Devolvemos las listas de pares e impares.
return pares, impares
# Ejemplo
lista = [3, 8, 2, 7, 5, 4, 6, 1, 9]
pares, impares = pares_impares(lista)
print('Pares: ', pares)
print('Impares: ', impares)Pares: [2, 4, 6, 8]
Impares: [1, 3, 5, 7, 9]
Ejercicio 5.3 Escribir un programa para gestionar las citas de una consulta médica. La base de datos de citas debe estar en un fichero de nombre citas.csv. Cada cita contendrá los campos dni, mes, dia, hora y especialidad. No es necesario que la primera fila del csv contenga los nombres de los campos. El programa debe incluir las siguientes funciones:
- Una función que permita generar el fichero y añadir una cita a la base de datos.
- Una función que reciba un dni y devuelva una lista con las citas de ese paciente.
- Una función para eliminar las citas anteriores a una fecha dada.
Solución 1
# Ruta del fichero de citas.
fichero = 'citas.csv'
def citas(fichero=fichero):
''' Función que muestra por pantalla el contenido del fichero de citas.
Parámetros:
- fichero: Es una cadena con la ruta del fichero de citas.
'''
try:
# Intentamos abrir el fichero de citas en modo lectura.
f = open(fichero, mode='r')
except FileNotFoundError:
# Si no existe el fichero, controlamos la excepción mostrando por pantalla un mensaje informando de que el fichero no existe.
print('El fichero no existe.')
else:
# Si el fichero existe y se puede abrir mostramos por pantalla una lista con sus líneas (cada línea corresponde a una cita).
print(f.readlines())
# Cerramos el fichero.
f.close()
return
# Apartado 1
def añadir_cita(dni, mes, dia, hora, especialidad, fichero = fichero):
''' Función que añade una cita al fichero de citas.
Parámetros:
- dni: Es una cadena con el dni del paciente.
- mes: Es una cadena con el número de mes.
- dia: Es una cadena con el día.
- hora: Es una cadena con la hora en formato hh:mm.
- especialidad: Es una cadena con la especialidad de la cita.
- fichero: Es una cadena con la ruta del fichero de citas.
'''
try:
# Intentamos abrir el fichero de citas en modo añadir.
f = open(fichero, mode = 'a')
except FileNotFoundError:
# Si no existe el fichero, controlamos la excepción mostrando por pantalla un mensaje informando de que el fichero no existe.
print('El fichero no existe.')
else:
# Si el fichero existe y se puede abrir añadimos al final del fichero una línea con la concatenación del dni, el mes, el día, la hora y la especialidad separados por comas.
f.write(dni + ',' + mes + ',' + dia + ',' + hora + ',' + especialidad + '\n')
# Cerramos el fichero.
f.close()
return
# Ejemplo
añadir_cita('01234567', '02', '05', '10:30', 'Cardiología')
añadir_cita('12345678', '04', '18', '12:00', 'Ginecología')
añadir_cita('01234567', '06', '20', '16:30', 'Cardiología')
añadir_cita('12345678', '03', '16', '9:30', 'Dermatología')
citas()['01234567,02,05,10:30,Cardiología\n', '12345678,04,18,12:00,Ginecología\n', '01234567,06,20,16:30,Cardiología\n', '12345678,03,16,9:30,Dermatología\n']
# Apartado 2
def buscar_citas(dni, fichero = fichero):
''' Función que busca las citas de un paciente en el fichero de citas.
Parámetros:
- dni: Es una cadena con el dni del paciente.
- fichero: Es una cadena con la ruta del fichero de citas.
Devuelve: Una lista con las citas del paciente con el dni dado.
'''
try:
# Intentamos abrir el fichero de citas en modo lectura.
f = open(fichero, mode = 'r')
except FileNotFoundError:
# Si no existe el fichero, controlamos la excepción mostrando por pantalla un mensaje informando de que el fichero no existe.
print('El fichero no existe.')
return
else:
# Si el fichero existe y se puede abrir, leemos todas las líneas y las guardamos en una lista. Cada línea corresponde a una cita.
citas = f.readlines()
# Cerramos el fichero.
f.close()
# Filtramos la lista de citas para quedarnos con las del dni dado y devolvemos la lista filtrada. Para ello dividimos cada línea usando como separador de campos la coma y accedemos a la primera posición de la lista generada para obtener el dni de la cita.
return [cita for cita in citas if cita.split(',')[0] == dni]
# Ejemplo
print(buscar_citas('12345678'))['12345678,04,18,12:00,Ginecología\n', '12345678,03,16,9:30,Dermatología\n']
# Apartado 3
def eliminar_citas(mes, dia, fichero = fichero):
''' Función que elimina del fichero de citas las citas anteriores a una fecha dada.
Parámetros:
- mes: Es una cadena con el número de mes.
- dia: Es una cadena con el día.
- fichero: Es una cadena con la ruta del fichero de citas.
'''
try:
# Intentamos abrir el fichero de citas en modo lectura.
f = open(fichero, mode = 'r')
except FileNotFoundError:
# Si no existe el fichero, controlamos la excepción mostrando por pantalla un mensaje informando de que el fichero no existe.
print('El fichero no existe.')
else:
# Si el fichero existe y se puede abrir, leemos todas las líneas y las guardamos en una lista. Cada línea corresponde a una cita.
citas = f.readlines()
# Cerramos el fichero.
f.close()
# Abrimos de nuevo el fichero en modo escritura (se elimina sus contenido).
f = open(fichero, mode='w')
# Bucle para recorrer las citas
for cita in citas:
# Dividimos la línea de cada cita usando como separador de campos la coma y concatenamos el segundo y tercer elementos de la lista resultantes que corresponden al mes y el día.
fecha = ''.join(cita.split(',')[1:3])
# Condicional para ver si la fecha de la cita es posteror a la fecha indicada.
if fecha >= mes + dia:
# Si la cita tiene una fecha posterior a la fecha indicada la escribimos en una nueva línea del fichero.
f.write(cita)
# Cerramos el fichero.
f.close()
return
# Ejemplo
eliminar_citas('04', '01')
citas()['12345678,04,18,12:00,Ginecología\n', '01234567,06,20,16:30,Cardiología\n']
Ejercicio 5.4 El fichero ipc-2020.csv contiene el IPC de las comunidades autónomas de los cinco primeros meses de 2020. Crear un programa que realice las siguientes operaciones utilizando la librería Pandas:
- Crear un DataFrame leyendo el fichero desde internet con la url
https://aprendeconalf.es/docencia/python/examenes/inteligencia-negocios/soluciones/examen-2020-06-19/ipc-2020.csv. - Mostrar por pantalla el DataFrame con los datos de las filas 10 a 15.
- Mostrar por pantalla el DataFrame con los datos de Canarias de Mayo.
- Mostrar por pantalla una serie con el IPC mensual máximo de cada comunidad autónoma.
- Mostrar por pantalla una serie con la desviación típica del IPC mensual de cada grupo.
- Mostrar por pantalla un DataFrame con las comunidades y grupos donde los precios no han subido en promedio (IPC mensual medio menor de 100).
Solución 1
import pandas as pd
# Apartado 1
# Leemos el DataFrame desde la url
ipc = pd.read_csv("https://aprendeconalf.es/docencia/python/examenes/inteligencia-negocios/soluciones/examen-2020-06-19/ipc-2020.csv")
ipc Comunidad autónoma Grupo Año Mes \
0 Andalucía Alimentos y bebidas no alcohólicas 2020 Mayo
1 Andalucía Alimentos y bebidas no alcohólicas 2020 Abril
2 Andalucía Alimentos y bebidas no alcohólicas 2020 Marzo
3 Andalucía Alimentos y bebidas no alcohólicas 2020 Febrero
4 Andalucía Alimentos y bebidas no alcohólicas 2020 Enero
... ... ... ... ...
1135 Melilla Otros bienes y servicios 2020 Mayo
1136 Melilla Otros bienes y servicios 2020 Abril
1137 Melilla Otros bienes y servicios 2020 Marzo
1138 Melilla Otros bienes y servicios 2020 Febrero
1139 Melilla Otros bienes y servicios 2020 Enero
IPC
0 107.260
1 107.332
2 105.611
3 105.435
4 105.058
... ...
1135 101.052
1136 100.773
1137 100.986
1138 101.040
1139 100.593
[1140 rows x 5 columns]
# Apartado 2
# Serie con los datos de la fila 10 a la 15
print(ipc.iloc[9:14,])Comunidad autónoma Grupo Año Mes IPC
9 Andalucía Bebidas alcohólicas y tabaco 2020 Enero 103.436
10 Andalucía Vestido y calzado 2020 Mayo 110.538
11 Andalucía Vestido y calzado 2020 Abril 108.010
12 Andalucía Vestido y calzado 2020 Marzo 97.741
13 Andalucía Vestido y calzado 2020 Febrero 92.678
# Apartado 3
# Ipc de Canarias de Mayo
ipc[(ipc['Comunidad autónoma'] == 'Canarias') & (ipc['Mes'] == 'Mayo')] Comunidad autónoma Grupo \
240 Canarias Alimentos y bebidas no alcohólicas
245 Canarias Bebidas alcohólicas y tabaco
250 Canarias Vestido y calzado
255 Canarias Vivienda, agua, electricidad, gas y otros comb...
260 Canarias Muebles, artículos del hogar y artículos para ...
265 Canarias Sanidad
270 Canarias Transporte
275 Canarias Comunicaciones
280 Canarias Ocio y cultura
285 Canarias Enseñanza
290 Canarias Restaurantes y hoteles
295 Canarias Otros bienes y servicios
Año Mes IPC Periodo
240 2020 Mayo 106.183 2020Mayo
245 2020 Mayo 118.690 2020Mayo
250 2020 Mayo 111.108 2020Mayo
255 2020 Mayo 99.291 2020Mayo
260 2020 Mayo 98.667 2020Mayo
265 2020 Mayo 100.323 2020Mayo
270 2020 Mayo 105.817 2020Mayo
275 2020 Mayo 104.871 2020Mayo
280 2020 Mayo 97.686 2020Mayo
285 2020 Mayo 100.905 2020Mayo
290 2020 Mayo 108.149 2020Mayo
295 2020 Mayo 103.802 2020Mayo
# Apartado 4
# IPC máximo mensual por comunidades
ipc.groupby('Comunidad autónoma').IPC.max()Comunidad autónoma
Andalucía 110.538
Aragón 110.459
Asturias, Principado de 111.028
Balears, Illes 110.175
Canarias 118.868
Cantabria 113.443
Castilla - La Mancha 110.282
Castilla y León 112.252
Cataluña 110.784
Ceuta 113.244
Comunitat Valenciana 111.834
Extremadura 110.652
Galicia 109.438
Madrid, Comunidad de 110.541
Melilla 110.751
Murcia, Región de 111.972
Navarra, Comunidad Foral de 110.834
País Vasco 111.777
Rioja, La 115.892
Name: IPC, dtype: float64
# Apartado 5
# Desviación típica del IPC mensual por grupos ordenado de mayor a menor
ipc.groupby('Grupo').IPC.std().sort_values(ascending = False)Grupo
Vestido y calzado 7.473487
Transporte 4.021121
Bebidas alcohólicas y tabaco 3.125740
Vivienda, agua, electricidad, gas y otros combustibles 2.566030
Enseñanza 1.706892
Restaurantes y hoteles 1.505234
Muebles, artículos del hogar y artículos para el mantenimiento corriente del hogar 1.479133
Otros bienes y servicios 1.314706
Alimentos y bebidas no alcohólicas 1.274428
Comunicaciones 1.230438
Ocio y cultura 1.112717
Sanidad 1.089534
Name: IPC, dtype: float64
# Apartado 6
# Comunidades y grupos con un IPC mensual medio menor de 100.
ipc_medias = ipc.groupby(['Comunidad autónoma','Grupo']).IPC.mean()
ipc_medias[ipc_medias < 100]Comunidad autónoma Grupo
Andalucía Muebles, artículos del hogar y artículos para el mantenimiento corriente del hogar 99.4302
Ocio y cultura 99.1484
Aragón Muebles, artículos del hogar y artículos para el mantenimiento corriente del hogar 98.6628
Ocio y cultura 98.5150
Asturias, Principado de Enseñanza 99.5982
Ocio y cultura 97.8752
Balears, Illes Ocio y cultura 99.4216
Canarias Muebles, artículos del hogar y artículos para el mantenimiento corriente del hogar 98.2600
Ocio y cultura 98.1462
Cantabria Muebles, artículos del hogar y artículos para el mantenimiento corriente del hogar 99.6226
Ocio y cultura 97.4698
Vivienda, agua, electricidad, gas y otros combustibles 99.9460
Castilla - La Mancha Muebles, artículos del hogar y artículos para el mantenimiento corriente del hogar 99.7986
Ocio y cultura 98.0030
Castilla y León Ocio y cultura 99.4268
Ceuta Muebles, artículos del hogar y artículos para el mantenimiento corriente del hogar 96.6706
Ocio y cultura 97.9256
Comunitat Valenciana Vivienda, agua, electricidad, gas y otros combustibles 99.6172
Extremadura Muebles, artículos del hogar y artículos para el mantenimiento corriente del hogar 99.9848
Ocio y cultura 99.1018
Vivienda, agua, electricidad, gas y otros combustibles 99.3100
Galicia Ocio y cultura 98.5452
Melilla Ocio y cultura 98.2606
Transporte 99.7854
Murcia, Región de Muebles, artículos del hogar y artículos para el mantenimiento corriente del hogar 99.2730
Ocio y cultura 97.8524
Vivienda, agua, electricidad, gas y otros combustibles 99.0846
Navarra, Comunidad Foral de Muebles, artículos del hogar y artículos para el mantenimiento corriente del hogar 99.8240
Ocio y cultura 99.4248
Rioja, La Ocio y cultura 99.0350
Vivienda, agua, electricidad, gas y otros combustibles 99.7910
Name: IPC, dtype: float64