2011-09-20 15 views
24

私はデータ分析のためにRを使用しており、とても満足しています。しかし、データのクリーニングは少し楽になるかもしれません。私はこの仕事に適した別の言語を学ぶことを考えています。具体的には、未加工のデータを取り込み、不要な変数や観測結果を取り除き、Rで簡単に読み込むために使用するツールを探しています。コンテンツは、複数行のテキストではなく、数値データと文字列データです。データを掃除するためのPythonまたはawk/sed

私はawk/sedの組み合わせとPythonを考えています。 (私はPerlも別の選択肢であると認識していますが、別の完全な言語を学ぶなら、Pythonはより良い、より拡張性のある選択肢です。学ぶために。欠点は、この組み合わせがPythonほど拡張性がないことです。確かに、もし私がPythonを学んだとすれば、私はいくつかの "mission creep"を想像するかもしれないが、これはうまくいくだろうが、私の目標ではない。

私が持っていたもう一つの考慮点は、大きなデータセットへのアプリケーションです。私が理解しているように、awk/sedは行単位で動作しますが、Pythonは通常、すべてのデータをメモリに格納します。これはsed/awkのもう一つの利点かもしれません。

他にも欠けている問題がありますか?あなたが提供できるアドバイスは高く評価されます。 (私はRのユーザーが自分のクリーニング勧告を提供するためのRタグを含む。)

+0

"クリーニング"とは、異常値をクリッピングすること、または一貫性を回復することなどです。 「データ」とは、数字や文字列、あるいは単にテキストのことです。現在の質問のこの目標はあまりにも一般的です。 – nye17

+0

@ nye17、あ​​いまいさには申し訳ありません。私は少し詳細を追加しました。 – Charlie

+2

私は主にpythonを自分で使っていますが、Rのデータインターフェイスとして機能するテキストベースのデータセットを純粋に操作していた場合は、強力な正規表現と柔軟性のあるテキストを扱うことを強くお勧めします。 – nye17

答えて

15

は、あなたの冒険を台無しにしないように、私はノーと言うと、ここに理由であると思います:

  • Rがベクトル化された場合のsed/awkのRはすでにPerlの正規表現と拡張正規表現
  • Rの両方を持っている
  • でないことは、より簡単にあなたがそれを必要とする場合
  • Rは...、要約、
  • を可視化することができ、統計ルーチン(たとえば、帰属)に頼ることができます

そして最も重要なのはあなたはすでにRを知っています。

もちろん、sed/awkは小さなプログラムや1ライナーですばらしいと言われています。Pythonは素晴らしい言語です。しかし、私はRに固執することも考えています。

+4

私は彼がRを落とすことを考えているとは思わないが、それを補う。 – Karl

3

私は、pythonやperlやrubyのようなデータファイルを処理するための適切な言語で短期間のsed/awkソリューションを長期間投資することをお勧めします。私は、すべてのデータアナリストが少なくとも3つの言語を必要としていると思います。私は多量の計算にはCを使用し、データファイルの処理にはperlを使用し、インタラクティブな分析やグラフィックスにはRを使用します。

私はpythonが普及する前にperlを学びました。私はルビーに関する素晴らしいことを聞いたので、代わりにそれを試してみてください。

これらのいずれの場合でも、ファイルごとに行単位で作業することができます。 pythonはあらかじめ完全なファイルを読む必要はありません。

+2

確かに、 'C++はCよりも優れたCであるかもしれませんが、同様に、PythonのファンはPerlよりも優れていると主張しています。しかし、一般的なルールとして、 'R​​、* a *スクリプト言語と*現代的なコンパイル言語*'が良いレシピであることを知っています。 –

+0

@DirkEddelbuettel実際、私は90年代後半にプログラミングに就いていました。私は学生が私にFortranのプログラマーを見る方法を見させることを恐れる。 – Karl

1

このタイプの処理には 'awk'をおすすめします。

おそらく、単純なテキストファイルで無効な観測を検索/拒否しているだけです。

awkはこのタスクでは高速であり、プログラミングは非常に簡単です。

さらに複雑な操作を行う必要がある場合は、可能です。

パフォーマンスヒットに気をつけなければ、Pythonも可能です。 "rpy"ライブラリはPythonとRコンポーネントを密接に統合するために使用できます。

10

私はPythonとPerlを定期的に使用しています。私はかなりうんざりしていて、かつてawkをたくさん使いました。私はフィット感と拍手でRを使用しました。 Perlは、データ変換機能と速度の点で最高です。

  • Perlは本質的にsedとawkができるすべてのことを行うことができますが、さらに多くのことができます。 (実際には、perlに付属のa2pとs2pはawkとsedスクリプトをPerlに変換します。)
  • PerlはほとんどのLinux/Unixシステムに含まれています。それがそうでなかったとき、sedとawkを学ぶ正当な理由がありました。その理由は長く死んでいる。
  • Perlには、awkやsedから得られるよりもはるかに強力なモジュールが豊富に用意されています。たとえば、これらのモジュールは、補完DNA配列の解析、統計の計算、CSVファイルの解析、またはMD5の計算を行う1ライナーを有効にします。 (パッケージの場合はhttp://cpan.org/を参照してください)
  • Perlは本質的にsedとawkのように簡潔です。私のような人たち(そして私はあなただと思う)にとっては、コマンドライン上のデータをすばやく変換することは大きな利点です。 Pythonはコマンドラインを効率的に使用するにはあまり意味がありません。

正直なところ、私はPerlの上でsedとawkを学ぶ理由を考えるのに迷っています。

私は「Perlの男」ではありません。私は宗教としてではなく、スイス軍ナイフのようにそれを好きです。

+2

公正なコーディングの背景とのスルー比較のため+1。 – nye17

+0

+1 for Perl。 Pythonは読みやすくなるかもしれませんが、Perlはいつでも速度とコンパクトさを打ち破ります。そして、コマンドラインオプションは確かに祝福です。 –

+0

「すべてのUnixシステムにPerlがあります」という引数は、sedとawkにさらに多く適用され、Windozeで作業するために必要な場合には、これらの2つのほうがより簡単です。そしてチャーリーが明らかにWindows上でRを持っているように私は私の「ちょうどRを使う」に戻ってくる。私は多くのデータフィルタをPerlで書いていましたが、Rに完全に切り替えました。 –

1

私はDirkに同意します。私は同じことを考え、他の言語も少し使いました。しかし、最終的には、経験豊富なユーザーがddplyplyrのようなR. Packagesで行うことは、あなたにとって非常に面白いかもしれません。 、COMM、TR、ソート、カット、参加、grepを:それは、SQLは、私はUNIX-同様のプラットフォームで利用可能な他のコマンドラインツールのと一緒に/ awkはsedの勧めしばしば

6

データジャグリングで私を助けたとされていますルーピングやその他のようなシェル機能が組み込まれています。 Rは他の一般的なスクリプト言語よりも優れていないとしても、データ操作を扱うことができるので、実際には別のプログラミング言語を学ぶ必要はありません。

+0

ジェフは良い点を持っています。パイプと一緒に接着すると、彼が言及したようなコマンドラインツールは、非常に高速で強力なスライスとダイシングを可能にします。 Perlはこれらのツールの多くを補完するものではなく、補完します。要約については、GNU coreutilsのマニュアル(http://www.gnu.org/s/coreutils/manual/html_node/index.html)を参照してください。 – Reece

+0

さらに良いことに、JeffとDirkのlittlerパッケージの素晴らしい "r"バイナリを使うと、Rは同じパイプで再生できます。 Rを使用するに戻る: –

+0

質問者はプラットフォームを指定していませんが、これはWindows上にいる人口の大半にとってはあまり適していない可能性があります。 UnixツールのWindows環境への移行には問題はありませんでした。 – user287424