Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于清理数据的Python或awk/sed_Python_R_Awk_Sed_Data Cleaning - Fatal编程技术网

用于清理数据的Python或awk/sed

用于清理数据的Python或awk/sed,python,r,awk,sed,data-cleaning,Python,R,Awk,Sed,Data Cleaning,我使用R进行数据分析,我对此非常满意。不过,清理数据可能会容易一些。我正在考虑学习另一种适合这项任务的语言。具体来说,我正在寻找一种工具,用于获取原始数据,删除不必要的变量或观察值,并将其格式化以便于在R中加载。内容将主要是数字和字符串数据,而不是多行文本 我正在考虑awk/sed组合与Python的比较。(我知道Perl将是另一种选择,但是,如果我要学习另一种完整的语言,Python似乎是一种更好、更可扩展的选择。) sed/awk的优点是学习速度更快。缺点是这种组合不像Python那样可扩展

我使用R进行数据分析,我对此非常满意。不过,清理数据可能会容易一些。我正在考虑学习另一种适合这项任务的语言。具体来说,我正在寻找一种工具,用于获取原始数据,删除不必要的变量或观察值,并将其格式化以便于在R中加载。内容将主要是数字和字符串数据,而不是多行文本

我正在考虑awk/sed组合与Python的比较。(我知道Perl将是另一种选择,但是,如果我要学习另一种完整的语言,Python似乎是一种更好、更可扩展的选择。)

sed/awk的优点是学习速度更快。缺点是这种组合不像Python那样可扩展。事实上,如果我学习Python,我可能会想象一些“任务爬行”,这很好,但不是我的目标

我考虑的另一个问题是对大型数据集的应用。据我所知,awk/sed逐行操作,而Python通常会将所有数据拉入内存。这可能是sed/awk的另一个优势


我还遗漏了其他问题吗?如果您能提供任何建议,我们将不胜感激。(我为R用户提供了R标签,以提供他们的清洁建议。)

不想破坏你的冒险,但我会说不,原因如下:

  • R是矢量化的,其中sed/awk不是矢量化的
  • R已经有了Perl正则表达式和扩展正则表达式
  • 如果您需要,R可以更容易地求助于统计例程(比如插补)
  • R可以形象化、总结
最重要的是:你已经知道R


也就是说,sed/awk当然适合于小程序,甚至是一行程序,Python是一种很好的语言。但是我也会坚持R.< /P> < P>我建议长期使用适当的语言来处理数据文件,如Python或Perl或Ruby,而不是短期SED/AWK解决方案。我认为所有的数据分析师至少需要三种语言;我用C进行大量计算,用perl处理数据文件,用R进行交互式分析和绘图

在python流行之前,我学习了perl。我听说过ruby的好东西,所以你可能想试试


对于其中任何一项,您都可以逐行处理文件;python不需要提前读取完整文件。

我建议使用“awk”进行这种处理

您可能只是在简单文本文件中搜索/拒绝无效的观察结果

awk在这项任务中速度极快,编程非常简单

如果你需要做更复杂的事情,那么你可以


如果您不介意性能受到影响,Python也是一种可能性。“rpy”库可用于紧密集成python和R组件。

我经常使用python和Perl。我对sed相当了解,曾经多次使用awk。我用过R来做间歇和冲刺。Perl在数据转换功能和速度方面是最好的

  • Perl基本上可以做sed和awk所能做的一切,但也可以做得更多。(实际上,perl附带的a2p和s2p将awk和sed脚本转换为perl。)
  • Perl包含在大多数Linux/Unix系统中。如果不是这样的话,就有充分的理由学习sed和awk。这一理由早已过时
  • Perl有一组丰富的模块,提供的功能远远超过awk或sed。例如,这些模块支持一行程序,可以反转补码DNA序列、计算统计数据、解析CSV文件或计算MD5。(有关软件包,请参阅)
  • Perl本质上与sed和awk一样简洁。对于像我这样的人(我猜,还有你),在命令行上快速转换数据是一大好处。Python太冗长,无法有效地使用命令行
老实说,我不知道为什么要学习sed和awk而不是Perl


说实话,我不是“Perl人”。我喜欢瑞士军刀,而不是宗教。

我同意德克的观点。我也想到了同样的事情,也使用了一些其他的语言。但最后,我再次感到惊讶的是,更有经验的用户如何使用R。像
ddply
plyr
这样的软件包可能会让您非常感兴趣。尽管如此,SQL经常帮助我处理数据,我还是推荐sed/awk以及UNIX平台上可用的大量其他命令行工具:comm、tr、sort、cut、join、grep和内置shell功能,如循环等等。您真的不需要学习其他编程语言,因为R可以处理数据操作,甚至比其他流行的脚本语言更好。

所谓“清理”,是指剪切异常值或恢复一致性或其他任何东西?所谓“数据”,你指的主要是数字或字符串,还是简单的文本?对我来说,当前问题的目标过于笼统。我自己主要使用python,但如果它纯粹是对基于文本的数据集的操作,充当R的数据接口,我强烈建议使用perl,考虑到它强大的正则表达式和处理文本的灵活性。我想知道我们可以用perl/python/ruby/sed/awk等做什么,但不能用R做什么。除非您显式地这样做,否则python通常不会将所有数据都拉入内存。@kohske这不是什么可以做或不能做的,而是做起来有多容易。对于一组用例来说,它们中的每一个都是强的,而每一个都是弱的。例如,R非常适合交互式数据操作,但我不会用它来构建大规模的数据集成和过滤管道。。。但这是可以做到的。我不认为他正在考虑删除R,而是补充它。+1表示从公平的编码背景进行比较。+1表示Perl。尽管Python可能更易于阅读,但Perl在速度和紧凑性方面胜过它。命令行选项确实是一件好事