我有大约100数千行(或大约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是相关的?
- 我的问题/任务叫什么?
- 除了详尽的成对比较之外,是否有现有的解决方案?
- 我是否会遇到传递性问题,因为我有两个(或更多(规则,其中一个不需要身份?
这被称为带有"if语句"的"for循环"。
按 ID 对数据进行排序,遍历所有 ID。 如果有多个,请使用if
语句检查您的条件。