データ分析のためのR vs Python [非公開]


60

私は約1年間プログラミングをしており、データ分析と機械学習に本当に興味があります。私はいくつかのオンラインコースに参加しており、いくつかの本を読んでいます。

私がしていることはすべてRまたはPythonのいずれかを使用しており、1つの言語に集中すべきか(そうであればどの言語に集中すべきか)、または両方を続けるべきかについての提案を探しています。彼らはお互いを補完しますか?

-私は学校でC#を使用しているが、自習を通じてPythonに精通していることに言及する必要があります。


多分興味深いリンクがあります:coursera.org/course/compdata-
ジョルジオ

回答:


39

私はPython(numpyとscipyを含むデータ分析のコース用)とRを隣り合わせに使用します。ただし、データ分析の実行にはRのみを使用し、より一般的なプログラミングタスク(コンピューターモデルのワークフロー制御など)にはPythonを使用します。

基本的な操作、たとえば配列とソートの操作に関しては、RとPython + numpyは非常に類似しています。Rに利点があるのは、統計関数の非常に大きなライブラリです。さらに、matplotlibはggplot2ほど優れているようには見えませんが、matplotlibをあまり使用していません。さらに、最初に1つの言語に焦点を当て、その詳細に精通します。ソフトウェアエンジニアリングではなく、データ分析に主に興味があるようです。私はRを選んでそれに固執するでしょう。とはいえ、Python + numpy + scipy + scikitを選択することは間違いなく素晴らしい選択だと思います。Rがもう少し優れていると感じるだけです。

また、あなたの同僚やあなたの分野の他の人々が使用しているものをあなたの周りを見てみるでしょう。彼らがすべてPythonを使用している場合、たとえばPythonを使用している場合は、Pythonからより簡単に学習してコードを交換するためにPythonを使用するのが理にかなっています。

免責事項:私はヘビーRユーザーなので、私の意見は偏っている可能性がありますが、可能な限り客観的な回答を維持しようとしました。さらに、Python + numpyを広範囲に使用したことはありませんが、すべてのデータ分析を行う同僚を知っています。

ps:このリンクは興味深いかもしれません:http : //seanjtaylor.com/post/39573264781/the-statistics-software-signal

pps:またはこの投稿からの引用:

私はすべての研究にRとPythonを使用します(必要に応じてRcppまたはCythonを使用)が、できればCまたはC ++で書くことは避けたいです。Rはすばらしい言語であり、その大部分はユーザーのすばらしいコミュニティです。統計学者によって作成されました。つまり、データ分析は言語の中心に位置します。これはこの言語の大きな特徴であり、すぐに置き換えられない大きな理由だと思います。Pythonは一般に、全体的な言語として優れています。特に、関数型プログラミングとオブジェクト指向の融合を検討する場合はそうです。Scipy / Numpy、Pandas、およびstatsmodelsと組み合わせて、これは強力な組み合わせを提供します。しかし、Pythonにはまだ統計学者/数学者の真剣なコミュニティが欠けています。


3
RがPythonよりも強力であるとすると、Python + numpy / blaze + scipy、または単純なPython を意味しますか?
9000

5
Python + numpy yesを意味します。そうしないと、選択がさらに簡単になります。基本的な操作、たとえば配列とソートの操作に関しては、RとPython + numpyは非常に類似しています。Rに利点があるのは、統計関数の非常に大きなライブラリです。さらに、matplotlibはggplot2ほど優れているようには見えませんが、matplotlibをあまり使用していません。
ポールヒエムストラ

とはいえ、Python + numpy + scipy + scikitを選択することは間違いなく優れた選択だと思います。Rがもう少し優れていると感じるだけです。
ポールヒエムストラ

@PaulHiemstra-コメントでいくつかの良い点を挙げて、おそらくあなたの答えを改善するでしょう-質問が再び開かれ、その機会があれば。
psr

@psrコメントで編集しました。編集したい場合、質問を開く必要はないようです(編集できるのは私だけかもしれません...)。
ポールヒエムストラ

36

背景:私はオースティンのスタートアップのデータサイエンティストであり、大学院(物理学)出身です。データ分析には日々Pythonを使用していますが、Rは少し使用しています。また、C#/。NETとJava(ほぼ毎日)を使用し、大学院ではC ++を多用しました。

