<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def load_finger_tapping_cloudupdrs_data(filename, convert_times=1000.0):
 """ This method loads data in the cloudupdrs format for the finger tapping processor Usually the data will be saved in a csv file and it should look like this: .. code-block:: json timestamp_0, . , action_type_0, x_0, y_0, . , . , x_target_0, y_target_0 timestamp_1, . , action_type_1, x_1, y_1, . , . , x_target_1, y_target_1 timestamp_2, . , action_type_2, x_2, y_2, . , . , x_target_2, y_target_2 . . . timestamp_n, . , action_type_n, x_n, y_n, . , . , x_target_n, y_target_n where data_frame.x, data_frame.y: components of tapping position. data_frame.x_target, data_frame.y_target their target. :param filename: The path to load data from :type filename: string :param convert_times: Convert times. The default is from from milliseconds to seconds. :type convert_times: float """

    data_m = np.genfromtxt(filename, delimiter=',', invalid_raise=False, skip_footer=1)
    date_times = pd.to_datetime((data_m[:, 0] - data_m[0, 0]))
    time_difference = (data_m[:, 0] - data_m[0, 0]) / convert_times
    data = {'td': time_difference, 'action_type': data_m[:, 2],'x': data_m[:, 3], 'y': data_m[:, 4],
            'x_target': data_m[:, 7], 'y_target': data_m[:, 8]}
    data_frame = pd.DataFrame(data, index=date_times, columns=['td', 'action_type','x', 'y', 'x_target', 'y_target'])
    return data_frame