2017-07-07 28 views
-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是相关的?

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

你确切的问题是什么?你想从最初的最终数据框?或者你已经有解决方案,你只是想找出这个过程的名字? –

+0

谢谢,@RameshMaharjan。我还没有实现任何东西。我用手输入了最终的和最初的。除了详尽的配对比较之外,我想不出有任何办法可以进行1天的出生日期比较,这看起来效率不高。而规则可能会在未来发生变化,所以我正在寻找一些可以普遍化的东西。 –

+0

@MarkMiller您的样本数据中存在一个小错误,即id'113'将根据性别规则不匹配 – AKSW

回答

0

这被称为“for循环”与“if语句”。

按ID排序数据,遍历所有ID。如果有多个,请用if陈述检查您的条件。