def escalar(datos, margen_adicional=0, minimos=None, maximos=None):
    """
    Recibe datos cuyos valores se encuentran en el intervalo [minimos, maximos],
    y los escala  de forma que queden en el intervalor [0, 1].
    Adicionalmente, puede especificarse un margen de seguridad, que amplía el
    intervalo entre [minimos, maximos] en un porcentaje dado por margen_adicional.
    El porcentaje debe expresarse como un valor entre 0 y 100 incluidos.
    Si no se especifican los mínimos o los máximos, se los calcula a partir
    del conjunto de datos suministrado.
    Si no se especifica el margen adicional, se asume que es cero.
    """
    if minimos is None:
        minimos = datos.min(axis=0)
    if maximos is None:
        maximos = datos.max(axis=0)
    delta = (maximos - minimos)
    if margen_adicional:
        margen = delta * margen_adicional / 100.0
        minimos -= margen
        maximos += margen
        delta = (maximos - minimos)
    return (datos - minimos) / delta