def lin_norm(data):
    """
    Normalize data with linear algorithm.
    The formula applied to obtain the results is:

        zi = xi - min(x) / max(x) - min(x)

    where x=(x1,...,xn) and zi is now your with normalized data.
    Ensure that the resulting values are comprise between 0 and 1.
    return None if data is None, return empty :class:`pd.DataFrame` object if data is empty.

    :param data: the data to normalize, this 2D matrix must contains only coverage scores (no more metadata).
    :type data: a 2D :class:`pandas.DataFrame` object.
    :return: a normalize matrix, where  0 <= zi <=1 where z=(z1, ..., zn)
    :rtype: a 2D :class:`pandas.DataFrame` object or None if data is None.
    """
    if data is None or data.empty:
        return data
    vmin = data.min().min()
    vmax = data.max().max()
    data -= vmin
    data /= vmax - vmin
    return data
