-1
我的数据集大约有数千行(或大约数百个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,但我的项目的核心语言是斯卡拉。所以我特别感兴趣的是可以在R,Scala或Java中合理实现的解决方案。原始数据来作为表格,但转换为RDF三元组在我的过程中相当早,所以也许SWRL是相关的?我的一个合作者随便提出PyCLIPS这样的问题,所以也许Jess或Drools是相关的?
- 我的问题/任务叫什么?
- 除了详尽的配对比较之外,是否有现有解决方案?
- 我是否会遇到传递性问题,因为我有两条(或更多)规则,其中一条不需要标识?
你确切的问题是什么?你想从最初的最终数据框?或者你已经有解决方案,你只是想找出这个过程的名字? –
谢谢,@RameshMaharjan。我还没有实现任何东西。我用手输入了最终的和最初的。除了详尽的配对比较之外,我想不出有任何办法可以进行1天的出生日期比较,这看起来效率不高。而规则可能会在未来发生变化,所以我正在寻找一些可以普遍化的东西。 –
@MarkMiller您的样本数据中存在一个小错误,即id'113'将根据性别规则不匹配 – AKSW