首页 > 解决方案 > 散列以派生唯一 ID

问题描述

在数据集中,散列观察(一行)的两个属性的唯一 ID 是否是为观察创建唯一 ID 的正确方法,因为该观察的唯一性来自所述属性的共现?

数据样本如下所示:

   scenario_id  procedure_spvid
0         2986           114374
1         2986           114660
2         2986           128564
3         2986           125072

scenario_id:
  min, max: 25, 5100306
  count unique: 2629
procedure_spvid:
  min, max: 2, 9000057
  count unique: 1163

但是,ID 不是连续的,即没有 5,100,306 个场景。

我在 Python 中对数据集所做的是:

hex(hash((scenario_id,procedure_spvid)))

标签: pythonhashunique-id

解决方案


哈希的目的不是保证唯一性,而是在您需要的“证明”大于您必须存储它的空间时提供合理的唯一性概率。

存储唯一对的唯一真正(sid, pid)独特的方法是通过字符串、元组等将它们相互嫁接。但是如果sid每个pid都是 4 个字节,那么您至少需要 8 个字节才能做到这一点. 如果您只想使用 4 个字节,则可以使用 4 字节的哈希(sid, pid)- 但因为您将超过 4 个字节的可能选项装入仅 4 个字节,所以存在一定的重复可能性。在数学上,这被称为鸽巢原理

如果您使用的是数据库,则可能有一种方法可以指定包含两列的复合键,以便它们一起为行的其余部分提供主键。如果您使用正确语言的哈希表(例如 python dict),那么该数据结构将跟踪重复的哈希并适应它们,以便它们不会返回相同的值。

如果您使用哈希并自己管理它,那么您必须接受冲突的可能性。

但是,如果没有特别查看您的数据集,我们无法真正解决您可能会看到重复哈希的原因。


推荐阅读