多くのチュートリアルまたはマニュアルでは、物語は、Rとpythonが分析プロセスの補完的なコンポーネントとして共存していることを暗示しているようです。しかし、私の訓練を受けていない目には、両方の言語が同じことをしているようです。
ですから、私の質問は、2つの言語に本当に特化したニッチがあるのか、それともどちらを使用するのかが個人的な好みなのかということです。
多くのチュートリアルまたはマニュアルでは、物語は、Rとpythonが分析プロセスの補完的なコンポーネントとして共存していることを暗示しているようです。しかし、私の訓練を受けていない目には、両方の言語が同じことをしているようです。
ですから、私の質問は、2つの言語に本当に特化したニッチがあるのか、それともどちらを使用するのかが個人的な好みなのかということです。
回答:
それらは補完的です。両方が同じことを行うことができるのは事実ですが、ほとんどの言語でこれを言うことができます。それぞれに長所と短所があります。一般的な見方では、Pythonはテキストの分析だけでなく、データの収集と準備にも最適であると思われます。Rは何よりもまず統計的な言語であるため、データ分析に最適と考えられています。
Rには思いつく限りのパッケージがたくさんありますが、その基本は統計分析です。基本的なカイ2乗から因子分析、ハザードモデルまで、簡単で堅牢です。統計の最大の名前のいくつかはRパッケージを作成し、あらゆるニーズを支援する活発なコミュニティを持っています。ggplot2
データの視覚化の標準です(グラフなど)。Rはベクトル化された言語であり、データを効率的にループするように構築されています。また、すべてのデータを両刃の剣であるRAMに保存します-小さいデータセットではきびきびしています(一部の人は私と反論するかもしれませんが) 、などff
)。
Pythonは、特にプログラミングの経験がある人にとっては、Rよりも学習がかなり簡単です。Rはただ...変です。Pythonはデータ取得に優れており、Webスクレイピングに使用する言語です(すばらしいbeautifulsoup
)。Pythonは、文字列の解析とテキスト操作の強さで知られています。pandas
データ操作、マージ、変換などのための優れたライブラリであり、高速です(おそらくRに触発されています)。
Pythonは、プログラミングが必要な場合に最適です。これは汎用言語であるため、驚くことではありません。ただし、Rはすべての拡張機能を備えており、統計学者のために統計学者によって作成されました。したがって、Pythonは多くのアプリケーションでより簡単でより良く、より速くなる可能性がありますが、Rは統計分析の頼れるプラットフォームになります。
data.table
R のパッケージは、大規模なデータセットを効率的に処理し、分散処理にうまくプラグインすることを特に目的としています。
data.table
; また、私は言って満足しているrvest
最もこするタスクを処理するための優れたツールであり、より多く立ち上がっが容易とランニングbeautifulsoup
両方を使用する人として、データサイエンス/統計/データ分析などのために2つの言語が作用する主要なポイントに触れる回答を作成しようとします。
データ分析のワークフローは通常、次の手順で構成されます。
時間の99%は、データを取得するプロセスは、SQLやインパラデータベースのいくつかの並べ替えを問い合わせるまで来る:両方のPythonとRは等しくよく(時間がない中で仕事をすると、特定のクライアントやライブラリを持ってRImpala
、RmySQL
R用およびMySQLdb
Pythonのためにスムーズに機能しますが、追加することはあまりありません)。外部の.csvファイルの読み取りdata.table
に関しては、Rのパッケージは、fread
カスタム解析オプションを使用して巨大で複雑な.csvファイルをすぐに読み取り、結果を列名と行番号を持つデータフレームに直接変換する機能を提供します。
単一のエントリ、行、または列に簡単にアクセスできるように、データを何らかの種類のテーブルに保存する必要があります。
Rのパッケージには、data.table
データを、ラベル付け、名前の変更、削除、およびアクセスするには、他社の追随を許さない方法を提供しています。標準の構文は非常にSQLに似たようでdt[i, j, fun_by]
、それがあることを意図していますdt[where_condition, select_column, grouped_by (or the like)]
。カスタムのユーザー定義関数をj
句と同様にそこに配置できるため、データを操作したり、グループやサブセットに複雑な関数やファンシー関数を自由に適用したりできます(i番目の行、k番目の列全体の標準偏差がwhat-it-isであり、最後の列でグループ化されている場合にのみ、(i-1)番目の行の(k-2)番目の要素に加算します)。見ていベンチマークをして、この他の驚くべきではSOの質問。列と行の並べ替え、削除、名前の変更は必要な処理を行い、標準のベクトル化されたRメソッドapply, sapply, lapply, ifelse
は、各要素をループすることなく、列とデータフレームに対してベクトル化された操作をすべて実行します(Rでループを使用しているときは、ひどく間違っている)。
Pythonのカウンターウェポンはpandas
ライブラリです。最終的には、pd.DataFrame
データを(何らかの理由ではなく)データフレームとして扱う構造(標準のPythonにはまだ何らかの理由で私が知らない)を提供しますnumpy array, numpy list, numpy matrix
。グループ化、名前の変更、並べ替えなどの操作を簡単に実行できます。ここでも、ユーザーはPython apply
またはを使用して、グループ化されたデータセットまたはフレームのサブセットにカスタム関数を適用できますlambda
。私は個人的に文法df[df.iloc(...)]
にエントリにアクセスすることを嫌いますが、それは個人的な趣味であり、まったく問題ありません。グループ化操作のベンチマークは、Rよりもやや劣りdata.table
ますが、コンパイルに0.02秒を節約する場合を除き、パフォーマンスに大きな違いはありません。
Rの文字列を処理する方法は、使用することですstringr
空白または簡単に同様の末尾、任意のテキスト操作、アナグラム、正規表現を可能にするパッケージを。また、JSON辞書をアンパックしてその要素をリストから外すJSONライブラリと組み合わせて使用することもできます。そのため、UTF8以外の文字や空白なしで、列名と要素が必要な最終データフレームが得られます。そこで。
PythonのPandas .str.
は、正規表現、トレーリング、または競合他社と同じように遊ぶという同じ仕事をしているので、ここでも味に大きな違いはありません。
私の意見では、2つの言語の違いはここにあります。
R現時点では、ユーザーが基本的に1行から2行のコードで必要なことを何でも実行できる無敵のライブラリセットがあります。標準の関数または多項式回帰は、1行で実行され、対応する信頼区間とp値分布を伴う係数が簡単に読み取れる出力を生成します。同様に、クラスタリング、ランダムフォレストモデル、デンドグラム、主成分分析、特異値分解、ロジスティック近似など。上記のそれぞれの出力は、係数とパラメーターの色とバブルを使用して、たった今したことの視覚化を生成する特定のプロットクラスを伴う可能性が最も高いです。仮説検定、統計検定、シャピロ、
Pythonはに追いつくためにしようとしているSciPy
とscikit-learn
。ほとんどの標準分析とモデルも利用できますが、それらはコーディングがやや長く、読むのが直感的ではありません(私の意見では)。より複雑な機械はありませんが、一部は既存のライブラリのいくつかの組み合わせにまでさかのぼることができます。RよりもPythonで行うことのほうが好きなことの1つは、2グラム、3グラム、および高次の語彙テキスト分析です。
両方の言語には美しいプロットツールがあり、Rはggplot2
何よりもPythonに相当します。あまり競争する必要はありませんが、彼らは仕事を安全かつ健全に行いますが、結果を提示する場合は他のツールを使用する必要があるかもしれないと信じています-そこには派手なカラフルなデザインツールがあり、PythonもRも派手な赤と緑のドラッグアンドドロップの聴衆。Rは最近、そのshiny app
機能に関する多くの改良点を公開しました。これにより、基本的にインタラクティブな出力を生成できます。私はそれを学びたかったことはありませんでしたが、私はそれがそこにあり、人々がそれを上手に使うことを知っています。
補足として、2つの言語の主な違いは、Pythonがコンピューターサイエンス、移植性、展開などによって作成された汎用プログラミング言語であるということです。それは何をするのかが素晴らしく、学ぶのは簡単です。pythonが嫌いな人はいません。しかし、プログラミングを行うのはプログラミング言語です。
R、一方で、数学者、物理学者、統計学者、データ科学者によって、そしてそれらのために発明されました。その背景から来た場合、統計と数学で使用される概念を完全に反映して再現するため、すべてが完全に理にかなっています。しかし、代わりに、コンピューターサイエンスのバックグラウンドから来て、JavaまたはR in Cをシミュレートしたい場合、失望するでしょう。標準的な意味での「オブジェクト」はありませんが(そうですが、一般的に考えているものではありません...)、標準的な意味でのクラスはありません(まあ、そうではありますが、通常はありません)彼らはそうだと思う...)、それは「ポインタ」または他のすべてのコンピュータサイエンス構造を持っていません-それがそれらを必要としないという理由だけで。最後になりましたが、少なくとも:ドキュメントとパッケージの作成と読み取りは簡単です(Rstudioを使用している場合)。大きくて情熱的なコミュニティがあり、Googleに「Rにinsert-random-problemを行う方法」という文字通り5秒かかります。 、 あっという間に。
ほとんどの産業企業は、Python(またはPythonに優しい環境)で構築されたインフラストラクチャを使用して、Pythonコードを簡単に統合できます(import myAnalysis
どこでも、基本的に完了です)。ただし、最新のテクノロジー、サーバー、またはプラットフォームは、問題なく簡単にバックグラウンドRコードを実行します。
Pythonは一般的なプログラミング言語です。そのため、データ分析に加えて他の多くのタスクを実行するのに適しています。たとえば、実稼働サーバーでのモデルの実行を自動化する場合、pythonは本当に良い選択です。他の例には、データを読み取るためのハードウェア/センサーへの接続、データベース(JSONなどのリレーショナルデータまたは非構造化データ)との対話、データの解析、ネットワークプログラミング(TCP / IP)、グラフィカルユーザーインターフェイス、シェルとの対話などが含まれます(まあ、なぜデータ科学者は、予測モデルとはほとんど関係のない、こうした種類のタスクをこれほど多く行いたいと思うのでしょうか?人々は異なる定義を持っていると思います。一部の組織では、データを解析してダッシュボードで記述分析を行うことはビジネスに十分であり、予測モデルを行うにはデータが十分に成熟していません。一方、多くの小規模企業では、データサイエンティストが多くのソフトウェアエンジニアリングを行うことを期待する場合があります。Pythonを知ることで、他のソフトウェアエンジニアから独立させることができます。)
Rには、PythonやMATLABよりもはるかに優れた統計パッケージが多数あります。Rを使用すると、実装の詳細レベルではなく、モデルレベルで考えることができます。これは、統計モデルの開発において大きな利点です。たとえば、多くの人がPythonでニューラルネットワークを手動で実装しています。そのような作業を行うと、ニューラルネットワークが機能する理由を理解するのに役立たないかもしれませんが、レシピに従って他の作業を複製し、機能するかどうかを確認するだけです。Rで作業している場合、実装の詳細ではなく、モデルの背後にある数学に簡単に集中できます。
多くの場合、人々はそれらを一緒に使用します。Pythonでソフトウェアを構築するのは簡単です。Rではモデルを構築する方が優れています。紙ではなく実稼働でモデルを提供する場合は、両方が必要になる場合があります。会社に多くのソフトウェアエンジニアがいる場合は、さらにRが必要になる可能性があります。また、会社に多くの研究科学者がいる場合には、さらにPythonが必要になる場合があります。
scikit-learn
? scikit-learn.org/stable
すべてのストライプのプログラマーは、言語の選択がどれほど文化的であるかを過小評価しています。Node.jsのようなWeb開発者。Pythonのような科学者。Javascriptの流動性とJavaの剛性をすべて同じように処理できる多言語ソフトウェアエンジニアとして、これらの言語がお互いの仕事に悪い本質的な理由はないことに気付きました-膨大な量のパッケージ、ドキュメント、コミュニティ、書籍、など。
(本質的な理由から、1つのランダム言語は他の言語よりも優れています。この回答に対する今後のコメントを参照してください。)
私の個人的な予測では、PythonはRができることすべてを行うことができるため、またはむしろRができることを十分に行うことができるため、Pythonが未来の方法であり、ギャップを埋めるためにはるかに優れたソフトウェアエンジニアリング言語です。ソフトウェアエンジニアリングは、以下を扱う分野です。
さらに率直に言って、Pythonの方が簡単に習得できます。
科学者や統計学者は、彼らが優れたソフトウェアエンジニアリングの実践の利害関係者であり、独立した自由な職業ではないことに気付くでしょう。ただ私の意見ですが、学術コードの脆弱性を証明する論文はこれをサポートします。
この答えはすべて私の意見です-しかし、あなたは非常に意見の多い質問をしましたが、これまで好評だったので、それに応じて気取らない、合理的な情報(私は!)の意見に値すると感じました。PythonがRを介して全面的に真剣に議論されており、現実が党派的であるかもしれないときに、党派的ではない答えを投稿しようとすることを私は見逃します。
私はRユーザーですが、Pythonは未来だと思います(構文ではないと思います)
Pythonは未来
ですPythonの利点は、他の人々がはるかに幅広いサポートに言及しており、プログラマにとってはより論理的な構文に言及していることです。
また、分析結果を本番システムに変換できる機能は、はるかに簡単です。
たぶん、Pythonが汎用であり、Rがそうではないからかもしれませんが、プロダクション化されたRパイプラインを見たとき、私も眉をひそめます。
それだけでなく、高度なアプリケーションであっても、Pythonはすぐに追いついています(Scikit-learn、PyBrain、Tensorflowなど)。高度な専門ライブラリの出現。
しかし、Rは悪くない
多くの人々は、「R has bad syntax」の時流に飛び乗ることを好むようです。
Rの構文を良いものにすることを提案したい!Rを使用する場合
、割り当て関数、遅延評価、非標準評価、および式は大きな利点
です。サマリーで参照される変数名のエスケープや、何に対して何をモデル化するかのロジックの構築を心配する必要がないため、時間を大幅に節約できますで名前を見てnames()
から、を追加して新しい名前を割り当て<- c("A", "B", "C")
ます。
Rの奇妙な構文について不満を言う人は、それをデータサイエンスツールではなくプログラミング言語と見なします。
Rから来てdplyrを愛している人として、私はパンダの構文が比較して少し不器用だと思います。
はい、それはもう少し柔軟ですが、ほとんどのタスクでは、あなたのアイデアを表現するためではなく、Pythonのパーサーを満たすためだけにあるRよりも単純なコマンドを実行するために多くのキーストロークを取ります。
まとめ
当然、両方を知っているのが賢明であり、Pythonがそこに到達している間、Rのドメイン固有の設計の選択は、アドホックな作業のためにそれを単純にします。Rの大きな欠点は、そのドメインを離れるのが難しいことです。これは、基本的に、調査結果を持続可能な方法で実装しようとするときに行う必要があります。
Rをプログラミング言語としてではなく、統計ツールとしての見方をすれば、それは本当に素晴らしいことです。StataやSPSSよりもはるかに柔軟性がありますが、できることはすべて実行できます。私は大学でStataを学びました。Rは他の人が持っているような純粋なプログラミング言語の経験ではなく、統計ツールの観点をすでに持っていたので、見るのに十分簡単でした。
プログラマーがRを学び理解しようとすると、Rに対するフラストレーションが生じると思います。しかし、統計的なバックグラウンドを経てRに来た人には素晴らしいツールです。
すでに優れたプログラマーであれば、Pythonは素晴らしいです。しかし、私が大学を卒業したばかりのプログラミングと統計の初心者としては、Rの方がはるかに良い選択でした。どちらがあなたのスキルセットに合っていて、より興味があるのかというのは本当に好みです。
Pythonは科学以外にも広く採用されているため、そのすべてのメリットを享受できます。「Rへの怒りのガイド」が指摘しているように、Rはコミュニティによって開発されました。
今日、Rには2つの主な強みがあると思います。いくつかの分野で非常に成熟した高度に専門化されたパッケージと、最新の再現可能な研究パッケージknitrです。
Pythonは他のすべてに適しているようです。
これはもちろん、このスレッドのほとんどすべてのものであるという意見です。私は、このスレッドがまだ生きていることに少し驚いています。
他の回答で説明したように、Pythonは優れた汎用プログラミング言語であり、Rにはプログラミング言語として重大な欠陥がありますが、より豊富なデータ分析ライブラリのセットがあります。近年、Pythonはscikit-learnなどの成熟したデータ分析ライブラリの開発でRに追いついていますが、Rは決して修正されません。実際には、ほとんどすべてにPython(実際にはHy)を使用し、分位点回帰(Pythonのstatsmodelsでの実装が壊れているように見える)などの比較的難解な方法に対してのみRを使用します。PythonからRを呼び出す方法はいくつかあります。PypeRは、Windowsサーバーのような敵対的な環境で動作するようになったほど単純なものです。
編集:これについてさらに議論したい人は、この答えにコメントするのではなく、リンクされたエッセイの著者と話をすることをお勧めします。