def apply(mco, parameters=None):
    """
    Calculate the Handover of Work metric

    Parameters
    ------------
    mco
        Matrix container object
    parameters
        Parameters of the algorithm

    Returns
    ------------
    rsc_rsc_matrix
        Resource-Resource Matrix containing the Real Handover of Work metric value
    """
    if parameters is None:
        parameters = {}

    rsc_rsc_matrix = rscrsc_utils.get_empty_rscrsc_matrix(mco)

    for resource, next_resource in zip(mco.dataframe['resource'],
                                       mco.dataframe['next_resource']):
        rsc_rsc_matrix[mco.resources_list.index(resource)][
            mco.resources_list.index(next_resource)] += 1

    return rsc_rsc_matrix
Exemple #2
0
def apply(mco, parameters=None):
    """
    Calculate the Similar Activities metric

    Parameters
    ------------
    mco
        Matrix container object
    parameters
        Parameters of the algorithm

    Returns
    ------------
    rsc_rsc_matrix
        Resource-Resource Matrix containing the Similar Activities metric value
    """
    if parameters is None:
        parameters = {}

    if len(mco.activities_list) == 0:
        raise Exception("must provide full MCO dataframe")

    all_resources = np.concatenate(
        [mco.dataframe['resource'], mco.dataframe['next_resource']], axis=0)
    all_activities = np.concatenate(
        [mco.dataframe['activity'], mco.dataframe['next_activity']], axis=0)

    all_resource_activity = np.concatenate([
        all_resources.reshape(len(all_resources), 1),
        all_activities.reshape(len(all_activities), 1)
    ],
                                           axis=1)
    all_resource_activity_df = pd.DataFrame(columns=['resource', 'activity'],
                                            data=all_resource_activity)

    grouped_by_activity = all_resource_activity_df.groupby(['resource'])
    resource_activity_dict = defaultdict(list)

    for resource, group in grouped_by_activity:
        resource_activity_dict[resource].append(group['activity'].values)

    rsc_act_matrix = rscact_utils.get_empty_rscact_matrix(mco)

    for resource in resource_activity_dict:
        for activity_list in resource_activity_dict[resource]:
            for activity in activity_list:
                rsc_act_matrix[mco.resources_list.index(resource)][
                    mco.activities_list.index(activity)] += 1

    rsc_rsc_matrix = rscrsc_utils.get_empty_rscrsc_matrix(mco)
    for index, resource in enumerate(rsc_act_matrix):
        for rest in range(index + 1, rsc_act_matrix.shape[0]):
            main_resource = resource
            other_resource = rsc_act_matrix[rest]
            r, p = pearsonr(main_resource, other_resource)
            rsc_rsc_matrix[index][rest] = r

    return rsc_rsc_matrix
def apply(mco, parameters=None):
    """
    Calculate the Real Handover of Work metric

    Parameters
    ------------
    mco
        Matrix container object
    parameters
        Parameters of the algorithm

    Returns
    ------------
    rsc_rsc_matrix
        Resource-Resource Matrix containing the Real Handover of Work metric value
    """
    if parameters is None:
        parameters = {}

    dependency_threshold = parameters[
        "dependency_threshold"] if "dependency_threshold" in parameters else 0

    if len(mco.activities_list) == 0:
        raise Exception("must provide full MCO dataframe")

    rsc_rsc_matrix = rscrsc_utils.get_empty_rscrsc_matrix(mco)

    grouped_activity_paris = mco.dataframe.groupby(
        ['activity', 'next_activity']).size().reset_index(name='counts')

    for index, row in mco.dataframe.iterrows():
        ab = grouped_activity_paris.loc[
            (grouped_activity_paris['activity'] == row['activity']) &
            (grouped_activity_paris['next_activity'] == row['next_activity'])]
        if ab.empty:
            abn = 0
        else:
            abn = ab.iloc[0, 2]
        ba = grouped_activity_paris.loc[
            (grouped_activity_paris['next_activity'] == row['activity'])
            & (grouped_activity_paris['activity'] == row['next_activity'])]
        if ba.empty:
            ban = 0
        else:
            ban = ab.iloc[0, 2]
        if row['activity'] == row['next_activity']:
            dependency = abn / (abn + 1)
        else:
            dependency = (abn - ban) / (abn + ban + 1)

        if dependency > dependency_threshold:
            rsc_rsc_matrix[mco.resources_list.index(
                row['resource'])][mco.resources_list.index(
                    row['next_resource'])] += 1

    return rsc_rsc_matrix