У меня есть csv с именами, суммой транзакции и точной долготой и широтой места, где была выполнена транзакция. Я хочу, чтобы конечный документ был анонимным — для этого мне нужно преобразовать его в CSV, где имена хэшируются (это должно быть достаточно просто), а долгота и широта скрыты в радиусе 2 км. То есть изменение координат так, чтобы они находились в пределах не более 2 км от исходного местоположения, но случайным образом, чтобы это не было обратимо по формуле. Кто-нибудь знает, как работать с координатами таким образом?
Анонимизация координат геолокации в python
comment
Хеширование имен не сделает их анонимными, вы все равно сможете сопоставить все транзакции одного человека. Координаты можно округлить (например, до ближайшей 0,1 угловой минуты), а не рандомизировать, но деанонимизация часто может привести к неожиданным результатам!
- person Constance   schedule 21.03.2018
Ответы (1)
Вы можете использовать хэширование с учетом местоположения (LSH) для отображения похожих координат (т.е. в пределах в радиусе 2 км), до того же значения с высокой вероятностью. Следовательно, координаты, соответствующие одному сегменту, будут расположены ближе друг к другу в евклидовом пространстве.
В противном случае другим методом может быть использование любой стандартной хеш-функции y = H(x) и вычисление y по модулю N, где N — диапазон координат. Предположим, ваши координаты равны P = (500 700), и вы хотите вернуть рандомизированное значение в диапазоне [-x,x] км от P.
P = (500,700)
Range = 1000 #1000 meters for example
#Anonymize co-ordinates to within specified range
ANON_X = hash(P[0]) % Range
ANON_Y = hash(P[1]) % Range
#Randomly add/subtract range
P = (P + ANON_X*random.choice([-1,1]), P+ANON_Y*random.choice([-1,1]))
person
gratio
schedule
21.03.2018
если вы возвращаете рандомизированное значение в диапазоне [-x,x] км от P, то все, что нужно сделать кому-то, — это взять их множество с одним и тем же P и усреднить их, после чего они найдут P.
- person Constance; 21.03.2018
также
random.choice([-1, 1])
выбирает только либо -1, либо 1, ничего между ними!
- person Constance; 21.03.2018
Усреднение по большому количеству P теоретически будет работать, но я предполагаю, что исходные координаты редко распределены в евклидовом пространстве, поэтому вы не сможете взять много точек для усреднения.
random.choice()
будет работать, потому что ANON_X
уже хранит случайное значение в предоставленном диапазоне, и нам нужно решить, добавить или вычесть значение в диапазоне.
- person gratio; 22.03.2018