5  2020-06-19
Examen de Inteligencia de los Negocios

Fecha de publicación

19 de junio de 2020

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.

Carpeta de soluciones del examen

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]

Ver notebook de la solución en Colab

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:

  1. Una función que permita generar el fichero y añadir una cita a la base de datos.
  2. Una función que reciba un dni y devuelva una lista con las citas de ese paciente.
  3. 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']

Ver notebook de la solución en Colab

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:

  1. 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.
  2. Mostrar por pantalla el DataFrame con los datos de las filas 10 a 15.
  3. Mostrar por pantalla el DataFrame con los datos de Canarias de Mayo.
  4. Mostrar por pantalla una serie con el IPC mensual máximo de cada comunidad autónoma.
  5. Mostrar por pantalla una serie con la desviación típica del IPC mensual de cada grupo.
  6. 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

Ver notebook de la solución en Colab