def load_cloudupdrs_data(filename, convert_times=1000000000.0):
    """
       This method loads data in the cloudupdrs format
       
       Usually the data will be saved in a csv file and it should look like this:
       
      .. code-block:: json
      
         timestamp_0, x_0, y_0, z_0
         timestamp_1, x_1, y_1, z_1
         timestamp_2, x_2, y_2, z_2
         .
         .
         .
         timestamp_n, x_n, y_n, z_n
       
      where x, y, z are the components of the acceleration

      :param filename: The path to load data from
      :type filename: string
      :param convert_times: Convert times. The default is from from nanoseconds to seconds.
      :type convert_times: float
    """
    # data_m = pd.read_table(filename, sep=',', header=None)
    try:
        data_m = np.genfromtxt(filename, delimiter=',', invalid_raise=False)
        date_times = pd.to_datetime((data_m[:, 0] - data_m[0, 0]))
        time_difference = (data_m[:, 0] - data_m[0, 0]) / convert_times
        magnitude_sum_acceleration = \
            np.sqrt(data_m[:, 1] ** 2 + data_m[:, 2] ** 2 + data_m[:, 3] ** 2)
        data = {'td': time_difference, 'x': data_m[:, 1], 'y': data_m[:, 2], 'z': data_m[:, 3],
                'mag_sum_acc': magnitude_sum_acceleration}
        data_frame = pd.DataFrame(data, index=date_times, columns=['td', 'x', 'y', 'z', 'mag_sum_acc'])
        return data_frame
    except IOError as e:
        ierr = "({}): {}".format(e.errno, e.strerror)
        logging.error("load data, file not found, I/O error %s", ierr)
    except ValueError as verr:
        logging.error("load data ValueError ->%s", verr.message)
    except:
        logging.error("Unexpected error on load data method: %s", sys.exc_info()[0])