読者です 読者をやめる 読者になる 読者になる

歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【R】そうです。Hadley Wickhamが僕の畏敬する天使様なのです

R

「Rのプログラマーは当たり前に思ってるけど、他の人達にとってはそうじゃないこと」をまとめておいて、 先輩や同僚から「Rって何が便利なの?使って or 勉強して得になるの?」って聞かれたときにパッと答えられるように備えておこうという記事です。

(自分はただのエンジニアだけど)社内でデータ分析者にとって暮らしやすい環境を作りたいと思ってます。 そのために、Rって何なのか、何が便利なのかアピールして、あわよくばRユーザーを増やしたいと目論んでいます。

そういうモチベーションもあり、この間、「ふつうのスクリプト言語プログラマーのためのR言語入門」というめちゃめちゃイケてる記事を書いたのですが、あんまりウケは良さそうじゃありませんでした。おそらく、自社ではエンジニアがデータを分析する文化があまりなく、主に企画やマーケッターと呼ばれる人達がExcelとかで一生懸命やっているためです。

kiito.hatenablog.com

そのため、プログラミング慣れしていないマーケッター等の立場の人たちに「purrrを使うとですねwwwHaskellの影響を受けた関数型言語の考え方が使えるのでござるよwwwコポォwww」とか言ってもしょうがないし、エンジニアの人たちにはデータ分析そのものに興味を持ってもらわなきゃいけません。

(余談ですが、非エンジニアの分析者はSQLを書けない人がほとんどですし、彼らがDB管理者に依頼してcsvでデータを出してもらう → Excelで一生懸命分析するような光景も多く、無駄な手間がかかってることも多い気がしています)

そのため、R言語そのものよりも、Rの文化や考え方、暗黙知を知ってもらうことのほうが効果がある気がしています。この間『圏論の歩き方』という本を買って読んでいて、まあ内容は10割くらい理解できなかったのですが、次の一文は印象に残ってます。

六角: これあるよなあ.暗黙の知識にはいわゆる「文化」も含まれるよね.たとえば,物理では「クリエイティブな間違い」を含む論文というのはとても評価が高い.愛用は間違っているんだけど,そのアイデアがその後の研究を刺激するようなもの.そんなの数学ではありえないでしょ.だって証明間違ってるんだよ!

下鴨:えーー!!本当に?

二条:それって,あたりまえじゃないの?私は物理出身だからそんなもんだと思ってた.

多少Rを触った身として、「Rのプログラマーは当たり前に思ってるけど、他の人達にとってはそうじゃないこと」を書き連ねていこうと思います。

Rはプログラミング言語

Rはプログラミング言語です。 (R言語だけに限られませんが、)プログラミングを使うことで次のようなメリットがあります。

  1. 同じような作業を定型化したり、同じような集計のためにコードを再利用することができる
  2. ロジックの間違いに気づきやすい
  3. データ形式を選ばない

コードを残しておくことで、同じ集計・分析を別の日のデータで再実行したり、 何か集計に間違いがあったときに、コードを読み返すことで原因に気づくこともできます。

社内の旧データソースの中身が汚くて(まあどこでもある話ですが)、最近は夜な夜な『バッドデータハンドブック』を読んで泣いていたのですが、 その中にこんなことが書いていました。

 データは通常、人間がそこから特定のメッセージを抽出できるよう用意されます。

 ここで問題になるのは、最終的にはいつも、そのデータを使っていろいろとやりたくなるということです。 つまり、ソフトウェアを使ってデータを扱いたくなるのです。 それには、データのフォーマットをソフトウェアに教える必要があります。 そして結局、こう思うのです。 最初から人間ではなくコンピュータが使えるようなフォーマットにしておけばよかったのに。

バッドデータハンドブック ―データにまつわる問題への19の処方箋

バッドデータハンドブック ―データにまつわる問題への19の処方箋

Rを使えば、csvでもjsonでもデータベースでも、(ライブラリを使って拡張する場合もあるにせよ)簡単に読み込むことができ、 データ解析の結果も好きな形式で出力することができます。

Excelでは、例えばjsonデータを簡単に読み込むことはできないし、 Office上で動くプログラミング言語であるVBAは読み書きしやすいものではありません。

Rは統計家が楽をするために作ったツール

Rのいいところは統計家が作ったこと、Rの悪いところもまた統計家が作ったことだ」と言っている人がいました。 統計のための関数が充実していたり、最新の分析手法や機械学習アルゴリズムがライブラリとしてすぐに公開されます。

「データの集計を10行くらいで終わらせて、最新の分析手法を使いたいけど難しい数式は自分で実装したくないからライブラリ読み込んで使おっと!」という怠惰なデータ分析者のためのツールです。 Perlっぽく言うと、「簡単なことをより簡単に」し、すぐに結果を見ることに長けています。

