データ分析・機械学習系での言語選択に関して

f:id:lib-arts:20190116121417p:plain

下記の記事でシステム設計について記述した内容に対し、言語選択についてご質問いただきましたので、こちらの記事で回答させていただければと思います。

 

◆ Question

質問内容としては、冒頭部で『RではなくPythonを用いています』としたことに対して、

Rの問題点について、詳細をアップされていますでしょうか?現在Pythonを勉強中でRは何もしていないのですが、Pythonオンリーでいけるのか併用必須なのかわかっていなくて。

という内容でいただきました(クローズドなやりとりでのご質問なので、文面は質問の意図を変えない程度に編集しています)。

今回はこちらのご質問に対する回答にお答えする形で内容をまとめていければと思います。

 

 ◆ Answer

結論としては初心者を前提とするなら基本的にPythonのみで十分だと思います。
以下に理由を述べます。(優先度高い順に並べますので、途中まで読んでもらえれば十分です。理由書いてたら意外と書きたい事多くなってしまったので。)

 

1. 両方学ぶはやめた方が良い
まず、ちょっと調べてみたら両方勉強する派が多かったのですが、行うべきでないと思います。というのも、どの言語でもfor文やif文、その他配列の取り扱いなどは存在しますが、基本的な機能を使う際に非常に紛らわしいからです。うろ覚えの内容を一々調べ直すのは時間の無駄なので、メインで使用する言語は必ず一つに統一すべきです。
複数言語使えると凄そうな印象を初学の段階では抱きがちですが、高級言語(人間の感覚に近しい言語で、PythonrubyPHPなど)については一つメインの言語があれば良いです。一つ極めてれば他の言語も似たり寄ったりなので、他の言語についても身につけるのは早いです(が、1時間単位で切り替えはコスパが悪いのである程度統一しておく方が良いと思います)。


技術者を志すとしても高級言語は一つあれば十分で、違う言語もというならCなどのより深いレイヤーの理解を目指した方が良いです。欲しい機能がなければ細部を作り換えるくらいの感覚の方が後々は楽だと思います。
目指すレベルにもよりますが、基本的には得意なものが一つあれば十分です。


2. RかPythonなら汎用性を考慮して基本的にはPythonにすべき
最大の理由は汎用性にあります。Rは統計的なプログラミングは学べますが、これが生きるシーンは実務ではほぼないです。というのも実務で必要とされる分析でそれほど高度なものは少なく、むしろ実装してAPI(他のプログラムから簡単に呼べるようにする)化するというニーズの方が圧倒的に大きいからです。
また、Rだと統計的なプログラミングでしか仕事がないですが、PythonであればWeb開発含めて様々なニーズが今後出てくると思います。その際に汎用性の高いオブジェクト指向言語Pythonで学んでおけばキャリア選択の幅が広がると思います。


3. Rのメリットの統計パッケージを享受できる人であってもPythonの方が良いかもしれない
これは実は意外とそうかもなと思ってます。
知り合いの数理系で博士号をとった方でRを使っていて理論に強く、パッケージを自作されたりしているのですが、コーディングスキル自体はそこまで高くないように見えます。頭の良い方なので、Pythonから入った方がもしかしたら実装スキルが高くなったのではと考えると、理論に強い方も開発者のソースに学ぶという意味でPythonから始める方が良いのではと思います。Rは学者が好き勝手書いたコードが多いようで、それが当たり前だと思ってしまうと損するのではと思います。
結局新しいアルゴリズムを試したければ自分でライブラリ毎書いてしまえば良いでしょうし、その際に参考にすべきライブラリが多いPythonの方が良いのではと思います。scikit-learnなどのOSSの実装の読み会を時折やっていますが、非常に勉強になります。


4. 大体の求人ニーズは分析よりも開発寄り(特に働きやすい環境)
意思決定が早くて専門職として働きやすそうな環境は基本少数精鋭なので、開発寄りのニーズが大きいです。
分析の仕事って結局説明がメインになってしまうので、お堅い会社での仕事が多くなってしまいます。


5. Web開発もPythonで十分かもしれない
日本だとRuby on Railsが初学者向けに人気で、チュートリアルも充実しています。とはいえ、現状はフロント側のJavaScript系のフレームワークが主流のようで、バックエンドは統一して一気通貫に書ける方が望ましいと思います。
こう考えた際にPythonではFlaskなどの軽量サーバなどもあり、用途が豊富で大体のシステムはPythonで完結させることができます。
機械学習系が実務上流行るのであれば、バックエンドPython + フロントエンドJavaScriptの構成が今後増えるのではと勝手に思ってます。(必要以上に言語が混じるのって時間の無駄なので)


Web開発は本業じゃないので聞き流してください(そこまで間違ってないとは思っているのですが)


◆ まとめ
両方学ぶ的な記事が意外と多くて気になりました。
個人的な観測範囲での話ではありますが、Rはやらなくて良いと思います。分析オンリーで完結する仕事って実際はほとんどないですし、仕事の幅が狭まって良くないと思います。Pythonで慣れておけば、Rの必要が出てきても軽くキャッチアップすれば十分使用できますが、Rに慣れてしまうと開発系のプロジェクトになかなか入れなくなるので大変です。


◆ 備考
・完全にPython推しになりましたが、Rもメインで2~3年使っていたことがあるので中立的に書いたつもりではいます。
・初学者向けの記事って難しいので、『ここ間違ってるのでは?』だったり『こういう時どうすれば良いですか?』だったり気軽にコメントいただけますと嬉しいです。