data-anonymizer について
data-anonymizer は、テキストや構造化データ内の個人識別情報を検出して匿名化します。複数の置換方法、CSV処理、任意の復元可能なトークンマッピングに対応しています。
主な機能
- 01一般的な個人識別情報の検出
- 02マスク、削除、ハッシュ化、偽データ置換
- 03指定列または検出したCSV列の匿名化
- 04任意の復元可能なトークンマッピング
- 05カスタムパターンと監査レポート
活用シーン
- 01サポートログから個人識別情報を除去
- 02分析用のデータベース出力を匿名化
- 03本番環境のCSVからテストデータを作成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ dkyazzentwatwa/ chatgpt-skills --skill data-anonymizerインストール後、Claude Code で/data-anonymizerを入力して読み込まれたか確認します。
同梱ファイルscripts/data_anonymizer.pyscripts/requirements.txt
詳細
データ匿名化ツール
テキストドキュメントや構造化データ内の個人を特定できる情報(PII)を検出してマスキングします。複数のマスキング方法に対応し、大規模な CSV ファイルも処理できます。
クイックスタート
from scripts.data_anonymizer import DataAnonymizer
# Anonymize text
anonymizer = DataAnonymizer()
result = anonymizer.anonymize("Contact John Smith at [email protected] or 555-123-4567")
print(result)
# "Contact [NAME] at [EMAIL] or [PHONE]"
# Anonymize CSV
anonymizer.anonymize_csv("customers.csv", "customers_anon.csv")
機能
- PII 検出:氏名、メールアドレス、電話番号、SSN、住所、クレジットカード番号、日付
- 複数の方法:マスキング、削除、ハッシュ化、偽データへの置換
- CSV 処理:特定の列を匿名化するか、自動検出できます
- 可逆トークン:匿名化解除のためのマッピングを任意で利用できます
- カスタムパターン:独自の PII パターンを追加できます
- 監査レポート:検出されたすべての PII とその位置を一覧表示します
API リファレンス
初期化
anonymizer = DataAnonymizer(
strategy="mask", # mask, redact, hash, fake
reversible=False # Enable token mapping
)
テキストの匿名化
# Basic anonymization
result = anonymizer.anonymize(text)
# With specific PII types
result = anonymizer.anonymize(text, pii_types=["email", "phone"])
# Get detected PII report
result, report = anonymizer.anonymize(text, return_report=True)
マスキング方法
text = "Email [email protected], call 555-1234"
# Mask (default) - replace with type labels
anonymizer.strategy = "mask"
# "Email [EMAIL], call [PHONE]"
# Redact - replace with asterisks
anonymizer.strategy = "redact"
# "Email ***************, call ********"
# Hash - replace with hash
anonymizer.strategy = "hash"
# "Email a1b2c3d4, call e5f6g7h8"
# Fake - replace with realistic fake data
anonymizer.strategy = "fake"
# "Email [email protected], call 555-9876"
CSV 処理
# Auto-detect PII columns
anonymizer.anonymize_csv("input.csv", "output.csv")
# Specify columns
anonymizer.anonymize_csv(
"input.csv",
"output.csv",
columns=["name", "email", "phone"]
)
# Different strategies per column
anonymizer.anonymize_csv(
"input.csv",
"output.csv",
column_strategies={
"name": "fake",
"email": "hash",
"ssn": "redact"
}
)
可逆匿名化
anonymizer = DataAnonymizer(reversible=True)
# Anonymize with token mapping
result = anonymizer.anonymize("John Smith: [email protected]")
mapping = anonymizer.get_mapping()
# Save mapping securely
anonymizer.save_mapping("mapping.json", encrypt=True, password="secret")
# Later, de-anonymize
anonymizer.load_mapping("mapping.json", password="secret")
original = anonymizer.deanonymize(result)
カスタムパターン
# Add custom PII pattern
anonymizer.add_pattern(
name="employee_id",
pattern=r"EMP-\d{6}",
label="[EMPLOYEE_ID]"
)
CLI の使用方法
# Anonymize text file
python data_anonymizer.py --input document.txt --output document_anon.txt
# Anonymize CSV
python data_anonymizer.py --input customers.csv --output customers_anon.csv
# Specific strategy
python data_anonymizer.py --input data.csv --output anon.csv --strategy fake
# Generate audit report
python data_anonymizer.py --input document.txt --report audit.json
# Specific PII types only
python data_anonymizer.py --input doc.txt --types email phone ssn
CLI 引数
| 引数 | 説明 | デフォルト |
|---|---|---|
--input | 入力ファイル | 必須 |
--output | 出力ファイル | 必須 |
--strategy | マスキング方法 | mask |
--types | 検出する PII の種類 | all |
--columns | 処理する CSV の列 | auto |
--report | 監査レポートを生成 | - |
--reversible | トークンのマッピングを有効化 | False |
対応する PII の種類
| 種類 | 例 | パターン |
|---|---|---|
name | John Smith、Mary Johnson | NLP ベース |
email | [email protected] | 正規表現 |
phone | 555-123-4567、(555) 123-4567 | 正規表現 |
ssn | 123-45-6789 | 正規表現 |
credit_card | 4111-1111-1111-1111 | 正規表現 + Luhn |
address | 123 Main St, City, ST 12345 | NLP + 正規表現 |
date_of_birth | 01/15/1990、January 15, 1990 | 正規表現 |
ip_address | 192.168.1.1 | 正規表現 |
例
カスタマーサポートのログを匿名化する
anonymizer = DataAnonymizer(strategy="mask")
log = """
Ticket #1234: Customer John Doe ([email protected]) called about
billing issue. SSN on file: 123-45-6789. Callback number: 555-867-5309.
Address: 123 Oak Street, Springfield, IL 62701.
"""
result = anonymizer.anonymize(log)
print(result)
# Ticket #1234: Customer [NAME] ([EMAIL]) called about
# billing issue. SSN on file: [SSN]. Callback number: [PHONE].
# Address: [ADDRESS].
データベースのエクスポートを GDPR に準拠させる
anonymizer = DataAnonymizer(strategy="hash")
# Consistent hashing for joins
anonymizer.anonymize_csv(
"users.csv",
"users_anon.csv",
columns=["email", "name", "phone"]
)
anonymizer.anonymize_csv(
"orders.csv",
"orders_anon.csv",
columns=["customer_email"] # Same hash as users.email
)
本番環境のデータからテストデータを生成する
anonymizer = DataAnonymizer(strategy="fake")
# Replace real PII with realistic fake data
anonymizer.anonymize_csv(
"production_data.csv",
"test_data.csv"
)
# Test data has same structure but fake PII
依存関係
pandas>=2.0.0
faker>=18.0.0
制限事項
- 氏名の検出では、珍しい名前を見逃す場合があります
- 住所の検出は、米国形式で最もよく機能します
- ドメイン固有の PII には、カスタムパターンが必要になる場合があります
- 偽データへの置換では、元の形式が正確に維持されません
コメント
Markdown 対応