从我使用 R 对数据科学的有限涉猎中,我意识到清理不良数据是准备分析数据的一个非常重要的部分。
是否有在处理数据之前清理数据的最佳实践或流程?如果是这样,是否有任何实现这些最佳实践的自动化或半自动化工具?
从我使用 R 对数据科学的有限涉猎中,我意识到清理不良数据是准备分析数据的一个非常重要的部分。
是否有在处理数据之前清理数据的最佳实践或流程?如果是这样,是否有任何实现这些最佳实践的自动化或半自动化工具?
R 包含一些用于数据操作的标准函数,可用于数据清洗,在其基础包(gsub
、transform
等)以及各种第三方包中,如stringr、reshape / reshape2和plyr / dplyr . 这些软件包及其功能的使用示例和最佳实践在以下论文中进行了描述:http: //vita.had.co.nz/papers/tidy-data.pdf。
此外,R 还提供了一些专门针对数据清理和转换的软件包:
以下论文介绍了 R 中数据清理的全面而连贯的方法,包括示例和使用editrules和deducorrect包,以及对 R 中数据清理的工作流程(框架)的描述,我强烈推荐:http ://cran.r-project.org/doc/contrib/de_Jonge+van_der_Loo-Introduction_to_data_cleaning_with_R.pdf。
在我看来,这个问题适合分两步回答。第一部分,我们称之为软预处理,可以看作是使用不同的数据挖掘算法对数据进行预处理,使其适合进一步分析。请注意,这可能是分析本身,以防目标简单到可以一次性解决。
第二部分,硬预处理,实际上是先于其他任何过程,可以看作是使用简单的工具或脚本来清理数据,选择要处理的特定内容。针对这个问题,POSIX 为我们提供了一套奇妙的魔法工具,可以用来编写简洁且非常强大的预处理脚本。
例如,对于处理来自社交网站(twitter、facebook、...)的数据的人来说,数据检索通常会产生具有非常特定格式的文件——尽管结构并不总是很好,因为它们可能包含缺失的字段,等等. 对于这些情况,一个简单的awk
脚本可以清理数据,生成一个有效的输入文件供以后处理。从神奇的集合中,人们还可以指出grep
, sed
, cut
, join
, paste
,sort
以及一大堆其他工具。
如果简单的源文件有太多细节,可能还需要生成一组方法来清理数据。在这种情况下,通常最好使用脚本语言(除了 shell 语言),例如 Python、Ruby 和 Perl。这允许构建API以非常直接且可重用的方式选择特定数据。此类API有时会由其编写者公开,例如IMDbPY、Stack Exchange API等。
所以,回答这个问题:有什么最佳实践吗?这通常取决于您的任务。如果您总是处理相同的数据格式,通常最好编写一个有组织的脚本来对其进行预处理;然而,如果您只需要对某些数据集进行简单快速的清理,请依靠 POSIX 工具来获得简洁的 shell 脚本,它比 Python 脚本更快地完成整个工作,等等。由于清理工作既取决于数据集,也取决于您的目的,因此很难让所有事情都完成。然而,有很多 API 可以让您解决问题的一半。
数据清理很少完全自动化的一个原因是,鉴于您的特定问题、方法和目标,需要大量判断来定义“清理”的含义。
它可能像为任何缺失的数据估算值一样简单,也可能像从以前的自动化过程(例如编码、审查、转换)中诊断数据输入错误或数据转换错误一样复杂。在这最后两种情况下,数据从外观上看起来不错,但实际上是错误的。这种诊断通常需要人工分析和检查,还需要带外信息,例如有关他们使用的数据源和方法的信息。
此外,当错误或缺失数据留空(或 N/A)而不是估算或赋予默认值时,某些数据分析方法效果更好。当存在不确定性和无知的明确表示时,这是正确的,例如 Dempster-Shafer 信念函数。
最后,为清洁过程提供特定的诊断和指标是很有用的。缺失值或错误值是否随机分布,或者它们是否以任何可能影响分析结果的方式集中。测试替代清洁策略或算法的效果以查看它们是否会影响最终结果是很有用的。
鉴于这些担忧,我非常怀疑任何以肤浅、漫不经心或全自动方式处理数据清理的方法或过程。在这些细节中隐藏着许多恶魔,给予他们认真的关注是值得的。
关于自动清理:您确实无法自动清理数据,因为错误的数量和错误的定义通常取决于数据。例如:您的“收入”列可能包含负值,这是一个错误 - 您必须对这些案例做一些事情。另一方面,“每月储蓄”列可以合理地包含负值。
此类错误高度依赖于领域——因此,要找到它们,您必须具备领域知识,这是人类擅长的领域,而自动化流程则不那么重要。
您可以并且应该自动化的地方是重复的项目。例如,必须每月生成的报告。如果您发现错误,您应该放置一些自动化流程,以便在接下来的几个月中发现这些类型的错误,从而节省您的时间。