Pythonを数値に(Rを超えて)使用する際の主な問題は、ユーザーコミュニティのサイズだと思います。この言語は永遠に存在しているので、多くの人があなたがやりたいと思うことをしました。これは、困難な問題に直面したときに、パッケージをダウンロードして作業を開始できることを意味します。そして、Rは「機能します」:データセットを与えると、どの要約統計量が役立つかがわかります。あなたはそれにいくつかの結果を与え、あなたが望むプロットを知っています。作成したいすべての一般的なプロットがあり、ウィキペディアで調べる必要があるかなり難解なプロットもあります。scipy / numpy / pandas / statsmodels / etc。Python用であり、R標準ライブラリのレベルではありません。

Rに対するPythonの主な利点は、PythonがCファミリの実際のプログラミング言語であることです。簡単に拡張できるため、サンドボックスにあるものはすべて本番環境で使用できると考えられます。Pythonにはオブジェクト指向が組み込まれていますが、Rとは対照的に、後付けのように感じられます(そうであるため)。Pythonがうまく機能する他の機能もあります。スレッド化と並列処理は非常に簡単です。Rでそれが当てはまるかどうかはわかりません。Pythonを学習することで強力なスクリプトツールも提供されます。また、Python用の本当に良い(無料の)IDEもあります。支払ってもよい(100ドル未満)場合はもっと良いIDEがあり、これがRに当てはまるかどうかはわかりません。私の経験では、R Studioはかなり優れていますが、PyDev + Eclipseほど優れていません。

これをちょっとキッカーとして追加します。まだ学校に通っているので、仕事について考えるべきです。高度なスキルを持つR開発者よりも、高度なスキルを持つPython開発者の方が多くの求人情報を見つけることができます。オースティンでは、Django開発者の仕事は、まるで空から落ちているようなものです。Rを非常によく知っている場合、そのスキルを活用できる場所がいくつかありますが(たとえば、Revolution Analytics)、多くのショップがPythonを使用しているようです。データ分析/データサイエンスの分野でさえ、より多くの人がPythonに目を向けているようです。

また、Javaを(たとえば)しか知らない人と一緒に仕事をすることを過小評価しないでください。それらの人々はあなたのPythonコードを非常に簡単に読むことができるでしょう。Rですべての作業を行う場合、これは必ずしも当てはまりません。(これは経験に基づいています。)

最後に、これは表面的に聞こえるかもしれませんが、Pythonのドキュメントと命名規則(宗教的に守られていることが判明しました)は実用的なR docよりもはるかに優れていると思います。これは熱く議論されると思いますが、Pythonの重要性は読みやすさです。つまり、Python関数への引数には読み取り可能な名前があり、それは何かを意味します。Rでは、引数名はしばしば切り捨てられます---これはPythonではあまり当てはまりません。これはつまらないように聞こえるかもしれませんが、引数 'x_label'(ほんの一例)に簡単に名前を付けることができる場合、 'xlab'のようなものを書くことに夢中になります---これは、新しいモジュール/パッケージAPI。R docを読むことは、Linuxのマニュアルページを読むようなものです。それがあなたのボートに浮かぶものであるなら、あなたにとってより大きな力になります。

言われていることはすべて、次のことをお勧めします(これも私の典型的なワークフローです)。Pythonを知っているので、それを最初のツールとして使用してください。Pythonが不足していることがわかったら、必要なことを行うのに十分なRを学習してから、次のいずれかを実行します。

  1. Rでスクリプトを記述し、サブプロセスモジュールを使用してPythonから実行するか、または
  2. RPyモジュールをインストールします。

Pythonが得意なものにPythonを使用し、上記のいずれかでギャップを埋めます。これが私の通常のワークフローです---私は通常、物事をプロットするためにRを使用し、面倒な作業にはPythonを使用します。

要約すると、Pythonは可読性に重点を置いているため(「Pythonic」の検索グーグル)、優れた無料のIDEの可用性、Cファミリーの言語に含まれているという事実、大文字を使用できる可能性が高いスキルセット、および言語の総合的で優れたドキュメンテーションスタイル、Pythonを頼りにし、必要な場合にのみRに依存することをお勧めします。


わかりました、これは(これまでに)スタックサイトでこれまでで最も人気のある回答であり、#1でもありません:)これが道に沿った少数の人々を助けることを願っています。

とにかく、私はこの分野で数年過ごした後、次の結論に達しました。

これはおそらく質問するのが間違っている質問です。

