2017-07-07 2 views
-1

J'ai des jeux de données avec environ 100s de milliers de lignes (soit environ 100s de milliers de triplets RDF.) D'un point de vue tabulaire, chaque ligne représente la participation d'une personne un certain processus. Les données sont bruyantes, et ce qui semble être des individus séparés peut en réalité être la même personne. J'ai besoin d'assigner de façon autoritaire de nouveaux identifiants à chaque personne unique qui est modélisée dans les données, selon les règles, mais je ne sais même pas s'il y a un nom pour cette pratique. Je connais bien certains types de méthodes de regroupement, mais cela me semble différent. Je n'ai aucune idée du nombre exact d'individus uniques, et je ne veux pas trouver des individus avec une distance minimale entre eux. Je veux trouver des individus qui satisfont certaines règles fournies par mes collaborateurs.regroupement basé sur des règles d'individus quasi-identiques (PAS de regroupement?)

Par exemple, si j'ai ces données:

+-------------+-----+------------+--------+ 
| 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  | 
+-------------+-----+------------+--------+ 

Et ces règles exhaustives

  • personnes qui ont le même identifiant et le même sexe sont les mêmes personne
  • personnes qui avoir le même identifiant et avoir des dates de naissance dans un jour d'un autre sont la même personne

Ensuite, la solution serait

+-------------+-----+------------+--------+-----------------+-----------------------------------------------------+ 
| 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    |              | 
+-------------+-----+------------+--------+-----------------+-----------------------------------------------------+ 

Mon « meilleure langue » est R, mais la langue principale de mon projet est Scala. Donc Je m'intéresse particulièrement aux solutions qui pourraient raisonnablement être implémentées en R, Scala ou Java. Les données d'origine viennent sous forme de tableaux mais sont transformées en RDF triples assez tôt dans mon processus, alors peut-être SWRL est-il pertinent? Un de mes collaborateurs a suggéré par hasard PyCLIPS pour ce genre de problème, alors peut-être Jess ou Drools sont-ils pertinents?

  • Comment s'appelle mon problème/tâche?
  • Existe-t-il des solutions pour cela, autres que la comparaison par paires exhaustive? Est-ce que je vais avoir des problèmes de transitivité parce que j'ai deux (ou plus) règles, et l'une d'entre elles ne nécessite pas d'identité?
+0

Quel est votre problème exact? Vous voulez le dataframe final de votre initiale? ou vous avez déjà une solution et vous essayez juste de trouver des noms pour le processus? –

+0

merci, @RameshMaharjan. Je n'ai encore rien implémenté. J'ai tapé la finale et initiale à la main. Je ne peux pas penser à un moyen de faire la comparaison des dates de naissance d'un jour en plus d'une comparaison exhaustive par paire, ce qui ne semble pas très efficace. Et les règles pourraient changer à l'avenir, donc je cherche quelque chose de généralisable. –

+0

@MarkMiller Vous avez une erreur mineure dans vos données d'échantillon, c'est-à-direid '113' ne correspondra pas basé sur la règle du genre – AKSW

Répondre

0

Ceci est appelé "boucle for" avec "if statements".

Trier les données par ID, parcourir tous les ID. s'il y en a plus d'un, vérifiez vos conditions avec les instructions if.