Datamaskering och datagenerering med Faker

Dataintegritet och anonymisering i Python

Rebeca Gonzalez

Data engineer

Kvasiidentifierare

Icke-känslig personligt identifierbar information kan också vara kvasiidentifierare. Text med "Regeringschef i Europa" och ett födelsedatum, med linjer som pekar mot Angela Merkels ansikte

1 Foto av Angela Merkel från Wikimedia Commons
Dataintegritet och anonymisering i Python

Kvasiidentifierare

I kombination med andra kvasiidentifierare kan de avslöja identiteten.

  • Ålder
  • Kön
  • Yrke
  • Personliga datum: födelse, dödsfall, sjukhusinläggning, besök m.m.

Teckning av en man med popups runt honom som verkar visa personlig information

Dataintegritet och anonymisering i Python

Kvasiidentifierare och återidentifieringsattacker

Diagram som visar snittet mellan två datamängder: medicinska data och röstlängd, där snittet utgörs av postnummer, födelsedatum och kön

Dataintegritet och anonymisering i Python

Fler anonymiseringstekniker

Anonymiseringstekniker för kvasiidentifierare som minskar risken för informationsläckage. Två tabeller med medicinska och personliga data. Till vänster originaldata och till höger den resulterande datamängden med namnattributet undertryckt

Dataintegritet och anonymisering i Python

Datamaskering

Ursprunglig DataFrame

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

DataFrame med maskerade namn

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

Att ersätta känsliga värden med tecken som "x" kallas datamaskering.

Dataintegritet och anonymisering i Python

Datamaskering

# Explore the 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]
Dataintegritet och anonymisering i Python

Datamaskering

# Uniformly mask the card number colum 
df['card_number'] = '****'


# See resulting DataFrame 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]
Dataintegritet och anonymisering i Python

Partiell datamaskering

Skärmdump av Facebooks sida för lösenordsåterställning, där e-postadressen är delvis maskerad

Dataintegritet och anonymisering i Python

Partiell datamaskering

# Mask username from email
df2['email'] = df2['email'].apply(lambda s: s[0] + '****' + s[s.find('@'):] )


# See the resulting pseudonymized data 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
Dataintegritet och anonymisering i Python

Generera syntetiska data

Till vänster en tabell med originaldata inklusive kortnummer, till höger syntetiskt genererade nya kreditkortsnummer.

  • Känslig information ersätts med nyligen genererad data som liknar originalet.
Dataintegritet och anonymisering i Python

Generera syntetiska data

# Import Faker class
from faker import Faker


# Create fake data generator fake_data = Faker()
# Generate a credit card number fake_data.credit_card_number()
3542216874440804
Dataintegritet och anonymisering i Python

Generera syntetiska data

# Mask card number with new generated data using a lambda function
df['card_number'] = df['card_number'].apply(lambda x: fake_data.credit_card_number())

# See the resulting pseudonymized data 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]
Dataintegritet och anonymisering i Python

Generera andra typer av data

fake_data.name()
'Kelly Clark'
fake_data.name_male()
'Antonio Henderson'
fake_data.name_female()
'Jennifer Ortega'
Dataintegritet och anonymisering i Python

Nu kör vi en övning!

Dataintegritet och anonymisering i Python

Preparing Video For Download...