s3バケットにjsonファイルを読み込み、それをpandasデータフレームに解析/フラット化しました。今私は個人的に識別可能な情報を含む4列の175列のデータフレームを持っています。pandasデータフレームのpythonで特定の列を匿名化する
私はこれらの列(名前&アドレス)を匿名化する簡単な解決策を探しています。同じ人物の名前や住所に複数回出現した場合、同じハッシュを持つように、複数の情報を保持する必要があります。
パンダやこれに利用できる他のパッケージには既存の機能がありますか?
s3バケットにjsonファイルを読み込み、それをpandasデータフレームに解析/フラット化しました。今私は個人的に識別可能な情報を含む4列の175列のデータフレームを持っています。pandasデータフレームのpythonで特定の列を匿名化する
私はこれらの列(名前&アドレス)を匿名化する簡単な解決策を探しています。同じ人物の名前や住所に複数回出現した場合、同じハッシュを持つように、複数の情報を保持する必要があります。
パンダやこれに利用できる他のパッケージには既存の機能がありますか?
Categorical
を使用すると効率的な方法です。主な注意点は、番号付けはデータの順序付けだけに基づいているため、この番号付けスキームを複数回にわたって使用する必要がある場合は注意が必要です列/データセット。
df = pd.DataFrame({'ssn': [1, 2, 3, 999, 10, 1]})
df['ssn_anon'] = df['ssn'].astype('category').cat.codes
df
Out[38]:
ssn ssn_anon
0 1 0
1 2 1
2 3 2
3 999 4
4 10 3
5 1 0
データフレーム内の文字列を暗号化する方法を探しているようです。 cryptography
などのPython暗号化ライブラリがたくさんあります。それを使用する方法はかなりシンプルで、各要素に適用するだけです。
import pandas as pd
from cryptography.fernet import Fernet
df =pd.DataFrame([{'a':'a','b':'b'}, {'a':'a','b':'c'}])
f = Fernet('password')
res = df.applymap(lambda x: f.encrypt(byte(x, 'utf-8'))
# Decrypt
res.applymap(lambda x: f.decrypt(x))
おそらくセキュリティの面では最も良い方法ですが、長いバイト/文字列が生成され、見るのは難しいでしょう。
# 'a' -> b'gAAAAABaRQZYMjB7wh-_kD-VmFKn2zXajMRUWSAeridW3GJrwyebcDSpqyFGJsCEcRcf68ylQMC83G7dyqoHKUHtjskEtne8Fw=='
ので、あなたの問題を解決するもう一つの簡単な方法は、値にキーをマッピングし、新しいキーが存在する場合、新しい値を作成する関数を作成することです。あなたはMLを行っている場合
mapper = {}
def encode(string):
if x not in mapper:
# This part can be changed with anything really
# Such as mapper[x]=randint(-10**10,10**10)
# Just ensure it would not repeat
mapper[x] = len(mapper)+1
return mapper[x]
res = df.applymap(encode)
あなたはpandas
df.groupby('ssn').ngroup()
Out[25]:
0 0
1 1
2 2
3 4
4 3
5 0
dtype: int64
pd.factorize(df.ssn)[0]
Out[26]: array([0, 1, 2, 3, 4, 0], dtype=int64)
sklearnてからngroup
またはfactorize
を使用することができ、私はこの方法をお勧めします
from sklearn import preprocessing
le = preprocessing.LabelEncoder()
le.fit(df.ssn).transform(df.ssn)
Out[31]: array([0, 1, 2, 4, 3, 0], dtype=int64)
鍵をどこかに置いてプロセスを逆にしたいと思うように聞こえます。あなたのユースケースが許せば、私はすべての値を有効で人間が読解可能で不可逆なプレースホルダーに置き換えることを提案します。
ジョン>マーク
21ハマースミスグローブRD> 48ビールストリート
これはあなたが交換が自分で値を生成するためにFakerを使用することができますなど、リモート開発者のために使用可能なテストデータを生成するために良いです。データにユーティリティを使用したい場合は、「2マイル以内にすべてのアドレスを別のアドレスに置き換えてください」というメッセージを表示するには、Anon AIというAPIを使用します。私たちはs3バケットからJSONを解析し、すべてのPIIを(フリーテキストフィールドを含めて)自動的に見つけ出し、あなたの仕様にしたがってプレースホルダに置き換えます。必要に応じて一貫性と可逆性を保つことができ、増加するデータセットの「ライブ」匿名バージョンを維持したい場合には、最も有用です。私たちは現時点でベータ版ですので、テストに興味があるかどうか教えてください。