修复数据不一致

数据挖掘 数据清理 相似 距离
2021-09-19 12:33:33

我正在尝试分析我拥有的一些数据,但我的数据中有很多不一致之处。

我有一个要分析的 SQL 表。

该表是具有以下结构的大学表:name:string, city:string, state:string, country:string 名称始终存在,但城市、州、国家/地区可能会丢失。我的主要问题是大学名称有大量拼写错误和不同的偏角。例如,当我这样做时,我发现斯坦福大学的偏角 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

他们都是同一所大学,但有的有错别字,有的名字不同,有的没有城市,有的城市打错了……数据不是很好。

所以我正在尝试修复它。如何整合这些数据?

2个回答

由于这个数据集已经组织在一个表中,您可以利用标准 SQL 函数来执行大部分清理工作。一条记录似乎由 4 个字段组成,例如:

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

您可以按照以下步骤获得此数据集的更清晰表示:

  1. 从最高级别(国家)开始,查找唯一值,使用它通过列出与其自身匹配的 soundex 来识别所有相似的发音词(与自身构建表的连接查询)。
  2. 使用这些建议的类似匹配项通过更新名称来修复所有错误。
  3. 以这种方式继续,直到您修复了所有四个字段。
  4. 通过使用城市名称从表的其余部分中查询正确的州来识别缺失的州;如果“leland stanford Junior university”缺少州和国家/地区,则使用城市名称“stanford”将其与自身连接,并从表中的其他记录中获取州/国家/地区名称。
  5. 对于大学名称,使用 grep 识别所有缩写以搜索以点字符结尾的单词。用完整的扩展替换它们。
  6. 接下来,将大学名称分解为单个单词,并将它们转储到一个临时表中的单个列中。对列中的值进行重复数据删除,使其仅包含唯一值。
  7. 运行与步骤 1 中相同的 soundex 匹配连接查询来识别相似的发音名称,将这些建议的相似名称附加到临时表的第二列中。
  8. 手动对您作为建议获得的内容进行快速健全性检查,并删除任何无效匹配项。
  9. 编写一个程序,用建议的替换词替换每个大学名称中的单词,您将拥有一个更清晰的数据集。

如果不首先构建数据集,这是非常困难的。清理数据集花费数千美元是有原因的,因为它们试图为您清理这些问题。

您可以尝试首先创建一个分类系统。首先你给一般的“斯坦福大学”一个ID“1”。像“斯坦福商学院”这样的东西会得到 ID“1.2.5”,其中新的“2”指的是研究生院部门,“5”指的是商学院类别。这真的取决于你的最终目标是什么。简而言之,为可能的细分设置一个 ID 列表,“研究生、本科生等”。然后进一步细分。

对于位置,通常您可以定义“主要”和“次要”位置,即“Palo Alto”​​和“Stanford”,您可以通过每个位置的直方图计数并选择前两个来确定它们。

为了更正拼写错误,您可以使用谷歌搜索 API 并利用“显示结果...”这将为您提供正确的拼写。