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

时间:2011-09-20 03:13:41

标签: python r awk sed data-cleaning

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

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

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

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

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

6 个答案:

答案 0 :(得分:15)

不要破坏你的冒险,但我会说不,这就是原因:

  • R是矢量化的,其中sed / awk不是
  • R已经同时具有Perl正则表达式和扩展正则表达式
  • 如果你需要,R可以更容易地求助于统计程序(比如说,估算)
  • R可以想象,总结,......

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

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

答案 1 :(得分:10)

我经常使用Python和Perl。我知道sed相当好,曾经使用过很多awk。我已经使用了R in fit和spurts。 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 over Perl。

为了记录,我不是"一个Perl家伙"。我喜欢它作为瑞士军刀,而不是宗教。

答案 2 :(得分:6)

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

答案 3 :(得分:3)

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

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

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

答案 4 :(得分:1)

我建议'awk'进行此类处理。

据推测,您只是在简单的文本文件中搜索/拒绝无效的观察结果。

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

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

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

答案 5 :(得分:1)

我同意Dirk的观点。我想到了同样的事情,并且也使用了其他语言。但最后我再次感到惊讶的是,更有经验的用户使用R.对ddplyplyr这样的包可能会非常有趣。据说SQL经常帮助我处理数据杂志