用于清洗数据的Python还是awk/sed

26 投票
6 回答
5104 浏览
提问于 2025-04-17 02:39

我用R语言来做数据分析,感觉非常不错。不过,清理数据的过程有点麻烦。我在考虑学习另一种更适合这个任务的语言。具体来说,我想找一个工具,可以用来处理原始数据,去掉不必要的变量或观察值,并把数据格式化,以便能轻松加载到R中。数据内容主要是数字和字符串,而不是多行文本。

我在考虑使用awk和sed的组合,还是Python。(我知道Perl也是一个选择,但如果我要学一门完整的语言,Python似乎是更好、更灵活的选择。)

使用sed和awk的好处是学习起来会更快。缺点是这个组合的扩展性不如Python。实际上,如果我学了Python,可能会有一些“任务扩展”的情况出现,这样也没问题,但这不是我的目标。

我还考虑到一个问题,就是处理大数据集的应用。根据我的理解,awk和sed是逐行处理数据,而Python通常会把所有数据加载到内存中。这可能是sed和awk的另一个优势。

还有其他我没想到的问题吗?任何建议都非常感谢。(我加了R标签,方便R用户提供他们的清理建议。)

6 个回答

6

我建议你使用sed和awk这两个工具,还有很多其他在类UNIX系统上可用的命令行工具,比如comm、tr、sort、cut、join、grep,以及一些内置的shell功能,比如循环等等。其实你并不需要学习另一种编程语言,因为R在处理数据方面的能力和其他流行的脚本语言一样好,甚至更好。

10

我经常使用Python和Perl。我对sed比较熟悉,之前也常用awk。偶尔用过R。就数据转换的功能和速度来说,Perl是最好的选择。

  • Perl几乎可以做sed和awk能做的所有事情,而且功能更多。(实际上,Perl自带的a2p和s2p可以把awk和sed的脚本转换成Perl脚本。)
  • 大多数Linux/Unix系统都自带Perl。如果以前没有,那学习sed和awk是有道理的,但现在这个理由已经不成立了。
  • Perl有很多强大的模块,提供的功能远超awk或sed。例如,这些模块可以让你用一行代码反转DNA序列、计算统计数据、解析CSV文件,或者计算MD5值。(可以查看http://cpan.org/获取更多包)
  • Perl的语法和sed、awk一样简洁。对于像我这样的人(我想你也是),在命令行快速转换数据是非常方便的。而Python在命令行使用时显得有点啰嗦。

说实话,我真的想不出为什么有人会选择学习sed和awk而不是Perl。

顺便说一下,我并不是“Perl迷”。我喜欢它是因为它像瑞士军刀一样多功能,而不是因为它是一种信仰。

15

我不想打扰你的探索,但我觉得答案是否定的,原因如下:

  • R语言是向量化的,而sed/awk则不是。
  • R语言已经支持Perl正则表达式和扩展正则表达式。
  • 如果你需要统计功能(比如数据填补),R语言可以更方便地使用这些统计工具。
  • R语言可以进行可视化、总结数据等等。

最重要的是:你已经会使用R语言了

当然,sed/awk在处理小程序或简单的一行代码时非常好,Python也是一门不错的语言。但我建议你还是继续使用R语言。

撰写回答