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

Confidentialité des données et anonymisation en Python

Rebeca Gonzalez

Data engineer

Quasi-identifiants

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

1 Photo d'Angela Merkel tirée 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 en santé, visite, etc.

Dessin d'un homme entouré d'infobulles contenant ce qui semble être des renseignements personnels

Confidentialité des données et anonymisation en Python

Quasi-identifiants et réidentification

Schéma montrant l'intersection de deux ensembles de données : données médicales et liste électorale, dont l'intersection est code postal, date de naissance et 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 des données médicales et personnelles. À gauche les données d'origine et à droite l'ensemble obtenu avec le 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 des numéros de carte 
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 un courriel partiellement masqué

Confidentialité des données et anonymisation en Python

Masquage partiel des données

# Masquer le nom d'utilisateur du courriel
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 incluant les numéros de carte ; à droite, de nouveaux numéros de carte de crédit générés synthétiquement.

  • Remplacer des renseignements sensibles par de nouvelles données, similaires à 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 de crédit 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 avec 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...