在数据集中寻找形成自然键的最小行集

数据挖掘 Python 数据集 数据清理
2021-09-24 20:53:25

我在 hdfs 上有几组从关系导出的文本文件。不幸的是,我不知道表的结构是什么,但我知道每个表都有一个多部分键来唯一地定义一行。我通过领域知识知道键是多部分的(例如报告日期和项目编号),并且我可以识别一些明显不在键中的列(例如销售收入)。什么是识别作为自然键的潜在列集的有效方法,因为它们在观察到的数据中没有重复?我可以在几个 Gig 中获得几天的日志,所以 python 或 sql 可以工作。这似乎是一个很棒的字典应用程序,但我不知道如何处理这个问题。

1个回答

你可以通过几种方式做到这一点...

  1. 编写执行以下操作的脚本。

    • 选一张桌子,

    • 获取表中的行数,可以随时执行此操作。(+=1 循环)

    • 在表中选择您认为可能构成键的几个字段(列),

    • 创建空 Set()

    • 逐行烧录文件,为每一行抓取目标字段并构造一个字符串键str(field1)+'_'+str(field2)..等。将此密钥添加到您的集合中。

    • 完成表格的所有行后,检查len(set). 如果您选择的键是好的,那么len(set)将等于 # 行。

  2. 另一种方法,这将取决于您要对数据做什么以及您访问它的频率……是将其导入 sql 数据库。我通常使用mysql。一旦您的数据进入:

    • 从表名中选择计数(*);会给你表格中的行

    • 从表中选择计数(不同的字段1,字段2,字段3);给出 field1+field2+field3 的不同组合的数量

    • 如果两个选择给出相同的数字,那么您就有一个有效的密钥。它可能不保证一个连接键,但它对于该表来说是唯一的,并且有助于链接过程。

  3. 许多人极力提倡使用熊猫。如果您将数据导入到数组中,您可以创建一个数据框并执行一些类似于 SQL 的查询。我对熊猫不是很熟悉,所以我不能举个例子。

如果是一次性的,我会制作一个 python 脚本。但是,如果您认为您将进一步探索数据,那么花时间将数据放入数据库中可能会很有用。