anonym.legal
Назад к блогуGDPR и соблюдение

CSV и свободный текст: как защитить данные...

CSV файлы для исследований часто содержат интегрированную PII в свободном текстовом поле.

April 21, 20267 мин чтения
research dataCSV anonymizationGDPR Article 89survey datadata sharing

Проблема: Исследовательские данные содержат embedded PII

Типичный CSV для исследований

Participant_ID,Age,Gender,Notes
001,45,M,"Patient from Dr. Johnson's clinic, diagnosed with Type 2 Diabetes"
002,38,F,"Healthcare worker at St. Mary's Hospital, exposed to COVID-19"
003,52,M,"Referred by Dr. Sarah Chen for cardiac study"

Embedded PII в поле Notes:

  • Имена врачей (PERSON)
  • Названия больниц (LOCATION)
  • Диагнозы (SENSITIVE_MEDICAL_INFO)
  • Профессиональная информация

Проблема обмена

Когда исследователи обмениваются CSV с сотрудничающими учреждениями:

  1. Отправляют по email (неправильно)
  2. Загружают на Google Drive (неправильно)
  3. Никто не анализирует Notes поле на скрытую PII
  4. Данные доступны всему учреждению

GDPR нарушение: Распространение личных данных без согласия.

Правильный подход

Шаг 1: Анализ CSV на скрытую PII

import pandas as pd
from presidio_analyzer import AnalyzerEngine

analyzer = AnalyzerEngine()

def analyze_csv_for_pii(csv_path):
    df = pd.read_csv(csv_path)
    pii_findings = []
    
    for col in df.columns:
        for row_idx, value in enumerate(df[col]):
            if pd.isna(value):
                continue
            
            # Анализируем каждую ячейку
            entities = analyzer.analyze(
                text=str(value),
                language='en'
            )
            
            if entities:
                pii_findings.append({
                    'row': row_idx,
                    'column': col,
                    'value': value,
                    'pii_entities': [e.entity_type for e in entities]
                })
    
    return pii_findings

Шаг 2: Анонимизация

from presidio_anonymizer import AnonymizerEngine

def anonymize_csv(df, pii_columns):
    anonymizer = AnonymizerEngine()
    
    for col in pii_columns:
        for idx, value in enumerate(df[col]):
            if pd.notna(value):
                # Анонимизируем
                anonymized = anonymizer.anonymize(
                    text=str(value),
                    analyzer_results=[],
                    operators={'DEFAULT': {'type': 'replace'}}
                )
                df.at[idx, col] = anonymized.text
    
    return df

Шаг 3: Безопасный обмен

✅ Зашифрованный файл (AES-256) ✅ Защита паролем ✅ Временный доступ (expires in 7 days) ✅ Audit log (кто скачал, когда)

GDPR соответствие для исследований

Требуется

  • ✅ Approval от Ethics Board / IRB
  • ✅ Informed Consent от участников
  • ✅ Data Processing Agreement (DPA) с сотрудничающими учреждениями
  • ✅ Анонимизация перед обменом
  • ✅ Шифрование in transit
  • ✅ Ограничение доступа по необходимости

Вывод

Исследовательские данные требуют особого внимания. Анализируйте, анонимизируйте и шифруйте перед обменом.

Готовы защитить ваши данные?

Начните анонимизацию PII с 285+ типов сущностей на 48 языках.