2017-07-07 64 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陳述檢查您的條件。