Correction des incohérences des données

8

J'essaie d'analyser certaines données que j'ai, mais il y a beaucoup d'incohérences dans mes données.

J'ai une table SQL que j'essaie d'analyser.

Le tableau est un tableau des universités avec la structure suivante: Le name:string, city:string, state:string, country:string nom est toujours présent mais la ville, l'état, le pays peuvent être manquants. Mon principal problème est qu'il existe une tonne de fautes de frappe et une déclinaison différente d'un nom d'université. Par exemple, voici la déclinaison de Standford Unversity que je trouve quand je le fais SELECT "universities".* FROM "perm_universities" WHERE (name like '%stanford%'):

stanford university - stanford - ca - united states of america
the leland stanford junior university - stanford - ca - united states of america
leland stanford jr. university - stanford - ca - united states of america
stanford university graduate school of business - stanford - ca - united states of america
the leland stanford junior university (stanford university) - stanford - ca - united states of america
leland stanford junior university - stanford - ca - united states of america
stanford university - stanford -  -
leland stanford jr. university, graduate school of business - stanford - ca - united states of america
stanford law school - stanford - ca - united states of america
stanford - stanford - ca - united states of america
stanford university, graduate school of business - stanford - ca - united states of america
stanford graduate school of business - stanford - ca - united states of america
stanford univerity - stanford - ca - united states of america
stanford university (the leland stanford junior university) - stanford - ca - united states of america
the leland stanford jr. university - palo alto - ca - united states of america
leland stanford junior university, school of law - stanford - ca / n/a - united states of america
stanford universit - stanford - ca - united states of america
the leland stanford university - stanford - ca - united states of america
leland standford stanford junior university - stanford - ca - united states of america
stanford university - cambridge - ma - united states of america
the leland stanford junior university 'stanford university' - stanford - ca - united states of america
stanford university school of law - stanford - ca - united states of america
stanford univresity - stanford - ca - united states of america
the leland stanford jr. university (stanford university) - stanford - ca - united states of america
leeland stanford junior university - stanford - ca - united states of america
leland stanford junion university -  - ca - united states of america
leland stanford junior university (stanford university) - stanford - ca - united states of america
the leland stanford junior university - stanford -  -
stanford university - graduate school of business - stanford - ca - united states of america
graduate school of business, stanford university - stanford - ca - united states of america
stanford universoty - stanford - ca - united states of america
leland stanford junior university - stanford -  -
stanford univeristy - palo alto - ca - united states of america
leland stanford university - palo alto - ca - united states of america
stanford university - stanford - ca / n/a - united states of america
the leland stanford junior university, stanford university - stanford - ca - united states of america
the leland stanford junior university graduate school of business - stanford - ca - united states of america
stanford universtiy - stanford - ca - united states of america
stanford univerisity - stanford - ca - united states of america
stanford university - stanford - ct - united states of america
stanford law scool - stanford - ca - united states of america
mba: stanford university - stanford - ca - united states of america

Ils sont tous la même université, mais certains ont des fautes de frappe, certains ont des noms différents, certains n'ont pas de villes, certains ont les mauvaises villes, ... Les données ne sont pas excellentes.

J'essaie donc de le réparer. Comment puis-je consolider ces données?

bl0b
la source
2
Recherchez le couplage d'enregistrements pour savoir comment gérer les enregistrements qui se chevauchent partiellement. Vous pouvez gérer les fautes d'orthographe par similitude en recherchant les chaînes de bits n-gram .
Emre
2
J'ai voté pour la fermeture comme "trop ​​large" car il existe littéralement des centaines d'approches possibles et vous ne nous avez même pas dit que vous en aviez essayé une. Correspondance floue, correspondance de mots clés, clustering, apprentissage automatique ...
Spacedman
@Spacedman Je n'ai encore rien essayé pour le réparer car je ne sais pas quelles sont les meilleures options.
bl0b
Je pense que c'est une question légitime; le problème est quelle approche (parmi les nombreuses existantes) serait la meilleure pour gérer ce problème? Étant donné le nombre de correspondances potentielles, il peut être préférable d'essayer le clustering que n'importe quel type de correspondance floue / approximative. Cependant, j'aimerais entendre les opinions des autres.
Antonio

Réponses:

3

Étant donné que cet ensemble de données est déjà organisé dans une table, vous pouvez tirer parti des fonctions SQL standard pour effectuer une grande partie du nettoyage. Un enregistrement semble être composé de 4 champs, par exemple:

university name, city, state, country
stanford law school - stanford - ca - united states of america

Vous pouvez suivre ces étapes pour obtenir une représentation plus nette de cet ensemble de données:

  1. En commençant par le plus haut niveau (pays), trouvez des valeurs uniques qui l'utilisent pour identifier tous les mots similaires en répertoriant les correspondances soundex avec lui-même (créez une requête de jointure de la table avec elle-même).
  2. Utilisez ces correspondances suggérées pour corriger toutes les erreurs en mettant à jour les noms.
  3. Continuez de cette manière jusqu'à ce que vous ayez corrigé les quatre champs.
  4. Identifiez les états manquants en utilisant le nom de la ville pour interroger l'état correct du reste du tableau; si l'état et le pays manquent pour "leland stanford junior university", utilisez le nom de ville "stanford" pour le joindre à lui-même et obtenir le nom de l'état / pays des autres enregistrements du tableau.
  5. Pour le nom de l'université, identifiez toutes les abréviations à l'aide de grep pour rechercher les mots se terminant par un caractère point. Remplacez-les par des extensions complètes.
  6. Ensuite, divisez le nom de l'université en mots individuels et transférez-les dans un tableau temporaire dans une seule colonne. Supprimez les valeurs de la colonne afin qu'elle ne contienne que des valeurs uniques.
  7. Exécutez la même requête de jointure correspondant à soundex qu'à l'étape 1 pour identifier des noms similaires, ajoutez ces noms similaires suggérés dans une deuxième colonne de la table temporaire.
  8. Effectuez manuellement une vérification rapide de ce que vous avez obtenu comme suggestions et supprimez toutes les correspondances invalides.
  9. Écrivez une procédure pour remplacer les mots dans chaque nom d'université par des remplacements suggérés, et vous aurez un ensemble de données beaucoup plus propre.
Sandeep S. Sandhu
la source
1

C'est assez difficile à faire sans d'abord structurer votre jeu de données. Il y a une raison pour laquelle les ensembles de données nettoyés coûtent des milliers de dollars car ils essaient de nettoyer ces problèmes pour vous.

Ce que vous pouvez essayer, c'est d'abord créer un système de taxonomie. D'abord, vous donnez au général "Stanford university" un ID de "1". Quelque chose comme «Stanford Graduate School of Business» obtiendrait l'ID «1.2.5», où le nouveau «2» fait référence à la division des études supérieures, «5» se réfère à la catégorie des écoles de commerce. Cela dépend vraiment de votre objectif ultime. En bref, établissez une liste d'ID pour les subdivisions possibles, "Graduate, undergraduate, etc." puis d'autres subdivisions.

Pour les emplacements, vous pouvez généralement définir un emplacement "principal" et "secondaire", c'est-à-dire "Palo Alto" et "Stanford", que vous pouvez déterminer en effectuant un histogramme pour chacun et en sélectionnant les deux premiers.

Pour corriger les fautes d'orthographe, vous pouvez utiliser l'API de recherche Google et exploiter la "Affichage des résultats pour ..." qui vous donnerait l'orthographe correcte.

Alex R.
la source