通过对R的数据科学的有限了解,我意识到清除不良数据是准备数据进行分析的非常重要的一部分。
在处理数据之前,是否有任何最佳做法或流程来清理数据?如果是这样,是否有任何实现这些最佳实践的自动化或半自动化工具?
通过对R的数据科学的有限了解,我意识到清除不良数据是准备数据进行分析的非常重要的一部分。
在处理数据之前,是否有任何最佳做法或流程来清理数据?如果是这样,是否有任何实现这些最佳实践的自动化或半自动化工具?
Answers:
R含有一些标准为数据操纵功能,其可被用于数据清洗,在其基极封装(gsub
,transform
等),以及在各种第三方软件包,如stringr,重塑 / 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。
dplyr
,这是某些plyr
工具的优化措辞,并且data.table
是处理数据的完全不同的方法。两者都是哈德利·威克姆(Hadley Wickham)的作品。
dplyr
软件包的作者,但不是该软件包的作者data.table
。
从我的角度来看,这个问题适合两步回答。第一部分,我们称之为软预处理,可以看作是使用不同的数据挖掘算法对数据进行预处理的方式,以使其适合进一步分析。注意,如果目标足够简单以至于可以一次解决,这可能就是分析本身。
第二部分,即硬预处理,实际上先于其他任何过程,可以看作是使用简单的工具或脚本来清理数据,选择要处理的特定内容。对于这个问题,POSIX为我们提供了一套奇妙的魔术工具,可用于构成简洁且功能强大的预处理脚本。
例如,对于处理来自社交网站(Twitter,Facebook等)的数据的人,数据检索通常会生成具有非常特定格式的文件-尽管结构可能并不总是很好,因为它们可能包含缺少的字段,等等。 。对于这些情况,一个简单的awk
脚本可以清理数据,生成一个有效的输入文件以供以后处理。从魔法设置,还可以指出grep
,sed
,cut
,join
,paste
,sort
,和其他工具众人。
如果简单的源文件包含太多细节,则可能有必要产生一束清理数据的方法。在这种情况下,通常最好使用脚本语言(而不是外壳语言),例如Python,Ruby和Perl。这允许建立API以非常直接和可重用的方式选择特定数据。此类API有时会由其编写者公开,例如IMDbPY,Stack Exchange API等。
因此,回答问题:是否有最佳实践?通常取决于您的任务。如果您始终要处理相同的数据格式,通常最好编写一个有组织的脚本对其进行预处理;然而,如果你只需要一个简单的和一些数据集快速清理,指望POSIX工具简洁shell脚本,将做整个工作多快于Python脚本,还是这样。由于清理取决于数据集和您的目的,因此很难完成所有工作。但是,有很多API可以让您半途而废。
grep
默认情况下使用POSIX基本正则表达式,当以身份运行时允许扩展的POSIX正则表达式,以身份运行时允许grep -E
PCRE grep -P
。
数据清理很少会完全自动化的一个原因是,要根据您的特定问题,方法和目标来定义“清理”的含义,需要进行大量判断。
它可能像为任何丢失的数据估算值一样简单,也可能像诊断以前的自动化过程(例如,编码,检查,转换)中的数据输入错误或数据转换错误一样复杂。在后两种情况下,从外观上看数据看起来不错,但确实是错误的。这种诊断通常需要人工分析和检查,还需要带外信息,例如有关数据源及其使用的方法的信息。
另外,当错误或丢失的数据留为空白(或不适用)而不是估算或提供默认值时,某些数据分析方法会更好地工作。当存在不确定性和无知的明确表示形式(例如Dempster-Shafer Belief函数)时,这是正确的。
最后,对清洗过程进行特定的诊断和度量很有用。随机分布的缺失值或错误值,还是以可能影响分析结果的任何方式集中它们。测试替代清洁策略或算法的效果以查看它们是否影响最终结果,这很有用。
考虑到这些问题,我非常怀疑任何以肤浅,轻率或全自动的方式处理数据清理的方法或过程。在这些细节中隐藏了许多恶魔,值得给予他们认真的注意。
我认为在进行实际研究之前,没有通用的技术可以“清除”数据。另一方面,我的目标是进行可重复的研究。通过进行可重复的研究,如果您使用带有错误或错误的参数/假设的清洁技术,其他人可能会发现。
有一个很好的R包针织机,它对可重复性研究有很大帮助。
当然,并非所有研究都可以完全复制(例如实时Twitter数据),但是至少您可以轻松记录清理,格式化和预处理步骤。
您可以在Coursera上查看我为可再生研究课程准备的评估。
OpenRefine(以前称为Google Refine)是一个很好的工具,您可以在其中交互地执行数据清除和转换。您的最终输出可以导出为多种标准格式(json,csv)或任何自定义格式(例如wiki)。
确切的重复项可以在OpenRefine中进行处理,方法是使用“空白”功能对+进行排序。它还具有近似字符串(模糊)聚类功能,您可以在其中将外观相似的重复项(例如公司名称或地址)分组。仅此功能就很棒。
Coursera中有专门针对此课程的整个课程。您可能想复习他们提到的技术,而重要的部分是知道何时使用什么。
https://www.coursera.org/learn/data-cleaning
最好手动而不是自动执行此操作,因为每个数据集都有其自身的问题,并且并非所有步骤都适用于所有数据集。