用于清洗数据的Python还是awk/sed
我用R语言来做数据分析,感觉非常不错。不过,清理数据的过程有点麻烦。我在考虑学习另一种更适合这个任务的语言。具体来说,我想找一个工具,可以用来处理原始数据,去掉不必要的变量或观察值,并把数据格式化,以便能轻松加载到R中。数据内容主要是数字和字符串,而不是多行文本。
我在考虑使用awk和sed的组合,还是Python。(我知道Perl也是一个选择,但如果我要学一门完整的语言,Python似乎是更好、更灵活的选择。)
使用sed和awk的好处是学习起来会更快。缺点是这个组合的扩展性不如Python。实际上,如果我学了Python,可能会有一些“任务扩展”的情况出现,这样也没问题,但这不是我的目标。
我还考虑到一个问题,就是处理大数据集的应用。根据我的理解,awk和sed是逐行处理数据,而Python通常会把所有数据加载到内存中。这可能是sed和awk的另一个优势。
还有其他我没想到的问题吗?任何建议都非常感谢。(我加了R标签,方便R用户提供他们的清理建议。)
6 个回答
我建议你使用sed和awk这两个工具,还有很多其他在类UNIX系统上可用的命令行工具,比如comm、tr、sort、cut、join、grep,以及一些内置的shell功能,比如循环等等。其实你并不需要学习另一种编程语言,因为R在处理数据方面的能力和其他流行的脚本语言一样好,甚至更好。
我经常使用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迷”。我喜欢它是因为它像瑞士军刀一样多功能,而不是因为它是一种信仰。
我不想打扰你的探索,但我觉得答案是否定的,原因如下:
- R语言是向量化的,而sed/awk则不是。
- R语言已经支持Perl正则表达式和扩展正则表达式。
- 如果你需要统计功能(比如数据填补),R语言可以更方便地使用这些统计工具。
- R语言可以进行可视化、总结数据等等。
最重要的是:你已经会使用R语言了。
当然,sed/awk在处理小程序或简单的一行代码时非常好,Python也是一门不错的语言。但我建议你还是继续使用R语言。