-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsample_anonymize.bash
More file actions
131 lines (109 loc) · 4 KB
/
Copy pathsample_anonymize.bash
File metadata and controls
131 lines (109 loc) · 4 KB
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/bin/bash
# スクリプトファイルのディレクトリを取得
dir=$(dirname $0)
# エラーが発生したら停止
set -e
# ヘルプメッセージの関数
show_help() {
echo "Usage: $0 --id <ID> [--anonymize_script <path_to_anonymize_script>] [--parallel <number_of_parallel_jobs>]"
echo "ID は2桁の数字です."
echo "サンプル匿名化では、data/input/B<ID>.csvを加工します。B<ID>.csvファイルをdata/input/に配置してください"
}
# デフォルト値の設定
parallel=1
anonymize_script="${dir}/scripts/anonymize/anonymize.py"
# パラメータがない場合、またはヘルプが要求された場合
if [ "$#" -eq 0 ] || [ "$1" == "--help" ] || [ "$1" == "-h" ]; then
show_help
exit 0
fi
# IDの処理
if [ "$1" == "--id" ] && [[ "$2" =~ ^[0-9]{2}$ ]]; then
id=$2
shift 2
else
echo "エラー: 無効または不足しているID引数."
show_help
exit 1
fi
# オプション引数の処理
while [[ $# -gt 0 ]]
do
key="$1"
case $key in
--parallel)
parallel="$2"
shift # オプションの値をスキップ
shift # オプション自体をスキップ
;;
--anonymize_script)
anonymize_script="$2"
shift # オプションの値をスキップ
shift # オプション自体をスキップ
;;
*)
echo "エラー: 無効な引数 $1"
show_help
exit 1
;;
esac
done
# anonymize_scriptの存在確認
if [ ! -f "$anonymize_script" ]; then
echo "エラー: 指定された匿名化スクリプトファイル '$anonymize_script' が存在しません."
exit 1
fi
# Step 0: ハッシュ値の確認
echo "0. ハッシュ値の確認"
python3 ${dir}/scripts/operation/checkhashvalue.py ${dir}/data/input/B${id}.csv
# Step 1: ファイルを_0から_9まで作成
echo "1. _0から_9のファイルを作成"
python3 ${dir}/scripts/operation/split.py ${dir}/data/input/B${id}
# Step 2: 匿名加工を実行
echo "2. 匿名加工を実行"
for i in {0..9}
do
echo "_${i}のファイルを加工中..."
python3 $anonymize_script ${dir}/data/input/B${id}_$i.csv --output ${dir}/data/output/
echo "_${i}のファイルを加工完了"
done
# Step 3: 匿名化データの形式を確認
echo "3. 匿名化データの形式を確認"
for i in {0..9}
do
echo "_${i}のデータ形式を確認中..."
python3 ${dir}/scripts/operation/checkCi.py ${dir}/data/input/B${id}_$i.csv ${dir}/data/output/C${id}_$i.csv
echo "_${i}のデータ形式を確認完了"
done
# Step 4: 有用性スコアを計算
echo "4. 有用性スコアを計算"
python3 ${dir}/scripts/evaluate/utilityScore.py --id ${id} --input ${dir}/data/input --output ${dir}/data/output
# Step 5: 安全性スコアを計算
echo "5. 安全性スコアを計算"
# 5.1 PIDを利用して、作業用一時ディレクトリを、${dir}/data/に作成する
temp_dir="${dir}/data/temp_${id}_$$"
mkdir -p $temp_dir
# 5.2 作業用ディレクトリに、${dir}/data/input/B${id}.csvと、${dir}/data/output/C${id}_*.csvを配置
cp ${dir}/data/input/B${id}.csv $temp_dir
cp ${dir}/data/output/C${id}_*.csv $temp_dir
# 5.3 作業用一時ディレクトリに移動して、python3 ${dir}/scripts/operation/maketest.py B${id}を実行
(
cd $temp_dir
echo "作業用一時ディレクトリでmaketest.pyを実行中..."
python3 ../../scripts/operation/maketest.py B${id}
)
# 5.4 python3 ${dir}/scripts/attack/sampleAttack.py --id ${id} を実行
(
cd $temp_dir
echo "作業用一時ディレクトリでsampleAttack.pyを実行中..."
python3 ../../scripts/attack/sampleAttack.py --id ${id}
)
# 5.5 そのまま、python3 ${dir}/scripts/operation/answerCheck.py B${id}x E を実行
(
cd $temp_dir
echo "安全性評価:個人特定攻撃とDB再構築攻撃の成功数(??/100)を集計中..."
python3 ../../scripts/operation/answerCheck.py B${id}x E
)
# 作業用一時ディレクトリの削除(必要に応じてコメントアウト)
rm -rf $temp_dir
echo "サンプル加工の実行を完了"