web-dev-qa-db-ja.com

R vs Pythonデータ分析用

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

私がやっていることはすべて、RまたはPythonのいずれかを使用しており、1つの言語に集中する必要があるかどうか(ある場合はどちらか)、両方を実行するかどうかの提案を探しています。それらはそれぞれ補完しますか?その他?

-私は学校でC#を使用していますが、自習を通してPython)に精通していることを述べておきます。

60
The_Cthulhu_Kid

私はPython(numpyとscipyを含むコースのデータ分析用)とRの両方を隣同士で使用しています。ただし、Rはデータ分析を実行するためだけに使用し、より一般的なプログラミングタスク(コンピューターモデルのワークフロー制御など)にはPythonを使用しています。

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

また、あなたの周りの同僚やあなたの分野の他の人々が何を使っているかを見てみましょう。それらすべてがPythonを使用している場合、それらをより簡単に学び、コードを交換するために、これに固執することは理にかなっています。

免責事項:私はヘビーRを使用しているので、私の意見は偏っている可能性があることに注意してください。さらに、Python + numpyを広範囲に使用していませんが、データ分析をすべて行う同僚を知っています。

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

pps:または this post からのこの引用:

私はすべての研究でRとPythonを使用していますが(必要に応じてRcppまたはCythonを使用)、回避できる場合はCまたはC++での記述は避けたいと思います。 Rは素晴らしい言語です。その主な理由は、ユーザーの信じられないほどのコミュニティーにあります。これは統計学者によって作成されました。つまり、データ分析は言語の核心にあります。これは言語の主要な機能であり、すぐに置き換えられない大きな理由であると私は考えています。 Pythonは、特に関数型プログラミングとオブジェクト指向のブレンドを検討する場合は特に、全体的に優れた言語です。 Scipy/Numpy、Pandas、statsmodelsと組み合わせると、強力な組み合わせになります。しかし、Pythonには、統計学者/数学者の深刻なコミュニティがまだありません。

39
Paul Hiemstra

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

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

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

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

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

最後に、これは表面的なように聞こえるかもしれませんが、Pythonのドキュメントと命名規則(これは忠実に守られていることがわかりました)は、実用的なRのドキュメントよりもはるかに優れていると思います。これは熱心に議論されると思いますが、Pythonで強調されているのは読みやすさです。つまり、Python関数への引数には、読みやすい名前が付けられています。 Rでは、引数名はしばしば切り捨てられます---これはPythonではあまり当てはまりません。これは奇妙に聞こえるかもしれませんが、引数に「x_label」と同じくらい簡単に名前を付けることができる場合(たとえば、1つの例)、「xlab」のようなものを書くのは難しいです-これは、新しいモジュール/パッケージAPI。 R docを読むことは、Linuxのmanページを読むことと似ています-それがあなたのボートを浮かび上がらせるものであるなら、あなたにはより多くの力があります。 Rで何かが機能するかについて質問があるときは、Rのドキュメントを避けますが、Pythonについて混乱しているときは、Pythonドキュメントから始めます。

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

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

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

つまり、Pythonは読みやすさを重視しているため(gooogleで「Pythonic」を検索)、優れた無料のIDEが利用できること、C言語の言語であるという事実、それを活用できる可能性が高いことスキルセット、そしてその言語の総合的なより優れたドキュメントスタイルの場合、Pythonを頼りにし、必要な場合にのみRに依存することをお勧めします。


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

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

これはおそらく間違った質問です。

「この特定のテクノロジーを学ぶべきか」という質問は悪い質問です。どうして?

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

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

[トークタイトル= "Cool New Startupでのディープラーニング"] ... [45分の図とテクノバベルの間にゾーンを切り、電話をチェックします] ...そして、Hadoopクラスターと[Benゾーンのゾーンを実装した後ここでも、ディープラーニングルーチンを実行できます。[ウェイクアップ:これが私が来た理由です!]その詳細はプロプライエタリです。質問?

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

Paco Nathanは、数か月前のオースティンにある1日の長さの「ビッグデータ」会議で、「化学は試験管についてではない」のようなことを述べました。要約すると、データサイエンスはScala、Hadoop、Sparkに関するものではなく、他のテクノロジーデュジャーナルがポップアップするものでもありません。結局のところ、スタックオーバーフローを使用してツールキットを学ぶことに長けている人ではなく、考える人を雇いたいと思っています。

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

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

36
BenDundee

したがって、私は主にMatlabでデータ分析を行いましたが、Python(およびより一般的に使用されるPython)で)いくつかを行い、また私は始めました少しRです。ここでは細かい点に反対し、Pythonを使用することをお勧めします。理由は、統計情報(Rが支配的)またはデジタル信号処理(ここで、 Matlabが支配的です)。

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

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

私はまず、いくつかの論文を見て、彼らがコードを投稿した言語を確認するでしょう。 Rにない場合は、使用しないでください。

12
Nir Friedman

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

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

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

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

多くの言語を学ぶのは良いことです。 Pythonは間違いなく重要な言語ですが、Rもそのドメインに含まれています。しかし、ゴムが科学の道を実際に満たす必要がある場合、FortranとC(および一部のC++)は難しいでしょう変位。

7
John Daschbach

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

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

データ分析と機械学習の場合、要求は確かに、かなりの程度まで、すでに存在している能力を構築して活用することです。より一般的なプログラミングタスクの場合、Pythonには利点があるかもしれません。Pythonの学習に伴う労力を正当化するのに十分なこのタイプの作業を行いますか?

1
John Maindonald