Corrigindo inconsistências de dados

8

Estou tentando analisar alguns dados que tenho, mas há muitas inconsistências nos meus dados.

Eu tenho uma tabela SQL que estou tentando analisar.

A tabela é uma tabela de universidades com a seguinte estrutura: O name:string, city:string, state:string, country:string nome está sempre presente, mas cidade, estado e país podem estar ausentes. Minha questão principal é que existem muitos erros de digitação e declinação diferente de um nome de universidade. Por exemplo, aqui está a declinação do Standford Unversity que encontro quando o faço 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

Eles são todos da mesma universidade, mas alguns têm erros de digitação, outros têm nomes diferentes, outros não têm cidades, outros têm cidades erradas ... Os dados não são bons.

Então, eu estou tentando consertar isso. Como posso consolidar esses dados?

bl0b
fonte
2
Procure a ligação de registros para saber como você pode lidar com registros parcialmente sobrepostos. Você pode lidar com erros de ortografia por similaridade, pesquisando as seqüências de bits n-grama .
Emre
2
Votei em fechar como "muito amplo", pois existem literalmente centenas de abordagens possíveis e você nem nos disse que tentou uma. Correspondência difusa, correspondência de palavras-chave, clustering, aprendizado de máquina ...
Spacedman
@ Spacedman Ainda não tentei nada para corrigi-lo, pois não sei quais são as melhores opções.
bl0b
Eu acho que essa é uma pergunta legítima; o problema é qual abordagem (dentre as existentes) seria a melhor para lidar com esse problema? Dado o número de possíveis correspondências, pode ser melhor tentar agrupar do que qualquer tipo de correspondência aproximada / difusa. No entanto, eu gostaria de ouvir as opiniões de outras pessoas.
Antonio

Respostas:

3

Como esse conjunto de dados já está organizado em uma tabela, você pode aproveitar as funções SQL padrão para executar uma grande parte da limpeza. Um registro parece ser composto por 4 campos, por exemplo:

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

Você pode seguir estas etapas para obter uma representação mais limpa desse conjunto de dados:

  1. Começando com o nível mais alto (país), encontre valores exclusivos para identificá-lo com todas as palavras semelhantes, listando as correspondências soundex consigo (crie uma consulta de junção da tabela consigo).
  2. Use essas correspondências semelhantes sugeridas para corrigir todos os erros, atualizando os nomes.
  3. Continue dessa maneira até ter corrigido todos os quatro campos.
  4. Identifique os estados ausentes usando o nome da cidade para consultar o estado correto do restante da tabela; se o estado e o país estiverem ausentes para "leland stanford junior university", use o nome da cidade "stanford" para se associar a ele e obter o nome do estado / país nos outros registros da tabela.
  5. Para o nome da universidade, identifique todas as abreviações usando grep para procurar palavras que terminem em um caractere de ponto. Substitua-os por expansões completas.
  6. Em seguida, divida o nome da universidade em palavras individuais e despeje-as em uma tabela temporária em uma única coluna. Duplique os valores na coluna para que ele contenha apenas valores exclusivos.
  7. Execute a mesma consulta de junção soundex correspondente à da etapa 1 para identificar nomes de sons semelhantes, acrescente esses nomes semelhantes sugeridos em uma segunda coluna da tabela temporária.
  8. Faça manualmente uma verificação rápida da sanidade do que você obteve como sugestões e exclua quaisquer correspondências inválidas.
  9. Escreva um procedimento para substituir as palavras em cada nome de universidade pelas substituições sugeridas, e você terá um conjunto de dados muito mais limpo.
Sandeep S. Sandhu
fonte
1

Isso é bastante difícil sem primeiro estruturar seu conjunto de dados. Há uma razão pela qual os conjuntos de dados limpos custam milhares de dólares porque tentam limpar esses problemas para você.

O que você pode tentar é primeiro criar um sistema de taxonomia. Primeiro, você atribui à "Universidade Stanford" um ID "1". Algo como a "escola de administração de pós-graduação de Stanford" obteria o ID "1.2.5", onde o novo "2" se refere à divisão de pós-graduação, "5" se refere à categoria de escola de negócios. Realmente depende de qual é seu objetivo final. Em resumo, configure uma lista de IDs para possíveis subdivisões, "Pós-graduação, graduação, etc." e depois subdivisões adicionais.

Para locais, geralmente você pode definir um local "primário" e "secundário", ou seja, "Palo Alto" e "Stanford", que podem ser determinados por histograma para cada um e selecionando os dois primeiros.

Para corrigir erros de ortografia, você pode usar a API de pesquisa do Google e explorar a seção "Mostrando resultados para ...", que fornecerá a ortografia correta.

Alex R.
fonte