【发布时间】:2016-04-19 15:54:13
【问题描述】:
假设给定一组结构化数据。已知数据存在问题,我需要以某种方式对它们的一致性进行“评分”。比如我有如下数据:
fieldA | fieldB | fieldC
-------+--------+-------
foo | bar | baz
fooo | bar | baz
foo | bar | lorem
.. | .. | ..
lorem | ipsum | dolor
lorem | upsum | dolor
lorem | ipsum | baz
因此假设第一行被认为是正确的条目,因为与第二行和第三行中的记录相比,该组合中的数据相对更多。在第二行中,fieldA 的值应为foo(由于拼写错误导致不一致)。然后在第三行中,fieldC 的值应为 baz,因为数据集中的其他条目与 fieldA (foo) 和 fieldB (bar) 的值相似。
此外,在数据集的其他部分,还有另一种相对更常见的组合(lorem、ipsum、dolor)。所以下面记录中的问题和前面提到的一样,只是值组合不同。
我最初将所有内容转储到 SQL 数据库,并使用带有 GROUP BY 的语句来检查字段值的一致性。因此,对于我要检查一致性的每个字段以及每条记录,都会有 1 个查询。
SELECT fieldA, count(fieldA)
FROM cache
WHERE fieldB = 'bar' and fieldC = 'baz'
GROUP BY fieldA
然后我可以通过将记录引用到下面的对象(上一个SQL查询的处理结果)来检查记录的fieldA的值是否与其余的一致。
{'foo': {'consistency': 0.99, 'count': 99, 'total': 100}
'fooo': {'consistency': 0.01, 'count': 1, 'total': 100}}
但是它非常慢(数据集有大约 220 万条记录,我正在检查 4 个字段,因此进行了大约 900 万次查询),并且需要半天才能完成。然后我把SQL存储换成了elasticsearch,处理时间缩到5小时左右,能不能快点?
也只是出于好奇,我是不是在这里重新发明了一个轮子?有现成的工具吗?目前它是在 Python3 中实现的,带有 elasticsearch。
【问题讨论】:
标签: python python-3.x data-integrity data-cleaning