예제 #1
0
def all_local_aggregation(tab, k, variables, method, unknown=''):
    '''
        retourne une table k-anonymisée par aggrégation locale
        
        tab: la table à anonymiser
        k: un entier est le k-anonymat recherché
        variables est une liste de variable de tab :
            on traitera les données dans cet ordre et 
            la première variable sera celle dont on est le plus
            prêt à sacrifier l'aggrégation
        method : voir local_aggregation
    
    Remarque: si pour un groupe donné, plusieurs modalité ont moins de k
    éléments, on les remplace toutes par "dropped", on peut ainsi avoir un
    groupe avec dropped d'une taille supérieure à k. 
    Si ensuite on a une modalité plus grande que k à l'intérieur du groupe 
    hétéroclyte avec dropped, on peut afficher cette variable
    '''
    assert(isinstance(k, int))
    assert(all([var in tab.columns for var in variables]))
    assert(all(tab[variables].dtypes == 'object'))

    if get_k(tab, variables) >= k:
        return tab

    variable_a_aggreger = variables[-1]
    if len(variables) == 1:
        new_serie = local_aggregation(tab[variable_a_aggreger],
                                      k, method, unknown)
        tab[variable_a_aggreger] = new_serie        
        return tab

    if get_k(tab, variables[:-1]) < k:
        tab = all_local_aggregation(tab, k, variables[:-1], method, unknown)
    # on a une table k-anonymisée lorsqu'elle est restreinte aux 
    # len(variables) - 1 premières variables
        
    # on applique l'aggrégation locale d'une variable par groupe
    grp = tab.groupby(variables[:-1])
    new_serie = grp[variable_a_aggreger].apply(
        lambda x: local_aggregation(x, k, method, unknown)
        )
    tab[variable_a_aggreger] = new_serie
    
    assert get_k(tab, variables, unknown) >= k

    return tab
예제 #2
0
def all_local_aggregation(tab, k, variables, method, unknown=''):
    '''
        retourne une table k-anonymisée par aggrégation locale
        
        tab: la table à anonymiser
        k: un entier est le k-anonymat recherché
        variables est une liste de variable de tab :
            on traitera les données dans cet ordre et 
            la première variable sera celle dont on est le plus
            prêt à sacrifier l'aggrégation
        method : voir local_aggregation
    
    Remarque: si pour un groupe donné, plusieurs modalité ont moins de k
    éléments, on les remplace toutes par "dropped", on peut ainsi avoir un
    groupe avec dropped d'une taille supérieure à k. 
    Si ensuite on a une modalité plus grande que k à l'intérieur du groupe 
    hétéroclyte avec dropped, on peut afficher cette variable
    '''
    assert (isinstance(k, int))
    assert (all([var in tab.columns for var in variables]))
    assert (all(tab[variables].dtypes == 'object'))

    if get_k(tab, variables) >= k:
        return tab

    variable_a_aggreger = variables[-1]
    if len(variables) == 1:
        new_serie = local_aggregation(tab[variable_a_aggreger], k, method,
                                      unknown)
        tab[variable_a_aggreger] = new_serie
        return tab

    if get_k(tab, variables[:-1]) < k:
        tab = all_local_aggregation(tab, k, variables[:-1], method, unknown)
    # on a une table k-anonymisée lorsqu'elle est restreinte aux
    # len(variables) - 1 premières variables

    # on applique l'aggrégation locale d'une variable par groupe
    grp = tab.groupby(variables[:-1])
    new_serie = grp[variable_a_aggreger].apply(
        lambda x: local_aggregation(x, k, method, unknown))
    tab[variable_a_aggreger] = new_serie

    assert get_k(tab, variables, unknown) >= k

    return tab
예제 #3
0
def transfo_1(x):
    return transfo.local_aggregation(x, 5, 'regroup_with_smallest', unknown='')
예제 #4
0
def transfo_0(x):
    return transfo.local_aggregation(x, 5, 'with_closest', unknown='')
예제 #5
0
def transfo_1(x):
    return transfo.local_aggregation(x, 5, 'regroup_with_smallest', unknown='')
예제 #6
0
def transfo_0(x):
    return transfo.local_aggregation(x, 5, 'with_closest', unknown='')
예제 #7
0
def aggregation_year(x):
        return(local_aggregation(x, 5, 'with_closest', 'non renseigné'))
예제 #8
0
def aggregation_serie(x):
        return(local_aggregation(x, 5, 'regroup_with_smallest', 'non renseigné'))