Как написать пользовательский алгоритм деидентификации на Python?

Вопрос или проблема

Я попробовал простой алгоритм для анонимизации своих данных, используя технику деидентификации. Но код не работает для меня. Я хочу анонимизировать данные, слегка изменив значения. Образец данных доступен здесь

import pandas as pd 
import uuid as u 
import datetime as dt 

# генерируем последовательность псевдо-идентификаторов, используя библиотеку генератора случайных чисел python uuid.


 def uudi_generator(length): 
    uudi_list= list() 
    i=0 
    while i < length: 
        uudi_list.append(u.uuid4()) 
    i+=1 
    return uudi_list 

#import original originaL dataset 
dataset = pd.read_csv('bankcredit-data.csv') 

# псевдо идентификатор
sLength = len(dataset['housing']) 
dataset.insert(0, 'uuid', pd.Series(uudi_generator(sLength), index=dataset.index)) 

# Запись транзакции, прикрепленная к оригиналу
dataset.insert(0, 'transaction_date', pd.Series([dt.datetime.now]*sLength, index=dataset.index)) 

 #запись транзакции прикреплена к оригинальному файлу данных 
dataset.to_csv('bankcredit-data.csv') 

#удалить идентифицируемую запись из набора данных 
del dataset['firstnamme'] 
del dataset['lastname'] 

# экспортируем деидентифицированный набор данных в формате csv для передачи пользователю
dataset.to_csv('deidentified-data.csv')

Если вы не хотите создавать свою собственную библиотеку, попробуйте библиотеку Faker для анонимности информации PPI.

pip install Faker

Ответ или решение

Как написать пользовательский алгоритм деидентификации на Python

Деидентификация — это критически важный процесс в области обработки данных, направленный на защиту личной информации. Создание пользовательского алгоритма деидентификации на Python может быть выполнено несколькими способами, в зависимости от ваших потребностей и типа данных, которые вы обрабатываете. В данном ответе мы предложим подробный план создания собственного алгоритма деидентификации.

Шаг 1: Подготовка данных

Для начала, необходимо импортировать данные из CSV-файла. Ваша исходная выборка данных должна быть загружена с помощью библиотеки pandas. Также стоит провести предварительный анализ данных, чтобы определить, какие поля подлежат деидентификации.

import pandas as pd

# Импортируем набор данных
dataset = pd.read_csv('bankcredit-data.csv')

# Просматриваем первые строки данных для понимания структуры
print(dataset.head())

Шаг 2: Генерация псевдоидентификаторов

Для замены уникальных идентификаторов (таких как имена и фамилии) на случайные псевдоидентификаторы используем библиотеку uuid. Этот метод поможет избежать утечек личной информации.

import uuid

def generate_uuid(length):
    return [str(uuid.uuid4()) for _ in range(length)]

Шаг 3: Изменение значений уникальных идентификаторов

Вы можете применять случайные изменения к другим данным, чтобы однообразие и идентификация стали труднее. В качестве примера, мы можем модифицировать поля, содержащие даты или суммы транзакций.

import random
from datetime import timedelta, datetime

def random_date(start, end):
    return start + timedelta(days=random.randint(0, (end - start).days))

# Изменяем даты транзакций
start_date = datetime(2020, 1, 1)
end_date = datetime(2022, 1, 1)

dataset['transaction_date'] = [random_date(start_date, end_date) for _ in range(len(dataset))]

Шаг 4: Удаление идентифицирующей информации

После создания новых уникальных идентификаторов и модификации значений вам необходимо удалить исходные идентифицирующие поля из вашего набора данных.

# Удаляем традиционные идентифицирующие поля
if 'firstname' in dataset.columns:
    del dataset['firstname']
if 'lastname' in dataset.columns:
    del dataset['lastname']

Шаг 5: Экспорт деидентифицированных данных

Наконец, сохраните обновленный набор данных с помощью pandas в новый CSV-файл.

dataset.to_csv('deidentified-data.csv', index=False)

Пример полного кода

Полное решение для деидентификации данных будет выглядеть следующим образом:

import pandas as pd
import uuid
import random
from datetime import timedelta, datetime

# Функция генерации UUID
def generate_uuid(length):
    return [str(uuid.uuid4()) for _ in range(length)]

# Функция для генерации случайной даты
def random_date(start, end):
    return start + timedelta(days=random.randint(0, (end - start).days))

# Импортируем набор данных
dataset = pd.read_csv('bankcredit-data.csv')

# Генерация псевдоидентификаторов
sLength = len(dataset)
dataset.insert(0, 'uuid', generate_uuid(sLength))

# Изменяем даты транзакций
start_date = datetime(2020, 1, 1)
end_date = datetime(2022, 1, 1)
dataset['transaction_date'] = [random_date(start_date, end_date) for _ in range(sLength)]

# Удаляем идентифицирующие поля
if 'firstname' in dataset.columns:
    del dataset['firstname']
if 'lastname' in dataset.columns:
    del dataset['lastname']

# Экспортируем деидентифицированный набор данных
dataset.to_csv('deidentified-data.csv', index=False)

Заключение

Создание пользовательского алгоритма деидентификации на Python требует внимательного подхода к защите личной информации. Применяйте разные методы для модификации данных, чтобы обеспечить их безопасность и анонимность. Также рекомендуется провести тестирование алгоритма на различных данных для гарантии его эффективности. Убедитесь, что ваш код читабелен и документирован, чтобы другие разработчики могли понять ваш процесс.

Данный алгоритм может быть дополнен или изменён в зависимости от ваших конкретных требований и типов данных, которые вы подвергаете анонимизации.

Оцените материал
Добавить комментарий

Капча загружается...