こんにちは,米国データサイエンティストのかめ(@usdatascientist)です.
「データサイエンスを勉強するにはRがいいですか?pythonがいいですか?」よく聞かれる質問ですが,私なりに比較,考察してみようと思います.
結論からいうと,私はAI開発やエンジニアまで幅を広げられるpythonをお勧めします.Rはある程度の人気はあるし,統計に特化しているのでプログミング初心者でも勉強しやすいです.が,Rは一般的なプログラミングと少しお作法が違ったりするので,将来他のプログラミングを学ぶ土台にはなりにくいです.
私は現在アメリカで医療画像を診断するAIを開発していますが,機械学習のアルゴリズムは基本pythonで書いています.pythonを書けない人は採用していませんし,逆にみんながRを書けるかどうかは知りません.(まず話題にあがらない)
Rとpythonの特徴をまとめると以下です.
Rとpython特徴まとめ
R: 統計解析のためのソフトウェア(SPSSやSASとかの仲間)
他のソフトウェアと比べGUIが弱い分プログラミングの要素が強い
独自文法が多い
比較的簡単に使えるので研究者や統計屋向け.
アカデミック色が強い
Python: プログラミング言語
付属パッケージ(モジュール)が豊富.とくにデータ解析向けモジュール
幅広い用途(データ解析, AI解析, Web開発など )
深層学習をやるなら必須
エンジニア色が強い
そして,私がpythonをお勧めする理由は以下の通りです.
1.Rより汎用性が高い
2.他の言語と親和性が高い
3.Rより求人が多い
4.Rよりユーザが多い
5.Rより処理が速い
(ちなみに私はRも時々使います,年に一回くらい)
目次
Rってなに??
Rって何でしょう?Rは,統計解析のために作られたフリーソフトウェアです.Pythonもそうですが,基本的に自由に利用,改変,再配布が可能です.
線形モデル,非線形モデルや一般的な検定(tやカイなど),クラスタリングや識別器のモデリングをとても簡単に実行・実装ができ,Windows,Linux, Mac,Unixと多くのOSで動くオープンソースです.
インストールの仕方はこちらの記事を参照してください.簡単に入れることができるので,一度記事に従って触ってみるといいかも
Pythonってなに?
Pythonはプログラミング言語です.インタプリタといってJavaのようにコンパイルすることなく実行する系の言語ですが,その使用用途は広く,pythonを使ってWebアプリを開発したり,データ解析をしたり,はたまたファイルの操作なんかもできちゃいます.まさにgeneral-purposeの言語です.また,javaやRuby,Javascriptなどの言語と同様オブジェクト志向のプログラミング言語です.
1991年にリリースされて以降,様々なアップデートを経て2000年にPython2.0,2008年にPython3.0がリリースされています.Python2系では現行のPython2.7が2020年1月1日に公式に開発を終え,今ではPython3系が完全主流です.
Pythonだけだとただのインタプリタのプログラミング言語なんですが,その周りのPythonエコシステムなるものが非常に開発が盛んで,WebフレームワークのFlask, Djangoやデータ解析のscipyパッケージ,tensorflowなどの深層学習パッケージなど,非常に多くのPythonパッケージが展開されています.
(追記)未経験者の方でも学べるPython入門動画講座を公開しました!!全22時間のボリュームで,徹底的にわかりやすくゼロから教えます.数あるUdemyのPython講座の中でもダントツの最高評価(☆4.8)いただいてます.是非これからPythonを学習しようと考えている人は受講してみてください!
1.Rより汎用性が高い
まず,それぞれの言語の守備範囲が全然違います.Rは基本統計解析目的にのみ開発されているのに対して,Pythonはgeneral-purposeの言語として開発が進んでいます.
つまり,「データ解析のために勉強していたPythonの知識が,(例えば)Web開発にも使える」ということと「データ解析のアルゴリズムを(例えば)Webに統合しやすい」のです.
PythonのWeb開発フレームワークはメジャーどころは二つ,DjangoとFlaskというのがあります.Djangoはちゃんとしたフレームワークで大きめのWebアプリを構築することができます.Flaskというのは簡単に早くWebアプリを作れるように開発されたもので,ちょっとおもちゃみたいな感じです.(Rubyでいうと,DjangoはRails的な立ち位置で,FlaskはSinatra的な立ち位置だと思ってます.間違ってたらごめんなさい)
例えばデータを分析するアルゴリズムを開発したとしても,結局それをユーザに使ってもらうにはWebのインタフェースが必要ですよね?Pythonで作ってればそれをDjangoやFlaskを使って簡単に組み込めます.同じ言語なので無駄に変換する必要がないので楽です.
しかもPythonはWebフレームワーク界隈でも絶大な人気を誇るフレームワークで,特にDjangoは様々なサイトでTop5に入っています.(こことか,こことか)
有名どころでいうと,InstagramやPinterestがDjangoで作られているそうです.
他にも,深層学習をするのであれば,Pythonのフレームワークは必須です.Tensorflow, Pytorchを始め,Keras, MXNet, Chainerなど多くのフレームワークがPythonを対象としています.
他にも,画像処理のOpenCVやグラフなどの表示に使用するMatlabのMatplotなど,非常に多くの有名なフレームワークやモジュールがPythonに対応しています.
一応Rにも一部の開発者によって画像処理や深層学習などのフレームワークが開発されていますが,コミュニティが小さいので快適に利用できないのが現状です.
2.他の言語との親和性が高い
Pythonは他の言語と,ある程度お作法や文法など似ている面がたくさんあります.例えばRubyやPerlは, Pythonに似ていますし,JavaやJavascriptなど,見た目はそこまで似ていなくても,考え方や使い方などそれぞれの言語で対応する点があったりします.
一方Rは...他の言語と結構違うw
例えば変数の代入はPythonやRuby, Javaなど一般的な言語だと variable = 'value' と書きますが,Rだと variable <- 'value' って感じで <- を使います.(Rでも = は使えますが,トップレベルでしか使えません.謎です. ちなみに = のことを代入演算子と呼ぶので覚えておきましょう)
他にもリストのIndexが他の言語は大抵0から始まるのにRは1から始まったりして,ほんとにややこしい(Matlabも1からだった気がしますが)
これからIT業界にいたい人,他のプログラミング言語を勉強してる人/したい人などは特に理由がなければPythonが無難だと思います.今後のキャリアを考えてもね.
Rを学んでもR独自の知識しかつきませんが,Pythonを学べば簡単に他の言語(RubyやJava, Javascriptなど)を習得できることでしょう.
私はRの文法,気持ち悪くてダメでした.
3.Rより求人が多い
アメリカでは圧倒的にPython人気です.企業もRよりPythonができる人を求めています.
私の感覚ですが,大学はRのポジションもまぁまぁみます.例えばバイオインフォとか.しかしIT企業でいうと圧倒的にPythonですね.
以下は2019年のIndeedにおける技術に対するのDatascienceポジションの求人数です.PythonがRを圧倒してます
IT業界での技術の需要は基本どこの国もアメリカを追随していきます.それは当然,GAFAをはじめほとんどのグローバルな大手テック企業がアメリカ資本だからです.今後も間違いなくPythonの需要は上がっていくはずです.
4.Rよりユーザが多い
Rは統計専用である一方,Pythonは汎用性の高い言語であるため当然ユーザの層も厚いです.
Satckoverflowの2019年の統計によると,Pythonは4番目にユーザが多い言語となっています.
9万人の開発者に使用言語をアンケートしています.回答者の実に4割のユーザがPythonを使っているのに対し,Rは6%弱,R人気ないですねぇ・・・それにしても,PythonがJavaより人気とは驚きです.
ユーザが多い方が開発コミュニティも当然活発になり,情報も多いため学習もしやすいです.
以下のグラフはStack overflowのトレンドです.タグづけられた質問の数,Python人気が急増しているのがわかります.
5.Rより速い
データサイエンスは大量のデータを処理することが多いです.中でも画像解析や動画解析は非常に大きい画像を扱いますし,音声,自然言語もかなりの容量になります.センサからの時系列データなんかは常にデータを取り続けることがあるためデータが巨大になりがちです.
Rは簡単に統計検定などができるように作られた言語であって,そもそも高速に処理するように設計されていません.
試しに以下のコードで10万回Printしてみます.まずはPython
1 2 3 4 5 6 7 8 9 10 11 |
import time start = time.time() for i in range(1, 100000): print "Hi!" print("Finished!") end = time.time() - start print(end) |
すると,
1 2 |
Finished! 0.421991825104 |
だいたい0.4秒でした.
続いてR
1 2 3 4 5 6 7 8 9 |
ptm <- proc.time() for(i in 1:100000) { print("Hi") } print("Finished!") print(proc.time() - ptm) |
を実行します.結果は
1 2 3 |
[1] "Finished!" user system elapsed 1.491 0.202 1.781 |
結果が3つ出てきますが,合計すると3秒くらいかかっているのがわかります.(user, system, elapsedはそれぞの箇所でかかった時間)
Rはloopでの処理はあまり推奨されてないようですが,それにしても遅すぎる・・・
また,Pythonはnumpyなど数値演算に特化したライブラリやsparkなどの分散演算のライブラリが豊富なので,この単純なloopに限らず,さまざまな演算で高速処理を実現できるようになっています.
まとめ
逆に「なんでR使おうと思うの?」と聞きたくなるくらいPythonの圧倒的に優位でした.
個人的にはRのメリットって,もう正直あんまないかなぁと...RにできてPythonにできないことってもうほとんどないです.一昔前は検定系がRの方が楽だったんで時々使う機会あったけど,今ほとんど使ってません!
「いやいや,Rのここがいいよ!PythonなんかよりRの方がいいよ!」っていう人がいたらぜひTwitter(@usdatascientist)で教えて欲しいです!
というわけで本ブログではこれから統計学や機械学習のハンズオン講座を書いていこうと思いますが,全てPythonで実装することを考えています.合わせてデータサイエンスに必要なPythonも勉強できるようなものにしていこうと思いますので,よろしくお願いしますmm
追記)データサイエンスのためのPython入門講座の連載はじめました.こちらからどうぞ!↓
それでは!
[…] 【参考記事】データサイエンティストになるにはRかPythonか【結論:PythonでOK】 […]