使用 Faker 的数据遮蔽与数据生成

Python 中的数据隐私与匿名化

Rebeca Gonzalez

Data engineer

准标识符

非敏感的个人可识别信息也可能是准标识符。 文字"欧洲政府首脑"和一个生日,以及指向安格拉·默克尔面部的线条

1 安格拉·默克尔的照片来自维基共享资源
Python 中的数据隐私与匿名化

准标识符

与其他准标识符结合时,它们会具有可识别性。

  • 年龄
  • 性别
  • 职业
  • 个人日期:出生、死亡、就医入院、就诊等

一个男子的插画,周围弹窗显示看似个人信息

Python 中的数据隐私与匿名化

准标识符与再识别攻击

图示两个数据集(医疗数据与选民名单)的交集为邮编、生日和性别

Python 中的数据隐私与匿名化

更多匿名化技术

针对准标识符的匿名化技术,以降低数据泄露风险。 两张包含医疗和个人数据的表格。左为原始数据,右为抑制姓名属性后的结果数据集

Python 中的数据隐私与匿名化

数据遮蔽

原始 DataFrame

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

名称已遮蔽的 DataFrame

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

将敏感值替换为如"x"等字符称为数据遮蔽。

Python 中的数据隐私与匿名化

数据遮蔽

# 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]
Python 中的数据隐私与匿名化

数据遮蔽

# 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]
Python 中的数据隐私与匿名化

部分数据遮蔽

Facebook 重置密码页面的截图,显示部分遮蔽的邮箱

Python 中的数据隐私与匿名化

部分数据遮蔽

# 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
Python 中的数据隐私与匿名化

生成合成数据

左侧为包含卡号的原始数据表,右侧为合成生成的新信用卡号。

  • 用与原始相似的新生成数据替换敏感信息。
Python 中的数据隐私与匿名化

生成合成数据

# 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
Python 中的数据隐私与匿名化

生成合成数据

# 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]
Python 中的数据隐私与匿名化

生成其他类型数据

fake_data.name()
'Kelly Clark'
fake_data.name_male()
'Antonio Henderson'
fake_data.name_female()
'Jennifer Ortega'
Python 中的数据隐私与匿名化

该练习了!

Python 中的数据隐私与匿名化

Preparing Video For Download...