基于规则的近似相同个体的分组(非聚类?)

时间:2017-07-07 14:00:35

标签: r scala sparql cluster-analysis rule-engine

我的数据集大约有数十万行(或大约100万个RDF三元组。)从表格的角度来看,每一行代表一个人参与某个过程。数据是嘈杂的,看起来是独立的个体实际上可能是同一个人。 根据规则,我需要权威地为每个在数据中建模的独特人员分配新的标识符,但我甚至不知道这种做法是否有名称。

我熟悉各种类型的聚类方法,但这对我来说似乎不同。我不知道真正的数字独特个体,我不想找到最小的个体他们之间的距离。我想找到符合我的合作者提供的一些规则的人。

例如,如果我有这些数据:

+-------------+-----+------------+--------+
| Transaction | ID  |    DOB     | Gender |
+-------------+-----+------------+--------+
|           1 | 111 | 5/5/1969   | M      |
|           2 | 112 | 6/6/1966   | F      |
|           3 | 113 | 7/7/1970   | F      |
|           4 | 113 | 9/9/1970   | F      |
|           5 | 114 | 2/3/2000   | M      |
|           6 | 114 | 2/4/2000   | F      |
|           7 | 115 | 9/10/2001  | M      |
|           8 | 115 | 11/11/2001 | F      |
+-------------+-----+------------+--------+

这些详尽的规则

  • 具有相同标识符和相同性别的人员是相同的 人
  • 具有相同标识符且有出生日期的人 在另一天之内是同一个人

然后解决方案是

+-------------+-----+------------+--------+-----------------+-----------------------------------------------------+
| Transaction | ID  |    DOB     | Gender | UniqueIdByRules |                        Notes                        |
+-------------+-----+------------+--------+-----------------+-----------------------------------------------------+
|           1 | 111 | 5/5/1969   | M      | A               |                                                     |
|           2 | 112 | 6/6/1966   | F      | B               |                                                     |
|           3 | 113 | 7/7/1970   | F      | C               |                                                     |
|           4 | 113 | 9/9/1970   | F      | C               | IDs identical, genders identical                    |
|           5 | 114 | 2/3/2000   | M      | D               |                                                     |
|           6 | 114 | 2/4/2000   | F      | D               | IDs identical, birthdates within one day of another |
|           7 | 115 | 9/10/2001  | M      | E               |                                                     |
|           8 | 115 | 11/11/2001 | F      | F               |                                                     |
+-------------+-----+------------+--------+-----------------+-----------------------------------------------------+

我的“最佳语言”是R,但我项目的核心语言是Scala。所以我对可以在R,Scala或Java中合理实现的解决方案特别感兴趣。原始数据以表格形式出现,但很早就转换为 RDF三元组我的过程,也许SWRL是相关的?我的一位合作者为这类问题随便提出了 PyCLIPS ,所以也许Jess或Drools是相关的?

  • 我的问题/任务是什么?
  • 除了详尽的成对比较之外,是否有现成的解决方案?
  • 我是否会遇到传递性问题,因为我有两个(或更多)规则,其中一个不需要身份?

1 个答案:

答案 0 :(得分:0)

这称为“for循环”,带有“if statements”。

按ID对数据进行排序,迭代所有ID。如果有多个,请使用if语句检查您的条件。