26

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

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

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

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

还有其他我想念的问题吗?您可以提供的任何建议将不胜感激。(我为 R 用户添加了 R 标签,以提供他们的清洁建议。)

4

6 回答 6

15

不要破坏你的冒险,但我会说不,这就是为什么:

  • R 在没有 sed/awk 的地方被矢量化
  • R 已经有 Perl 正则表达式和扩展正则表达式
  • 如果需要,R 可以更轻松地求助于统计例程(例如插补)
  • R 可以可视化、总结、...

最重要的是:您已经知道 R

也就是说,当然 sed/awk 非常适合小程序甚至单行程序,而 Python 是一门很好的语言。但我会考虑也坚持使用 R。

于 2011-09-20T03:33:48.700 回答
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 文件或计算 MD5 的单行程序。(有关软件包,请参见http://cpan.org/ )
  • Perl 本质上与 sed 和 awk 一样简洁。对于像我这样的人(我怀疑还有你),在命令行上快速转换数据是一大福音。Python 对于有效的命令行使用来说太罗嗦了。

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

郑重声明,我不是“一个 Perl 人”。我喜欢它作为瑞士军刀,而不是作为一种宗教。

于 2011-09-20T04:15:51.463 回答
6

我会推荐 sed/awk 以及类似 UNIX 平台上可用的大量其他命令行工具:comm、tr、sort、cut、join、grep 和内置的 shell 功能,如循环和诸如此类。你真的不需要学习另一种编程语言,因为 R 可以处理数据操作,即使不比其他流行的脚本语言更好。

于 2011-09-20T15:56:55.980 回答
3

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

在 python 流行之前,我学习了 perl。我听说过关于 ruby​​ 的好消息,所以您可能想尝试一下。

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

于 2011-09-20T03:42:12.953 回答
1

我同意德克的观点。我也想过同样的事情,也稍微使用了其他语言。但最后我再次感到惊讶,更有经验的用户使用 R. 包喜欢ddplyplyr可能对你非常有趣。话虽这么说,SQL 经常帮助我处理数据

于 2011-09-20T11:16:26.797 回答
1

对于这种类型的处理,我会推荐“awk”。

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

awk 在这项任务上速度极快,而且编程非常简单。

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

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

于 2011-09-20T03:53:21.190 回答