2011-09-20 33 views
24

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

我正在考虑awk/sed组合与Python。 (我认识到Perl会是另一种选择,但是如果我要学习另一种完整语言,Python似乎是一个更好,更具扩展性的选择。)

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

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

我还有其他问题吗?任何建议,你可以提供将不胜感激。 (包括我的R用户提供他们清洗的建议R标志。)

+0

通过“清理”,你是指裁剪异常值或恢复一致性或其他任何东西?通过“数据”,你的意思主要是数字或字符串,或只是文本?对我来说,这个当前问题的目标太笼统了。 – nye17

+0

@ nye17,抱歉的歧义。我增加了一些细节。 – Charlie

+2

我主要是为自己使用python,但如果它纯粹是基于文本的数据集的操纵,作为R的数据接口,我强烈建议perl,因为它具有强大的正则表达式和处理文本的灵活性。 – nye17

回答

15

,不要破坏你的冒险,但我说没有,这里是为什么:

  • R的矢量化,其中SED/AWK不
  • [R已经有两个Perl的正则表达式和扩展正则表达式
  • R能够更容易地进行追索的统计程序(比如,归集)如果你需要它
  • R可以想像,总结,...

和最重要的是:你已经知道R

这就是说,当然sed/awk对于小程序甚至是单行程序来说都很棒,而Python是一种很好的语言。但我会考虑也坚持R.

+4

我不认为他正在考虑放弃R,而是补充它。 – Karl

3

我建议长期投资于处理数据文件的适当语言,比如python,perl或ruby,以及短期的sed/awk解决方案。我认为所有的数据分析师至少需要三种语言;我使用C进行大量计算,perl处理数据文件,R使用交互式分析和图形。

在python成为流行之前,我学会了perl。我听说过很多关于红宝石的东西,所以你可能想尝试一下。

对于其中的任何一种,您都可以逐行使用文件; python不需要提前阅读完整的文件。

+2

当然,有人提醒说'C++可能比C更好',同样,Python粉丝认为它比Perl更好。但作为一般规则,知道'R,* a *脚本语言和*现代可移植编译语言*'是一个好方法。 –

+0

@DirkEddelbuettel事实上,我陷入了90年代后期,编程方式;我担心学生会以我查看Fortran程序员的方式查看我。 – Karl

1

我会为这种类型的处理推荐'awk'。

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

awk在这项任务中闪电般快,编程非常简单。

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

如果你不介意性能问题,Python也是一种可能性。 “rpy”库可用于紧密集成python和R组件。

10

我经常使用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文件或计算MD5s的单行程序。 (有关软件包,请参见http://cpan.org/
  • Perl基本上和sed和awk一样简洁。对于像我这样的人(而且,我怀疑你),在命令行上快速转换数据是一大福音。 Python对于有效的命令行使用太罗嗦。

我老实说不知道为什么要用Perl学习sed和awk。

为了记录,我不是“一个Perl人”。我喜欢它作为一把瑞士军刀,而不是一种宗教信仰。

+2

+1从公平的编码背景进行比较。用于Perl的 – nye17

+0

+1。虽然Python可能更易于阅读,但Perl在速度和紧凑性方面都有优势。命令行选项确实是一种祝福。 –

+0

'每个Unix系统都有Perl'的参数对sed和awk更适用,如果你需要(不寒而栗)在Windoze上工作,这两个更容易被搁置。让我们回到我刚刚使用R的角度,因为查理在Windows上显然拥有R。我曾经在Perl中编写过大量数据过滤器,但完全转向R. –

1

我同意德克。我想到了同样的事情,并且也使用了其他语言。但是最终我再次感到惊讶,更有经验的用户用R做了什么。像ddplyplyr这样的软件包对你来说可能很有意思。话虽这么说SQL帮助我的数据杂耍经常

6

我会推荐/ AWK连同其他的一些命令行工具在UNIX一样平台上可用的财富 sed的:通讯,TR,排序,剪切,加入,grep的,并建立在像循环和什么的shell功能。你真的不需要学习另一种编程语言,因为R可以处理数据操作,并且如果不比其他流行的脚本语言更好。

+0

Jeff的一个很好的观点是:当用管道粘在一起时,像他提到的那些命令行工具可以非常快速和强大地切割和切割数据。 Perl补充了许多这些工具(而不是取而代之)。有关摘要,请参阅位于http://www.gnu.org/s/coreutils/manual/html_node/index.html的GNU coreutils手册。 – Reece

+0

更好的是,如果你使用Jeff和Dirk的littler包中的精美'r'二进制文件,R可以使用相同的管道。所以回到使用R :) –

+0

提问者没有指定一个平台,但对于Windows上的大多数人来说,这可能不是一个好的方法。 Unix工具向Windows环境的转移并非没有问题。 – user287424