Masquage et génération de données avec Faker

Confidentialité des données et anonymisation en Python

Rebeca Gonzalez

Data engineer

Quasi-identifiants

Des informations personnelles non sensibles peuvent aussi être des quasi-identifiants. Texte « Chef de gouvernement en Europe » et une date de naissance, avec des lignes pointant vers le visage d'Angela Merkel

1 Photo d'Angela Merkel issue de Wikimedia Commons
Confidentialité des données et anonymisation en Python

Quasi-identifiants

Combinés à d'autres quasi-identifiants, ils deviennent identifiants.

  • Âge
  • Genre
  • Profession
  • Dates personnelles : naissance, décès, admission de soins, visite, etc.

Dessin d'un homme entouré de fenêtres semblant afficher des informations personnelles

Confidentialité des données et anonymisation en Python

Quasi-identifiants et ré-identification

Schéma montrant l'intersection de deux jeux de données : données médicales et liste électorale, avec en intersection le code postal, la date de naissance et le genre

Confidentialité des données et anonymisation en Python

Autres techniques d'anonymisation

Techniques d'anonymisation des quasi-identifiants pour réduire les risques de divulgation. Deux tableaux avec données médicales et personnelles. À gauche les données originales, à droite le jeu de données résultant avec l'attribut nom supprimé

Confidentialité des données et anonymisation en Python

Masquage de données

DataFrame d'origine

     name                phone
0    Cassandra Nelson    4399406975395
1    Brian Moss          0389407128613
2    Melody Gill         8283308773967
3    Sandra Huber        4366608954250
4    Patricia Webster    4466462475574

DataFrame avec les noms masqués

     name    phone
0    xxxx    4399406975395
1    xxxx    0389407128613
2    xxxx    8283308773967
3    xxxx    4366608954250
4    xxxx    4466462475574

Remplacer des valeurs sensibles par d'autres caractères comme « x » s'appelle aussi le masquage de données.

Confidentialité des données et anonymisation en Python

Masquage de données

# Explorer le DataFrame
df.head()
     country         card_number           email
0    Finland         3546746666030419      [email protected]
1    Belarus         4303032415762821      [email protected]
2    Turkmenistan    4536883671157         [email protected]
3    Puerto Rico     3568819286614160      [email protected]
4    Angola          2514167462583016      [email protected]
Confidentialité des données et anonymisation en Python

Masquage de données

# Masquer uniformément la colonne card_number 
df['card_number'] = '****'


# Voir le DataFrame obtenu df.head()
     country         card_number     email
0    Finland         ****            [email protected]
1    Belarus         ****            [email protected]
2    Turkmenistan    ****            [email protected]
3    Puerto Rico     ****            [email protected]
4    Angola          ****            [email protected]
Confidentialité des données et anonymisation en Python

Masquage partiel des données

Capture d'écran de la page de réinitialisation du mot de passe de Facebook, montrant l'email partiellement masqué

Confidentialité des données et anonymisation en Python

Masquage partiel des données

# Masquer le nom d'utilisateur dans l'email
df2['email'] = df2['email'].apply(lambda s: s[0] + '****' + s[s.find('@'):] )


# Voir les données pseudonymisées obtenues df2.head()
     country         card_number           email
0    Finland         3546746666030419      f****@gmail.com
1    Belarus         4303032415762821      m****@gmail.com
2    Turkmenistan    4536883671157         a****@gmail.com
3    Puerto Rico     3568819286614160      k****@gmail.com
4    Angola          2514167462583016      d****@gmail.com
Confidentialité des données et anonymisation en Python

Générer des données synthétiques

À gauche, un tableau avec les données d'origine dont des numéros de carte ; à droite, de nouveaux numéros de carte générés synthétiquement.

  • Remplacer les informations sensibles par de nouvelles données proches de l'original.
Confidentialité des données et anonymisation en Python

Générer des données synthétiques

# Importer la classe Faker
from faker import Faker


# Créer un générateur de fausses données fake_data = Faker()
# Générer un numéro de carte bancaire fake_data.credit_card_number()
3542216874440804
Confidentialité des données et anonymisation en Python

Générer des données synthétiques

# Masquer le numéro de carte par de nouvelles données via une fonction lambda
df['card_number'] = df['card_number'].apply(lambda x: fake_data.credit_card_number())

# Voir les données pseudonymisées obtenues df.head()
     country         card_number            email
0    Finland         3596625386355448       [email protected]
1    Belarus         376297265347524        [email protected]
2    Turkmenistan    4377494880888682       [email protected]
3    Puerto Rico     30553931809810         [email protected]
4    Angola          4241735748382          [email protected]
Confidentialité des données et anonymisation en Python

Générer d'autres types de données

fake_data.name()
'Kelly Clark'
fake_data.name_male()
'Antonio Henderson'
fake_data.name_female()
'Jennifer Ortega'
Confidentialité des données et anonymisation en Python

Passons à la pratique !

Confidentialité des données et anonymisation en Python

Preparing Video For Download...