「この特定の技術を習得すべきか」と尋ねることは悪い質問です。どうして?

  1. 技術の変化。常に別の技術を学ぶ必要があります。Twitterで仕事に行くと、彼らはScalaを実行します。いくつかの場所はPythonショップです。気にしない場所もあります。特定の技術を知っている、または知らないので、雇用されることはありません。新しい技術を学べない場合、解雇することができます(解雇されるべきです)。新しいパイプレンチが出てきて、あなたが配管工で、新しいパイプレンチがどのように機能するかわからない場合は、おそらくかなりお粗末な配管工です。
  2. 「この技術を習得しますか」または「実際の問題を解決するのにより多くの時間を費やしますか」という選択肢がある場合、例外なく常に後者を選択する必要があります。

データサイエンティストとしての仕事は、問題を解決することです。その知恵のほんの一部は、あなたが行くすべての会議や会合でほとんど常に失われます-私が今まで見たすべての「ビッグデータ」の話は、問題の解決ではなく技術に焦点を合わせてきました。実際の問題解決は通常、最後にいくつかのスライドに委ねられます。

[講演タイトル=「Cool New Startupでのディープラーニング」] ... [45分間のダイアグラムとテクノバベルの間にゾーンアウトして電話をチェックする] ...そして、Hadoopクラスターと[ベンゾーンアウト]を実装した後もう一度]ディープラーニングルーチンを実行できます。[ウェイクアップ:これが私が来た理由です!] ご質問は?

これは、この分野が技術に関するものであるという悪い印象を与えますが、それは真実ではありません。Scala、Python、またはRが得意であるが、問題の解決が得意でない場合は、データサイエンティストがお粗末になります

Paco Nathanは数か月前の1日間の「ビッグデータ」カンファレンスでオースティンにいましたが、「化学は試験管ではない」と言っていました。つまり、データサイエンスはScala、Hadoop、Spark、またはその他のTech-Du-Jourがポップアップすることに関するものではありません。結局のところ、Stack Overflowを使用してツールキットを習得している人ではなく、考える人を雇いたいのです。

同様に、就職の面接に行き、プログラミング言語を知らないという理由だけで彼らがあなたを雇わない場合、その会社はうんざりします。彼らは「データサイエンティスト」が何を意味するのか理解していないので、うまくいかなかった方が良いでしょう。

最後に、問題解決能力が限界的である場合(自分に正直であること)、または単にテクノロジーの側面を楽しんでいる場合、またはテクノロジーを学ぶことが本当に好きな場合(正直に言うと)、多くのテクノロジーを学びます。スキルセットに合った「データエンジニア」タイプの役割をいつでも見つけることができます。これは悪いことではありません。データエンジニアは車輪にグリースを塗り、データサイエンティストとしての仕事を行えるようにします。(違いは、ソフトウェアアーキテクトと開発チームに似ています。)


3
ただし、トレーディングフロアで作業していて、ヘッドトレーダーがcsvのオプション価格で私のところに来て、対数線形分布でフィットさせ、平均と標準偏差を取り戻してほしいと言ったとします。 Pythonも検討しません。Rでこれを行うのは3行のコードのようだと思います
。-ベンダンディー

12

だから、私は主にMatlabでデータ分析を行いましたが、Pythonでいくつかを行い(そして一般的にはPythonをより多く使用しました)、Rを少し始めました。ここで穀物に反して、使用することをお勧めしますPython。理由は、統計(Rが支配的)やデジタル信号処理(Matlabが支配的)ではなく、機械学習の観点からデータ分析を行うためです。

機械学習と統計の間には明らかに重い重複があります。しかし、重複はアイデンティティではありません。Machine Learningは、私がRに実装したくないCSのアイデアを使用します。確かに、Rで最小スパニングツリーを計算できます。しかし、それはmayい混乱のように見えるかもしれません。機械学習の人は、ハッシュテーブル、バイナリ検索ツリーなどに簡単にアクセスできると想定します。基本的にドメイン固有の言語であるものを一般的なプログラミング言語に靴べらしようとするよりも、必要に応じて統計アルゴリズムを新たに実装する方が簡単です。

データ分析に対するPythonの副次的な利点も非常に高くなります。スクリプトを処理したり、より大きなアプリケーションを作成したりすることができる、実際のプログラミング言語を同時に学習します。Rは統計コミュニティのニッチな言語であり、Matlabでさえはるかに広く使用されています。

最初にいくつかの論文を見て、どの言語でコードを投稿しているかを見ると思います。Rにない場合は、使用しないでください。


1
どうもありがとうございました。私は間違いなくMLの側面に興味があります。
The_Cthulhu_Kid

