Время прочтения: 4 мин.
С каждым годом данных в мире становится всё больше, а вместе с тем, растёт и количество злоумышленников, которые хотели бы их использовать.
Каким же образом можно свободно передавать, в некоторых случаях даже хранить данные, не переживая о потенциальных утечках? Именно здесь в игру вступает анонимизация данных путём маскирования.
Проще говоря, анонимизация данных – это процесс перестановки данных таким образом, после которого будет невозможно понять, кому принадлежат данные. В зависимости от цели может так же возникнуть потребность в том, чтобы сохранить смысл и такие свойства как однородность, целостность, взаимозависимость и вариативность исходных данных. Чтобы решить возможную проблему, необходимо понять, как и какие данные необходимо маскировать, а какие нужно сохранить.
Anonympy – простая, но богатая своим функционалом библиотека, обладающая набором инструментов и функций для анонимизации и маскировки данных. На текущий момент проходит бета-тестирование функционала по анонимизации изображений и цензурированию текста в PDF-документах, но об этом в другой раз.
Anonympy использует эффективность Pandas и инкапсулирует другие существующие библиотеки, например, Faker. Идея создания библиотеки проста: сделать анонимизацию и маскировку данных интуитивно понятными.
В качестве примера буду использовать подготовленный набор данных. Импортирую библиотеки и создаю DataFrame.
import pandas as pd
import numpy as np
df = pd.read_excel('/Users/tg/Downloads/data.xlsx')
df.head()
На первый взгляд становится понятно, что все столбцы содержат некоторую конфиденциальную информацию. Это означает, что придётся замаскировать все столбцы и тем самым продемонстрировать часть функций библиотеки.
Предлагаю начать со стандартной установки:
pip install anonympy
pip install cape-privacy — no-deps
Важно знать тип столбца, прежде чем применять какие-либо преобразования. Советую проверить типы данных и посмотреть, какие методы доступны.
Сначала подключаю две дополнительные библиотеки для проверки типов столбцов, далее вывожу результат:
from anonympy.pandas import dfAnonymizer
from anonympy.pandas.utils_pandas import available_methods
anonym = dfAnonymizer(df) # вызов универсальной функции
print('Numeric columns', anonym.numeric_columns)
print('Categorical columns', anonym.categorical_columns)
print('Date columns', anonym.datetime_columns)
Справка по методам:
available_methods()
Получив список доступных методов маскировки, можно начинать применять преобразования. К примеру, я могу добавить шум в столбец возраста, округлить значения ЗП и частично замаскировать адрес электронной почты.
anonym.numeric_noise('age')
anonym.numeric_rounding('salary')
anonym.categorical_email_masking('email')
Для проверки состояния маскировки можно воспользоваться простым обращением или же вызовом функции:
anonym или anonym.info()
Чтобы увидеть изменения можно сделать так:
df_new = anonym.to_df()
df_new.head()
Как можно заметить, столбцы, содержащие возраст, зарплату и адрес электронной почты, успешно претерпели изменения.
Также для преобразования данных можно воспользоваться словарём:
anonym.anonymize({'first_name': 'categorical_fake', # {'column_name': 'method_name'}
'last_name': 'categorical_fake_auto',
'age': 'numeric_noise',
'salary': 'numeric_rounding',
'email':'categorical_email_masking',
'postal': 'categorical_resampling'})
В случае повторной маскировки столбца, система выдаст соответствующий комментарий:
Чтобы замаскировать оставшиеся столбцы можно воспользоваться встроенными в Faker методами:
anonym.categorical_fake_auto()
anonym.categorical_fake({'web': 'url', 'phone': 'phone_number'})
Вот и всё. Предлагаю наглядно посмотреть на новый полностью анонимный набор данных! Для сравнения покажу два датафрейма сразу:
К сожалению, библиотека на данный момент не адаптирована под русскоговорящую аудиторию. В основном библиотека «заточена» под западных пользователей, это можно заметить по замене данных в столбцах с номерами телефонов, адресами, именами и городами.
В завершение публикации хочу напомнить, что конфиденциальность и защита любых данных являются важным этапом их обработки, и им следует уделять должное внимание.