Clojure + swank + slimeでのプログラミングの感覚はR on ESSに似ている

最近でこそ使わなくなったものの、自分にとってRは母国語(第一言語?)みたいなもので結構影響を与えている。Rの言語として好きなところ(例えばapplyで行毎にばさっと関数適用してplotしてデータの様子をさくっと眺めるとか)もあるが、データ解析言語としてのRを支えているのはそのインタラクティブ性だと思う(あれこれ仮説を試しながらデータの性質を見ていく探索的データ解析)。Rによるインタラクティブな解析を支えているものの一つとしてESSを忘れてはいけない。ESSについてはTsukuba.RのLTで(若干宗教っぽく)紹介しているし、RubyでESSに近い環境を作りたいと思ってちょっとしたelispを書いたりしていた。

関数のヘルプがさくっと引けたり、そのついでに関数のexampleを実行できたりなどなどそれはそれはとても素敵なものです。RubyやC++を使うようになってからそれなりに環境を整えたものの、ESS上でのRの使い勝手には遠く及びませんでした(だけど、Rを使わなくなっていったのはnlpとの相性などがあったから、ですが...)。

ESS的な環境にせまるものはもう出てこないのか...と思っていましたが(大袈裟)、Clojure + swank + slimeはかなりESSに近い使い方ができれこれは当たりだと思った。

この環境では、リージョンで囲ったところを実行したり(C-c C-r)、ポイントを置いてる関数のhelpを引いたり(C-c C-d C-d)などよく使う機能にすぐアクセスできる。group-by関数でデータを因子毎にまとめて、frequenciesで頻度を集計して上位10件を眺めたり(take 10 lis)、でかいデータも遅延評価で必要な分だけ処理できる。Incanter: Statistical Computing and Graphics Environment for Clojureを使えば簡単に可視化もできる。Rと違って速度も相当早い(JVM上で動くし、型ヒントなどを与えることもでき、pmap関数などで並行処理も容易に行なえる)ので*1、解析もさらにやりやすくなる。データ解析はデータの整形(logスケールにしたり)、フィルタリング(異常値の削除)、集計(平均や分散などの基本統計量を求める)などからなっているといっても過言ではないが*2、Clojureは整形、フィルタリング、集計に対してmap、filter、reduceという対応する関数を持っている。このことからもClojureがいかにデータ解析に向いている言語であるというのが伝わってくるんじゃなかろうか(ドヤッ)。

唯一おしいなと思うのがexampleが見れないことか...。と、文句を付けるところがこれくらいしか見つからないくらい(前置記法とか3日もすれば慣れる)には快適に解析ができるので相当お勧め。

参考

プログラミングClojure

プログラミングClojure

7つの言語 7つの世界

7つの言語 7つの世界

  • 作者: Bruce A. Tate,まつもとゆきひろ,田和勝
  • 出版社/メーカー: オーム社
  • 発売日: 2011/07/23
  • メディア: 単行本(ソフトカバー)
  • 購入: 9人 クリック: 230回
  • この商品を含むブログ (64件) を見る
The Joy of Clojure

The Joy of Clojure

Clojure in Action

Clojure in Action

*1:RもC拡張などを使えばかなり高速化できるが、clojureは別言語を使う必要がないのはかなりうれしい

*2:ちょっと言い過ぎかもしれない...