多くのエンジニアが「機械学習 = Python」というイメージをお持ちかも知れません。確かに日本国内では機械学習の実装にはPythonが圧倒的に使われているのも事実です。(参考:何故機械学習にPythonが使われるのか?)
機械学習の経験・レベルを積み上げる中で、接する頻度が増えるプログラミング言語の一つに「R言語(アール)」があります。アメリカの電気工学・電子工学技術の学会「IEEE」が毎年行なっているプログラミング言語の人気ランキング 2017年度版ではR言語が総合で6位の結果(Pythonは1位)となりました。
本記事では機械学習においてPythonと肩を並べて人気の高い「R言語」について、機械学習の初心者が知っておくべき概要や特徴などを紹介したいと思います。
この記事の目次 [隠す]
R言語とは?
R言語は、1995年に科学者ロス・イハカ氏とオークランド大学のロバート・ジェントルマンによって開発されました。S言語というプログラミング言語をベースにしたユーザーフレンドリーなデータ解析・統計プログラミングとして開発され、1997年以降はR Development Core Teamにより開発が続けられています。
公開当初は主に学術や研究の分野で使われていましたが、最近では民間企業でも導入が進んでいます。
もともと統計解析言語として開発されたので、データ分析や統計解析に関しては他の言語と比べても群を抜いて優秀です。データを大きな労力を費やさずに解析する多くの機能がデフォルトで備わっています。
また、すでにPythonで機械学習を学んでいる方であれば欠かせないのが、NumpyやPandasなどの機械学習の実装の役に立つライブラリです。Pythonと同様にR言語も機械学習向けに用意されたパッケージ化された拡張機能が豊富に揃っているのも特徴の一つです。
R言語のインストールと開発環境
R言語はオープンソースですので誰でも無料で使うことができます。OS毎にインストール方法が異なりますが、下記の公式サイトよりインストーラーをダウンロードが可能です。
→ R言語 公式
またR言語とセットでおすすめなのがRStudio(Rスタジオ)です。RStudioとはR言語用のIDE(総合開発環境)です。R言語を駆使している大半のエンジニアはRStudioとセットで使っています。
RStudioもオープンソースソフトウェアで無料で使用することが可能です。また参考までにですが、R言語単体でも簡単なエディタがデフォルトで含まれていますので、一先ず触ってみたいとお考えの方はR言語のみでも大丈夫かと思います。
R言語の機械学習向けパッケージ
R言語ではライブラリとは呼ばれず「パッケージ」と呼ばれており、Pythonと同じく機械学習の処理の手助けをしてくれる多くのパッケージが存在します。中でも特に人気が高いパッケージをご紹介します。
dplyer
dplyer(読み:ディプライヤー)はデータフレームの操作に特化したパッケージです。PythonのPandasに類似したパッケージで、データの絞り込みやグルーピングなど大規模データの様々な操作を効率的に行うことが可能です。
stringr
stringr(読み:ストリンガー)はR言語で文字列操作を効率よく行うパッケージです。R言語にも標準で文字列操作を扱う関数は用意されていますが、文字列の置換やパターン認識、正規表現を利用した抽出などが簡単に行えます。
ggplot2
ggplot2(読み:ジージープロットツー)はデータの可視化に役立つパッケージです。PythonのMatplotlibと同様でデータの可視化をとても簡単に行うことが可能です。R言語にも標準でグラフ描写の機能が備わっていますが、ggplot2を利用することでより複雑なグラフの描写を行うことが可能です。
caret
caret(読み:キャレット)は機械学習の様々なタスクをまとめたパッケージです。いわゆる「機械学習ライブラリ」と呼ばれる部類のものでPythonのScikit-learn(サイキット・ラーン)と似た役割を果たします。
caretは「Classification And REgression Training」の頭文字を略したもので、機械学習のプロセスで必要となる様々なタスクを効率化してくれます。下記は一例ですが、caretを使って実行できるタスクの一例です。
- 訓練データとテストデータの分割処理
- データセットの前処理
- 特徴選択(参照:特徴選択とは?)
またcaretには多数の機械学習アルゴリズム/手法が組み込まれています。下記はその一例です。
- ランダムフォレスト(→ ランダムフォレスト入門)
- 線形回帰(→ 線形回帰 入門)
- ロジスティック回帰(→ ロジスティック回帰 入門)
- ニューラルネットワーク
R言語の特徴(メリット&デメリット)
プログラミング言語のメリット&デメリットを一概に論ずることは出来ませんが、本セクションではR言語の特徴としまして、一般的に言われている利点と欠点を紹介します。
パッケージが豊富
R言語が人気な理由の一つとして、世界中の様々な人が開発したアルゴリズムを自分の手で試すことができます。統計などの分野の研究成果がそのままパッケージとして公表されることも珍しくなく、最先端の技術やアルゴリズムにも簡単にアクセスすることができます。
データ分析/可視化が得意
機械学習エンジニアの中にはデータの分析/解析や可視化などはR言語で行なって、プロダクションへの実装はPythonで書き直す方々も多いです。R言語は特に大学や研究分野などで使われることが多いため、チーム内で共有する必要のないタスクは学生時代から使い慣れているR言語で行う方もいます。
日本語でのリソースが乏しい
日本では使っているエンジニアが限定的なため、R言語のリソースが他言語よりも圧倒的に少ないです。R言語で不明な点がある場合、大半は英語のドキュメントを紐解くか、海外のサイトを参照しながら解決しなくてはいけません。
R言語とPythonを比較
データサイエンティストの中ではR言語とPythonの議論が頻繁に発生します。世界的に有名なデータサイエンスのブログ「KDnuggets」では定期的にR言語とPythonの比較がトピックとしてあがります。
前述しましたが、R言語は統計解析に特化した言語なのに対してPythonは幅広い利用を目的とした汎用型の言語です。開発された目的が違うので、一概に2つのプログラミング言語の優越を比較するのは容易ではありませんが、本記事では3つのポイントに分けて比較をしてみましょう。
習得の難易度を比較
Pythonはプログラミング言語の中でも文法がシンプルなことで有名で、特に読みやすさが重視されており、初心者でも覚えやすい言語です。
一方で、R言語は習得の難易度が高めです。他言語でのプログラミング経験がないと文法を理解するのは簡単ではありません。書きやすさを重視して開発されたPythonと違い、R言語は統計学者が統計学を行うために開発されたので、プログラミングの初心者には優しくない言語と言えるでしょう。
給料による比較
海外のデータですのであくまで参考としてですが、「2014 Dice Tech Salary Survey(2014年のテック業界給料調査)」によると、アメリカでのPythonプログラマーの平均給料は93,139ドルに対してR言語プログラマーの平均給料は115,531ドルというデータがあります。
こちらのデータですが、アメリカのテック業界で働く17,000名以上の回答を基にしたデータですので、それなりに全体的な傾向を表しているかと思います。R言語は専門性が高い言語ですので、給料も他言語と比べて高くなる傾向にあるようです。
データの可視化・グラフ作成
機械学習では、最初のデータ探索(参照:探索的データ解析)でデータセットを理解することが重要になってきますが、データの可視化ではR言語がPythonよりも優れていると言われています。大きな理由としてR言語には先ほど紹介した「ggplot2」に加えて「ggivis」「lattice」などのパッケージを使って統計データから簡単かつ高度なグラフ描写が可能です。
Pythonでもグラフ描写ライブラリ「matplotlib」や「Seaborn」などがありますが、より高度なデータ可視化はR言語が優れており、多くのデータサイエンティストがR言語を利用しているのも事実です。
R言語を学ぶべき?
機械学習を勉強したことがある方なら「Kaggle」をご存知かと思います。Kaggleとは機械学習エンジニア同士を繋げるプラットフォームです。世界中の機械学習エンジニアが情報交換をしたり、自作のコードで予測精度を競い合ったりしています。(参照:Kaggleとは?機械学習初心者が知っておくべき使い方)
Kaggleのサイト上ではさまざまな言語で書かれたコードが公開されていますが、コンペで上位に入賞する質の高いコードは、R言語で書かれていることが多いです。
下のグラフはkaggleのカーネル(公開コード)でPythonとR言語が使われた頻度を示したものです。Kaggleによると2016年以前はデータサイエンティストの中で最も使われていたのはR言語でしたが、2016年を境にPythonが急激に伸びているとのことです。
こちらのグラフで注目するべきは「R言語は使われ続けている」という点です。すでにKaggleに参加している方であれば経験があると思いますが、予測精度が優れている手法やデータ分析で役に立つコードの多くがR言語で公開されており、R言語を知らないために悔しい思いをしたことはありませんか?
Pythonでも、とても役に立つカーネルは多数存在します。しかしR言語を習得することで、さらに有益なカーネルへのアクセスが増えることは間違いありません。
既に他のプログラミング言語を使える人もそうでない人も、R言語を学ぶことによって読めるコードの幅がぐっと広がります。また、特にアカデミックの世界では、R言語が主流なので、習得することによって最先端の機械学習の動向をいち早く知ることができます。
まとめ
本記事ではR言語についてまとめてみました。機械学習をこれから勉強しようと考えている方は、Pythonを使って機械学習の勉強をすることをお勧めします。一通りの機械学習の初歩的な手法の理解が出来ましたら、次はR言語へ挑戦してみてはいかがでしょうか?
機械学習を始めようと考えている方は下記の無料コースもお勧めです。ぜひ、受講をお待ちしております。
機械学習 準備編 無料講座以上となります!