总览
这是使用Go清理数据的系列文章的第二部分,其中第二部分。 在第一部分中,我们介绍了Go的基本文本功能以及如何处理CSV文件。 在本教程中,我们将深入研究实际的数据清理。
我们将首先了解混乱数据的问题并提出一个策略,然后研究验证单个字段,在可能的情况下修复数据,并决定如何处理丢失的值。
数据清理策略
清理数据的策略应规定遇到无效,混乱,部分或丢失的数据时应采取的措施。 它还应确定有关清除过程的报告级别。
我们在此关注的数据是表格数据,其中每一行都是独立的。 在不同的数据行之间没有嵌套的层次结构或连接。 许多现实世界的数据集都具有这个不错的属性。
去掉
处理无效数据的最简单方法是将其删除。 如果缺少任何字段或包含无效数据,则删除整行。 这很容易,有时是正确的做法。 如果有问题的字段很关键,并且您无法恢复它,那么您只能删除整个记录。
固定
最好的解决方案是修复不良领域。 在某些情况下,很容易发现并修复问题。 在UFO目击数据集中,州字段可以是美国的52个州之一。
如果该值必须全部为大写,并且某些行包含小写字母,则可以将它们设为大写。
报告
报告无效行(已删除或已修复)非常重要。 组织可以决定让人们尝试修复丢失的数据。 可能需要通过质量检查来运行固定数据,以确保自动修复不会引入无效数据。
统计资料
需要收集有关清理过程的统计信息,以评估源数据的质量,有时还需要确定清理后的数据是否值得处理。 统计信息可以包括丢弃和固定的行数以及每列的错误和缺失字段数。
现场清理
到目前为止,我已经描述了一种用于数据清理的预处理方法。 但是,可以在处理期间执行清理。 每行都将在处理之前进行检查。 如果没有必要进行预处理,这是有用的,因为没有人可以提前修复不良数据以进行后续分析,或者处理过程对时间敏感。
在这种情况下,清理的主要目的是确保不良数据行不会破坏整个处理管道,并且可以根据需要跳过或修复。
验证字段
您如何验证字段? 您需要确切地知道应该存在什么类型的数据,有时还要知道什么值。 这里有一些例子。
验证数字字段
数值字段在数据集中非常常见。 除了数字的类型(整数,实数,复数)之外,某些字段更加专业。 例如,价格字段可能恰好要求两个小数点并且为正。 这是一个检查字符串是否表示价格的函数:
func validate_price(s string) bool {
parts := strings.Split(s,".")
if len(parts) != 2 {
return false
}
dollars, err := strconv.Atoi(parts[0])
if err != nil {
return false
}
if dollars < 0 {
return false
}
cents, err := strconv.Atoi(parts[1])
if err != nil {
return false
}
if cents < 0 || cents > 99 {
return false
}
return true
}
验证URL字段
有时,您需要