在当今这个数据爆炸的时代,每天产生的数据量高达2.5千万亿字节。这些数据中,大部分是个人和敏感信息,如姓名、身份证号码、种族等,这些都是个人不愿意公开的信息。然而,数据中也包含了宝贵的商业洞察。那么,如何在保护隐私和收集分享有价值信息之间找到平衡呢?这就是数据匿名化发挥作用的地方。
随着数据匿名化需求的增加和Python包的扩展性,认为创建一个可以提供多种数据匿名化技术且易于使用的库是一个很好的想法。请允许介绍第一个包——anonympy,它是希望为开源社区做出贡献,并帮助其他用户处理敏感数据。目前,该包提供了用于匿名化表格(pd.DataFrame)和图像数据的函数。
作为使用示例,让匿名化以下数据集——sample.csv。
可以通过以下两个步骤安装包:
pip install anonympy
pip install cape-privacy==0.3.0 --no-deps
接下来,加载将尝试匿名化的样本数据集:
import pandas as pd
url = r'https://raw.githubusercontent.com/ArtLabss/open-data-anonimizer/0287f675a535101f145cb975baf361a96ff71ed3/examples/files/new.csv'
df = pd.read_csv(url, parse_dates=['birthdate'])
df.head()
通过查看列,可以看到所有的列都是个人和敏感的。因此,必须对每一列应用相关的技术。需要初始化dfAnonymizer对象。
from anonympy.pandas import dfAnonymizer
anonym = dfAnonymizer(df)
在应用任何函数之前,了解列的数据类型是很重要的。让检查数据类型,看看可以使用哪些方法。
# check dtypes
print(anonym.numeric_columns)
print(anonym.categorical_columns)
print(anonym.datetime_columns)
# available methods for each data type
from anonympy.pandas.utils import available_methods
print(available_methods())
在数据集中,有6个分类列,2个数值和1个日期时间类型。从available_methods返回的列表中,可以为每种数据类型找到函数。
让给年龄列添加一些随机噪声,对薪水列的值进行四舍五入,并部分掩码电子邮件列。
anonym.numeric_noise('age')
anonym.numeric_rounding('salary')
anonym.categorical_email_masking('email')
或者用一行代码:
anonym.anonymize({'age':'numeric_noise',
'salary':'numeric_rounding',
'email':'categorical_email_masking'})
要查看更改,请调用to_df(),或者要简短的摘要,请调用info()方法。
anonym.info()
现在想用假名替换first_name列中的名字。为此,首先需要检查Faker是否有相应的方法。
from anonympy.pandas.utils import fake_methods
print(fake_methods('f'))
很好,Faker有一个叫做first_name的方法,让替换这个列。
anonym.categorical_fake('first_name')
传递字典也是有效的 -> {column_name: method_name}
anonym.categorical_fake({'first_name': 'first_name_female'})
检查其他列名的fake_methods,发现Faker也有address和city的方法。web列可以用url方法替换,phone可以用phone_number替换。
anonym.categorical_fake_auto()
anonym.categorical_fake({
'web':'url',
'phone':'phone_number'})
最后剩下的列是birthdate。由于有包含相同信息的年龄列,可以使用column_supression方法删除这个列。然而,为了清晰起见,让给它添加一些噪声。
anonym.datetime_noise('birthdate')
就是这样。现在让比较一下匿名化前后的数据集。
之前:
之后:
数据隐私和保护是数据处理的重要部分,应该得到适当的关注。每个人都希望他的个人和敏感数据得到保护和安全。因此,在本文中,向展示了如何使用anonympy进行简单的匿名化和伪匿名化处理。这个库不应该被用作万能钥匙,仍然需要彻底了解数据和正在应用的技术,并始终牢记最终目标。
以下是该包的GitHub仓库:
anonympy