今回のイベントでは、Pythonと比較をしながら、 R言語を用いてデータ分析をするための技術を学びました。講師にお迎えしたのは、昨年開催したイベント「Pythonでデータ処理と機械学習を始めよう」にご登壇いただいた、早川敦士さん。前回の内容のR言語版といった位置づけで、PythonとR言語の違いや、R言語によるデータ処理の実装などを、分かりやすく解説してくださいました。
・R言語専用の開発環境「Rstudio」は、環境構築がGUIで完結するので、プログラミング未経験者にもお勧め
・ベクトル演算をする場合、PythonではNumPyが必要になるが、R言語では外部ライブラリを必要としない
【講師プロフィール】
早川 敦士さん
株式会社FORCAS、株式会社ホクソエムに所属。前職のリクルートコミュニケーションズではB2Cマーケティング、現職のFORCASではB2Bマーケティングプラットフォームのデータ分析及び開発を担当。大学在学中に『データサイエンティスト養成読本』(技術評論社刊)を共著にて執筆。その後も『機械学習のための特徴量エンジニアリング』(オライリー・ジャパン刊)や『Pythonによるはじめての機械学習プログラミング』(技術評論社刊)などで執筆活動を続けている。国内最大級のR言語コミュニティであるJapan.Rを主催。株式会社ホクソエム執行役員。
R言語の環境構築、入門
初めに、R言語とはどのようなものなのかということからスタートしました。
R言語は、オープンソースで誰でも無料で使うことができ、データ解析や統計プログラミングとして開発された言語です。データアナリストが使うBIツールとしての側面もあるため、他のプログラミング言語とは少し勝手が違う部分があるのだそうです。
「Tableau」に代表されるBIツールは、導入時は効率的にスキルを身につけることができますが、職場が変わると、せっかく身につけたスキルが次の職場では使えない可能性もあります。その点、OSSのR言語ならば、どの職場でも導入のハードルが低く、また自宅でも使うことができ、身につけたスキルがムダになりません。さらに、BIツールでは扱いにくいような複雑な処理も可能なのだそうです。いいこと尽くめですね。
R言語の利用には、処理系をダウンロードして利用しますが、よく使われている開発環境は「Rstudio」と「Jupyter Notebook」の2つがあり、このいずれかを選んでおくのがお勧めだそうです。


R言語の基礎的な文法
ここからはR言語の基礎的な文法についてです。
まず、四則演算ですが、これは「+、-、*、/」と、どのプログラミング言語でも一緒です。R言語も例外ではありません。
一方で、変数では値代入時の表記が少し異なり、「=」でなく「<-」を使います。実は「=」でも動くのですが、R言語では「<-」が推奨されているそうです。
文字列はダブルクォートで括ります。これは他の言語とあまり変わりません。変数mojiに「hensu」という文字列を代入するには次のように表記します。
moji <- "hensu"
print(moji)
―――
リストの記述方法は、PythonとR言語で異なります。Pythonでは[ ]で括りますが、Rではc( )で括ります。
hairetsu <- c(1, 2, 3)
―――
また、「1, 2, 3」のように連続する値は「1:3」と記述することもできます。ここはPythonにない便利なところかもしれません。この応用として、ベクトル演算で[1+4, 2+5, 3+6]のような計算をする際、次のように記述することができます。

そして、最も大きな違いであり、かつ間違いのもとになりそうなのが、配列の添字が0オリジンでなく、1オリジンである点です。配列の1番目の要素は次のように指定します。
hairetsu[1]
―――
分岐やループは、ブロックの処理やelse ifなどの表記が違いますが、文の構造自体は一般的です。

そして、関数定義もPythonなどとは異なり、関数に値を代入するような形式で記述します。
kansu <- function(hensu){ }
―――
PythonとR言語の主な文法の違いをまとめると次のようになります。

R言語では、データの加工、列の追加、フィルターでの絞り込み、集計などのさまざまなことが簡単な命令で行えますが、覚えるのは大変です。そこで早川さんがお勧めするのが常に手元に「カンペ(カンニングペーパー)」を用意しておくことだそうです。

さて、ここから先は前回のPythonでのイベント内容と同じ内容をR言語で示してくださいました。
まずはCSVデータの読み込みです。
survey_results <- read.csv("survey_results_public.csv")
―――
読み込んだデータを上から10行分表示させるには、次のような命令を実行します。
head(survey_resalts)
―――
下から10行分ならば次の通り。
tail(survey_results)
―――
当然とも言えますが、基本的な分析は命令の書式こそ違いますが、R言語でも同様に行えます。重複回答がないかどうかは、次のような命令で導き出せます。
length(unique(survey_results$Respondent))
―――
合計はsum( )、平均はmean( )、最大値はmax( )で求められます。これらの命令では<N/A > を除去するために、na.rm = TRUEというオプションを指定します。
sum(survey_results$ConvertedSalary, na.rm = TRUE) # 合計
―――
dplyrでデータの集計・加工
ここまでは1変数に対する処理でした。ここから2変数に対する処理についてです。2変数に対する処理にはライブラリ「dplyr」を使うのが一般的なのだそうです。
ただし、dplyrの記法にはクセがあり、プログラミング経験がある人には、ちょっと違和感を覚えるかもしれませんが、プログラミング経験のない人には、むしろ分かりやすいかもしれないとのことでした。代表的なのが「%>%」という表記によるものです。
たとえば、「survey_results」に格納したデータフレームから、「Hobby」と答えた人のデータについて、「ConvertedSalary」の値の合計を求めるとします。そのときのコードは次のように記述します。
# install.packages("dplyr") # dplyrをインストール
library("dplyr")
survey_results %>%
group_by(Hobby) %>%
summarise(
ConvertedSalarySum = sum(ConvertedSalary, na.rm=TRUE)
)
―――
そのほか、縦方向のデータを横方向のデータに変換する処理も紹介してくださったのですが、処理手順が長くなるため、ここでは割愛します。データが膨大な量になると、Excelのピボットテーブルでは作業が重たくなってしまうため、そうした処理は一度R言語でプログラムを書いておくと、あとで使いまわせるので便利だそうです。
ggplot2で可視化
最後に「ggplot2」というライブラリを使ったデータの可視化の例も紹介してくださいました。早川さんによれば、ggplot2も、少々クセがあるそうです。たとえばグラフのサイズ変更を行うために、ggplot2のほかに、あらかじめ「repr」というライブラリも読み込んでおきます。
library("ggplot2")
#https://rstudio.com/wp-content/uploads/2015/03/ggplot2-
cheatsheet.pdf
# jupyter notebookでグラフサイズを変えるために利用
library("repr")
options(repr.plot.width=12, repr.plot.height=7)
―――
棒グラフや円グラフ、フォントのサイズ変更、色の変更、塗りつぶしなど、グラフの処理についても、デモ画面上で、命令を付け加えながら説明してくださいました。

イベントに参加いただいた方からは、「Pythonとの違いを確認しながら、R言語を学べたことは有意義でした」という声や、「R言語を学んだことはなかったが、Python利用経験のある私にとって、簡潔でわかりやすい解説でした」などの声をいただきました。
株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するこのようなイベントを、定期的に開催しています。皆さまのご参加をお待ちしております。