-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathdp2.py
More file actions
28 lines (24 loc) · 1021 Bytes
/
dp2.py
File metadata and controls
28 lines (24 loc) · 1021 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# wrote by Hiroaki Kikuchi, 2021
import pandas as pd
import numpy as np
import sys
def lap(x, eps):
return (x + np.random.default_rng().laplace(0, 1/eps, x.shape[0])).astype(int)
# intへのキャストは不要かも.sensitivity = 1とする.
def lapdf(dfin, cols, epss):
df = dfin.copy()
for i in range(len(cols)):
df.iloc[:,cols[i]] = lap(df.iloc[:,cols[i]], epss[i])
return df
if __name__ == "__main__":
if len(sys.argv) <= 4:
print(sys.argv[0], ' input.csv cols epsilons [d.csv]')
#sys.exit(0)
# 差分プライバシーに基づいて行colsにεのラプラスノイズを付加する.
df = pd.read_csv(sys.argv[1], header=None)
cols = [int(c) for c in sys.argv[2].split('_')]
epss = [float(e) for e in sys.argv[3].split('_')]
out = sys.argv[4] if len(sys.argv) == 5 else sys.stdout
for i in range(len(cols)):
df.iloc[:,cols[i]] = lap(df.iloc[:,cols[i]], epss[i])
df.to_csv(out, index = None, header = None)