1
ちょっとした補遺:Rも何らかの方法でこれを行うことができると確信していますが、Pythonは最小限のオーバーヘッドでCythonを使用してCを呼び出すか、関数をCにコンパイルできることで有名です。そのため、通常は少ない労力で高速化することができますが、これは実際のデータを見るための主要な考慮事項です。もう1つの(最後の)エキゾチックなメモ:Javaには、非常に優れた機械学習ライブラリ(WEKAなど)があります。ただし、クールなのは、Jythonを使用してPythonからもこれらを呼び出すことができることです:
Nir Friedman

7

これらのツールの多くを使用し続けている古い学校(50歳以上)の科学者として、2セントを追加します。私は、ささいな一回限りのデータ分析ジョブから世界のスーパーコンピューターの一部を支配するコードまで、Fortranですべてのコードを記述する同僚と協力してきました。最近のFortran方言(F90、F95、F2003、F2008)はIMHOであり、現存する最高の設計言語の一部です。高性能コンピューティングの数十年の経験により、非常に印象的な言語開発が行われました。

私は時々Pythonを使用しただけで、それを(主にSageが原因で)再訪しますが、私にとってはうまく機能する時間テスト済みの言語スイートを使用します。Fortran、C、Perl、R、およびScheme(VMDスクリプト用のtclを使用)。RとFortranとCの組み合わせは非常に快適だと思います。Rのオブジェクトモデルについて行われた他のコメントとは対照的に、一般的な関数とメソッドディスパッチのCLOSコンセプトに基づいて、インタラクティブな作業に適したオブジェクトモデルです。新しいパッケージをインタラクティブに使用する場合、生産性を高めるために「印刷」や「プロット」などの汎用機能に依存することがよくあります。

FortranとCのAPIは非常に使いやすいです。モデリングとデータ分析のためにFortranとCで作業することに慣れていれば、これは大きなプラスです。Rコードを動的に生成して評価する機能は、LispおよびCのマクロシステムほどクリーンではありませんが、動的データセットを処理する場合に非常に役立ちます。

実際のデータに対するRの制限には、値による呼び出しアプローチが含まれます。値による呼び出しにはCSの理由がありますが、大きな数値データを使用した実際のプログラミングには、何らかの形式の参照による呼び出しが必要です(古いコードのFortran共通ブロックまたは新しいコードのモジュールデータの重要性に注意してください)。この点で、PDL(Perl Data Language)で採用されているアプローチは特にエレガントです。(コピーを要求しない限り、Pdlは基本的に参照渡しです。Sub-pdlは、FortranやCが提供するよりもはるかに簡潔な構文で、親pdlのサブセクションを参照します)。

多くの言語を学ぶのは良いことです。Pythonは間違いなく重要な言語ですが、Rも同様にその領域にあります。しかし、ゴムが科学の道を本当に満たす必要がある場合、FortranとC(および一部の場合はC ++)を置き換えるのは難しいでしょう。


1

Rの主要な機能は、プログラミング言語であると同時に、パッケージのライブラリであることです。すべてのパッケージ作成者は、原則として、他のすべてのパッケージにあるものにアクセスできます。これにより、再発明、再文書化、再学習の必要性が劇的に減少します。これは、パッケージ作成者とユーザーの両方に適用されます。もちろん、このインフラストラクチャにはコストがかかります。パッケージの作成者は、時間の経過とともにますます細かくなる標準に対応する必要があります。これのいくつかは、ユーザーが遭遇するものに溢れるかもしれません。

私が理解しているように、Pythonにはパッケージ管理システムがありません。Rの包括的Rアーカイブネットワーク(http://cran.r-project.org)に相当するものはなく、Rタスクビュー(http://cran.csiro.au/web/views/)に直接相当するものはありません。したがって、Rの場合はそうではありませんが、すでに利用可能なものを構築するための共同体の努力の一部としてではなく、自分自身で作業するプログラマーのためのツールです。

データ分析と機械学習の場合、すでに導入されている能力を基に構築し、それを活用することが非常に大部分必要です。より一般的なプログラミングタスクの場合、Pythonには利点があります。Pythonの学習に伴う労力を正当化するのに十分なこの種の作業を行いますか?


3
Pythonには、pipと呼ばれるパッケージ管理システムがあります。これは標準ライブラリの一部ではありませんが、Python 3.4以降の標準Pythonに同梱され、来月(2014年3月)にリリースされます。
コーディピアソール14

2
総合的RアーカイブネットワークのPythonの同等では、PyPIです:pypi.python.org/pypi
ウィルフレッド・ヒューズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.