Ejercicio 5

El fichero cotizacion.csv contiene las cotizaciones de las empresas del IBEX35 con las siguientes columnas: nombre (nombre de la empresa), Final (precio de la acción al cierre de bolsa), Máximo (precio máximo de la acción durante la jornada), Mínimo (precio mínimo de la acción durante la jornada), volumen (Volumen al cierre de bolsa), Efectivo (capitalización al cierre en miles de euros).

  1. Construir una función que abra un fichero con el formato anterior y devuelva un diccionario con los datos del fichero por columnas.

    La función debe cumplir los siguientes requisitos:

    • La función recibirá como único parámetro la ruta del fichero.
    • Debe realizarse un preprocesado de los datos que reemplace la coma por el punto como separador de decimales.
    • Debe realizarse el control de errores mediante excepciones para el caso de que el fichero no exista en la ruta indicada.
    • Debe devolver un diccionario con tantos elementos como columnas tenga el fichero, donde la clave de cada par sea el nombre de la columna y el valor la lista de datos de la columna.
  2. Construir una función que reciba el diccionario devuelto por la función anterior y cree un fichero en formato csv con el mínimo, el máximo y la media de dada columna.

    La función debe cumplir los siguientes requisitos:

    • La función recibirá como parámetros el diccionario con los datos de cotización y la ruta del fichero a crear.
    • El fichero generado tendrá las mismas columnas que el fichero cotizacion.csv con los mismos nombres de columnas, y tres líneas correspondientes al mínimo, máximo y media de los datos de cada columna. En la columna nombre en lugar del nombre de la empresa debe aparecer la medida calculada en esa línea (mínimo, máximo o media). Los datos deben estar separados por punto y coma.

Solución


In [2]:
def limpiar(cifra):
    """
    Función que elimina los puntos de separación de miles y cambia las comas de separación de decimales por puntos.
    Parámetros:
        - cifra: Es una cadena con una cifra
    Devuelve:
        Un real con la cifra de la cadena después de eliminar el separador de miles y cambiar el separador de decimales por punto.
    """
    cifra = cifra.replace('.', '')
    cifra = cifra.replace(',','.')
    return float(cifra) 

def preprocesado(ruta):
    """
    Función que preprocesa los datos contenidos en un fichero con formato csv y devuelve un diccionario con los nombres de las columnas como claves y las listas de valores asociados a ellas.
    Parámetros:
        - ruta: Es una cadena con la ruta del fichero.
    Devuelve:
        Un diccionario con pares formados por los nombres de las columnas y las listas de valores en las columnas.
    """
    try:
        # Abrimos el fichero en modo lectura
        f = open(ruta, 'r')
    except FileNotFoundError:
        print('El fichero no existe.')
        return
    # Leemos el fichero por líneas en una lista
    lines = f.readlines()
    # Cerramos el fichero
    f.close()
    # Leemos las claves del primer elemento de la lista y eliminamos el cambio de línea que aparece al final
    claves = lines[0]
    # Eliminamos el cambio de línea que aparece al final y dividimos la cadena por el punto y coma
    claves = claves[:-1].split(';')
    # Creamos el diccionario
    cotizaciones = {}
    # Inicializamos el diccionario con listas vacías
    for i in claves:
        cotizaciones[i] = []
    # Recorremos la lista línea a línea
    for linea in lines[1:]:
        # Eliminamos el cambio de línea que aparece al final y dividimos la cadena por el punto y coma
        linea = linea[:-1].split(';')
        cotizaciones[claves[0]].append(linea[0])
        # Añadimos cada dato a la lista correspondiente del diccionario
        for i in range(1, len(cotizaciones)):
            cotizaciones[claves[i]].append(limpiar(linea[i]))
    return cotizaciones


def resumen_cotizacion(cotizaciones, ruta):
    """
    Función que recibe un diccionario con los valores de cotización y crear un fichero con un resumen con el mínimo, el máximo y la media.
    Parámetros:
        - cotizaciones: Es un diccionario con pares cuyas claves son los nombres de la variables medidas y cuyos valores son las listas de valores de cada variable.
        - ruta: Es una cadena con la ruta del fichero.
    """
    # Eliminamos el primer par del diccionario que contiene los nombres de las empresas
    del(cotizaciones['Nombre'])
    # Abrimos el fichero en modo escritura
    f = open(ruta, 'w')
    # Escribimos en la primera línea los nombres de las columnas
    f.write('Nombre')
    for clave in cotizaciones.keys():
        f.write(';' + clave)
    # Calculamos los mínimos de cada lista y los escribimos en las columnas correspondientes
    f.write('\nMínimo')
    for valores in cotizaciones.values():
        f.write(';' + str(min(valores)))
    # Calculamos los máximos de cada lista y los escribimos en las columnas correspondientes
    f.write('\nMáximo')
    for valores in cotizaciones.values():
        f.write(';' + str(max(valores)))
    # Calculamos las medias de cada lista y las escribimos en las columnas correspondientes
    f.write('\nMedia')
    for valores in cotizaciones.values():
        f.write(';' + str(sum(valores)/len(valores)))
    f.close()
    return


# Llamada a las funciones de prueba
cotizaciones = preprocesado('cotizacion.csv')
resumen_cotizacion(cotizaciones, 'resumen-cotizacion.csv')

In [ ]: