RとPythonは使いよう
どうも、totokoです。
さて、先日「どうして機械学習の分野ではPythonがメジャーなのか」ということに関して書きました。
今回は現在のデータ分析に使用する2大言語のもう一つ「R」を取り上げつつ、両者を比較していきましょう。
そもそもRってなんぞや?
Pythonという言語はデータ分析に関わっていなくても、なんとなくプログラミング言語として知っているはずです。
しかし、Rはその手の専門家は当然知っていますが、知らない人は本当に知らなかったりします。
RとPythonの比較の前に、まずは簡単にRの説明をしましょう。
あらためて、R言語とはオープンソースのフリーソフトウェアのことでありプログラミング言語です。
フリーなので無料で使えますし、オープンソースなので様々な人がライブラリのような拡張機能を共有しています。
もともと、R言語は統計的なデータ解析やデータ分析に特化したスクリプト言語なので、他の言語のようにゲームを作ったり、アプリを作ったりというように汎用性はないですが、「数字を扱う(統計的な解析)」に関しては無類の強さを誇る言語です。
「これ本当にプログラミングしてるの?」と錯覚するぐらいに、簡単なプログラムでデータ処理を行うことができますし、その操作も柔軟性があり、自由自在にこねくり回すことができちゃいます。
どれくらい簡単なのかというと、ちょっと一例を挙げましょう。
一般的な散布図(縦軸・横軸の項目を対応させて、実際のデータを点でプロットしたもの、日本工業規格だと「二つの特性を横軸と縦軸とし、観測値を打点して作るグラフ表示」と定義されている)を表示させたいのならば、R言語だと、以下のように記述します。
plot(iris$Sepal.Length, iris$Sepal.Width)
一行だけです。わお。
ああ、確かに大学の卒論の時にR言語少しだけ触りましたがプログラミングをやってる感覚はなかったです。
なので、未だに「R言語はプログラミング言語だぜ」と言われるとなんだか違和感。
それぐらい使っている側からすると、「プログラミングでデータを解析している」とは思わせないぐらいに簡単に扱えるというわけです。
これがPythonだとこんな感じです。
Iris データをロード
from sklearn import datasets
iris = datasets.load_iris().data
import matplotlib.pyplot as plt
plt.scatter(iris[:,1], iris[:,2])
plt.show()
なんてこったい……。おそらく、常日頃からPythonを扱っている人からすればなんてことはないのでしょうが、これをデータ分析のために初めてプログラミングをするという人からすると、難しいことこの上ないですね。
TCG(トレーディングカードゲーム)の「強いカードはテキストが短い」の法則と同じようなもんです。これはテキストが短い=複雑なカードと比べて汎用性が高く、限定されにくいので使いやすいという、昔からTCG界にある俗説です。
R言語はそれと似たような感じかもしれないです。
Pythonとの違いは「汎用性」
シンプルで強いR言語じゃなくて、どうしてPythonなの? と思うでしょう。
それは先程も言いましたが、汎用性の有無なんです。
確かにR言語は計算が簡単だったり、統計学のアルゴリズムの多さ、グラフへの表現のしやすさがPythonとは段違いです。
ですが、R言語はコーディングに向いておらず、システムに組み込んで処理を行うというよりも、データ抽出や分析を繰り返し、最適なモデル構築を行うという「データ分析」に適したツールです。
なので、例えばWEBスクレイピングしたデータを解析してグラフにするとかの場合、スクレイピングはできませんが、スクレイピング後のデータを元に色々と計算していく場合だとR言語が向いていると言えます。
対して、Pythonはコーディングに適しています(データ分析に関わらず、様々なWEBサービス等で普通に使用されているので)。そのため、システムやアプリに使って、データ処理や複雑な処理の自動化を行える点がメリットです。
なので、Pythonは実務担当と言ったところでしょうか? そうなると、R言語は研究者用の言語と表現できるかもしれません。
これからの分業制に備えて、使い分けよう
そのため、例えば本当にデータ解析だけ。
データを解析したり、整理したりしてそこから何か考えるという「0→1」の段階では、操作が簡単なRを使い、そこで生まれたものを今度は「1→10」にする際に、実際のサービスやアプリに適用させる際にはPythonを使うという分け方がいいかもしれません。
無論、Pythonでも「0→1」はできますので、なんでもかんでも一つの言語! ならPythonでいいかもしれません。
ですが、僕は前回記事で、何でも屋よりは一つのことに特化したスペシャリスト集団の方がよいといいました。
つまり「データ分析サービス業(ビッグデータを活用し、実際のサービスをユーザーへ提供する業種。
前回記事でtotokoが作った俗語)」において、ユーザから集まったデータを学習し、現在のサービスの品質向上につなげるならばPythonが便利でしょう。
しかし、そのデータを新たに解析し、新しいサービス等を見つけるための取っ掛かりを作るには操作が容易なR言語が便利だと思われます。
「データ分析サービス業」の考え方では分業制を取っているので、「データエンジニア」はR言語を、「機械学習エンジニア」はPythonを中心に扱うフィールドとなるはずです。
なので、どっちかがよいわるいというよりも、それぞれの強みを活かせる部分で使い分けていくのが正しいかもしれません。
ちなみに、「データコンサルティングアナリスト」の場合は、データエンジニアほどR言語を扱えなくてもいいですが、「試しに俺でもやってみるか」ぐらいで簡単な計算ぐらいはできるようにR言語が扱えるといいかもしれませんね。