その分、プログラミング言語としてちょっと独特な点が多かったり、 型の扱いがゆるふわすぎて大変だったりします。

REPLを使った探索的データ解析が得意

Rのプログラマーは、他のどの言語のプログラマーよりもREPL(Read-eval-print loop)を利用します。

Read-eval-print loopの略
字のごとく読んで評価して表示して繰り返す。対話型評価環境を指す。

まず日付ごとの売上のデータをプロットし、「月末に売上が下がる傾向があるけど、何が原因なんだろう」と疑問が生まれ、 「商品カテゴリ別にプロットしなおして見てみよう」、「カテゴリ別に見ると、××の売上が落ちるようだ…その原因は…」と、試行錯誤しながらデータ分析を行うことができます。

S-PLUS: EDA

探索的データ解析は、1960年ごろより有名な統計学者J.W.Tukeyによって提唱されたもので、データの解釈にあたっては「まずモデルありき」ではなく、モデルを仮定する前に現実的な立場で、データの示唆する情報を多面的に捉えるという、解析初期のフェーズを重視したアプローチです。

試行錯誤した結果がプログラミングのコードとして残ってくれます。

オープンソースのデータ解析環境(enviRonment)だ

Rはプログラミング言語(だけ)ではなく、統合的なデータ分析環境でもあります。Rに詳しい人はカッコつけてenviRonmentと言ったりもします。

他の言語ではWindowsでの環境設定で、商用のソフトウェアではUnix系OSへの対応で困ることが多いですが、Rで困ることはほぼありません(ただし、ライブラリの裏側で別のプログラムを呼び出している場合などに動かないことはあります)。

CRAN (The Comprehensive R Archive Network) と呼ばれるネットワークを介してライブラリのインストールを行うことができます。

R言語 - Wikipedia

統計家にとっては、今まで習得し錬成した手法と蓄積したデータとその運用方法は例え環境が変化しようとも継承できなくては困る。この意味から、他に多く存在するプロプライエタリ・「生かすも殺すも版権保持者の都合次第」というような統計処理ツールと比べ、R言語のようなオープンソースで、それゆえ、CRANパッケージ等によって日々機能拡張し得る、つまり、「フリーソフトウェアの精神に則り永続的で世界規模な集合知に支えられ、無償でありながら高い信頼に値する。」統計環境というのは、統計家の長期的な生産性に大きく寄与する「持続可能な統計環境」と言える。

Python等の汎用的な(データ分析だけに用途が限られない)プログラミング言語をデータ分析に利用するもありますが、 どうしてもRに比べて簡単な分析がしづらいように思います。 ただし、分析結果をWEBサービス化したり、コードをリファクタリング(整理)したり、ちょっと大きなコードを書くような場合はPythonなどのほうが便利かもしれません。

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

いわゆるプログラマーやエンジニア以外にも使われている

元々、大学や研究機関で広く使われ、ITの専門家でない人もRを利用しています。例えば、医療系の研究者が、データ解析のためにRを使っていることもあります。

(半分冗談ですが)SASSPSSなどの商用ソフトウェアを買う余裕のない研究室で、Rを学ぶことができます。

企業のマーケティング担当者などにも注目されています。私が最初にRを教わったのも、インターン先のマーケッターの方でした。(Hadoopの話もしていたので、その人が特別だった感じもありますが)

markezine.jp

統計やデータ解析のデファクトスタンダード

他のデータ分析環境を勉強していても、Rをある程度使えることを前提にした説明がされることが多いです。 例えば『Sparkによる実践データ解析』では、「Sparkシェルでインタラクティブにデータ分析できるよ!要するに大規模なデータに対して使えるRのREPLみたいなものだよ!」みたいな説明がされています。

Sparkによる実践データ解析 ―大規模データのための機械学習事例集

Sparkによる実践データ解析 ―大規模データのための機械学習事例集

また、Rのアイデアは、他の言語やそのライブラリでも取り入れられています。例えば「データフレーム」は、Pythonのpandasパッケージや、Sparkに取り入れられています。

そうです。Hadley Wickhamが僕の畏敬する天使様なのです

数年前は「他の言語ならこういうことできるのに、Rでどうやるのかわからない…ググったら一応分かったけど直感的じゃない…」ということが多かったのですが、Hadley Wickhamの作ったライブラリ群によって劇的に改善しました。

kiito.hatenablog.com

最近「さよならを教えて」にハマってるのでこんなタイトルになってしまいました。最近ダウンロード配信が始まって気軽にプレイできるようになったのでぜひ〜。

www.dlsite.com