Clojureでデータ解析をはじめる前に知っておきたい参考書及びライブラリ

2015/11/14 投稿：
統計解析、ビッグデータに携わる場合、避けて通れないのが、データ取得・データクリーニング・仮説・検証です。
一般的にRやPythonで仮説・検証・モデルを作成し、CやJAVAで本番にのせる（納品するもの）かと思います。

RやPythonでもよいのですが、お手軽にデータ取得・データクリーニング・仮説・検証から本番までをすべてClojureでやってしまおうというのも今後の仕事の１つのやり方になるかもしれません。そこで今回は、Clojureで統計解析、ビッグデータをやるには、まず何の本を読んだらよいのか、そしてどんなライブラリを知らなければならないのか簡易ではありますが、まとめることにしました。

# 参考書
参考書としては、残念ながら、日本語の本はなく、海外の本を読むしかありません。
おそらく以下の４冊が海外では定番になっているのではないかと思います。お金に余裕のある方や会社がお金出してくれるよ～という方は、大人買いで全部買ってしまうのがベストかと思いますが、趣味で統計解析やっていて、時間がなくて嫁に財布の紐を握られているお小遣い制の僕らにそんな余裕はありません。まず、１冊、自分にあった当たりの参考書をみつけるのに役立ててもらえればと思います。

目次を簡単にまとめましたが、packtpubのサイトでサンプルダウンロードすると、もっと詳細な目次、各章の説明が見れますのでそちらをみていただくことをおすすめします。
また、Kindleでもサンプルダウンロードできますので、そちらで確認いただいてもよろしいかと思います。

## Clojure for Machine Learning（2014年4月,292頁）
[オライリー](http://shop.oreilly.com/product/9781783284351.do) [packtpub](https://www.packtpub.com/big-data-and-business-intelligence/clojure-machine-learning)

```
目次（Table of Contents）
01: WORKING WITH MATRICES　
02: UNDERSTANDING LINEAR REGRESSION
03: CATEGORIZING DATA
04: BUILDING NEURAL NETWORKS
05: SELECTING AND EVALUATING DATA
06: BUILDING SUPPORT VECTOR MACHINES
07: CLUSTERING DATA
08: ANOMALY DETECTION AND RECOMMENDATION
09: LARGE-SCALE MACHINE LEARNING
```

## Clojure for Data Science（2015年9月,608頁）
[オライリー](http://shop.oreilly.com/product/9781784397180.do) [packtpub](https://www.packtpub.com/big-data-and-business-intelligence/clojure-data-science)

```
目次（Table of Contents）
01: STATISTICS
02: INFERENCE
03: CORRELATION
04: CLASSIFICATION
05: BIG DATA
06: CLUSTERING
07: RECOMMENDER SYSTEMS
08: NETWORK ANALYSIS
09: TIME SERIES
10: VISUALIZATION
```

## Mastering Clojure Data Analysis（2014年3月,340頁）
[オライリー](http://shop.oreilly.com/product/9781783284139.do) [packtpub](https://www.packtpub.com/big-data-and-business-intelligence/mastering-clojure-data-analysis)

```
目次（Table of Contents）
01: NETWORK ANALYSIS - THE SIX DEGREES OF KEVIN BACON
02: GIS ANALYSIS - MAPPING CLIMATE CHANGE
03: TOPIC MODELING - CHANGING CONCERNS IN THE STATE OF THE UNION ADDRESSES
04: CLASSIFYING UFO SIGHTINGS
05: BENFORD'S LAW - DETECTING NATURAL PROGRESSIONS OF NUMBERS
06: SENTIMENT ANALYSIS - CATEGORIZING HOTEL REVIEWS
07: NULL HYPOTHESIS TESTS - ANALYZING CRIME DATA
08: A/B TESTING - STATISTICAL EXPERIMENTS FOR THE WEB
09: ANALYZING SOCIAL DATA PARTICIPATION
10: MODELING STOCK DATA
```

## Clojure Data Analysis Cookbook, 2nd Edition（2015年1月,372頁）
[オライリー](http://shop.oreilly.com/product/9781784390297.do) [packtpub](https://www.packtpub.com/application-development/clojure-data-analysis-cookbook-second-edition)

```
目次（Table of Contents）
01: IMPORTING DATA FOR ANALYSIS
02: CLEANING AND VALIDATING DATA
03: MANAGING COMPLEXITY WITH CONCURRENT PROGRAMMING
04: IMPROVING PERFORMANCE WITH PARALLEL PROGRAMMING
05: DISTRIBUTED DATA PROCESSING WITH CASCALOG
06: WORKING WITH INCANTER DATASETS
07: STATISTICAL DATA ANALYSIS WITH INCANTER
08: WORKING WITH MATHEMATICA AND R
09: CLUSTERING, CLASSIFYING, AND WORKING WITH WEKA
10: WORKING WITH UNSTRUCTURED AND TEXTUAL DATA
11: GRAPHING IN INCANTER
12: CREATING CHARTS FOR THE WEB
```

# ライブラリ

さらに上記の本でどんなライブラリを利用しているのか調査してみたところ、上記４冊で全部で４０サンプルプロジェクト程度がありました。packtpubのサイトでサンプルダウンロードすることができます。各々のプロジェクトのproject.cljから依存しているライブラリを抽出し、利用しているプロジェクト数をカウントした結果は以下の通りです。（ただし、clj-time、org.clojure/data.csv、org.clojure/data.json、org.clojure/data.xmlなどの基本ライブラリは除いています）

```
・incanter          （３０プロジェクト）：機械学習ライブラリ
・clj-ml              （７プロジェクト）：機械学習ライブラリ
・cc.mallet/mallet    （５プロジェクト）：自然言語処理ライブラリ
・opennlp             （４プロジェクト）：自然言語処理ライブラリ
・org.encog/encog-core（３プロジェクト）：機械学習ライブラリ
```

圧倒的に「incanterライブラリ」でした。４冊すべてで紹介されています。
incanterの[公式サイト](http://data-sorcery.org/contents/)をみればどんなことができるのかわかりますが、日本語ないの？
という場合は、あんちべさんのサイトを見ていただければと思います。
・[統計解析アプリ「Incanter」入門](http://antibayesian.hateblo.jp/entry/20111128/1322494688)
・[Clojure/Incanter/clj-mlでデータマイニング入門](http://antibayesian.hateblo.jp/entry/2014/02/16/021401)

次に「clj-mlライブラリ」です。
wekaのClojure版のライブラリです。昔から統計解析をやっていた方なら、wekaをご存知の方も多いかと思います。
[wekaのwikipedia](https://ja.wikipedia.org/wiki/Weka)
「Clojure for Data Science」、「Clojure for Machine Learning」で紹介されていました。

その次に「cc.mallet/mallet」というライブラリです。
「Clojure for Data Science」、「Clojure Data Analysis Cookbook, 2nd Edition」、「Mastering Clojure Data Analysis」でも紹介されてました。「opennlp」は、JAVAのものを直接使ってる版と、ラッパーしているClojure版がありました。
ただし、自然言語処理系のライブラリは、英語に特化していることが多く、(kuromoji等、形態素解析ライブラリと組み合わせてうまく対応する方法もありますが)日本語だと一筋縄でいかないので注意が必要です。簡単な例だと、英語は語彙がSPACE区切りですが、日本語は句読点かつ単語の切れ目が機械だと判別しにくいことが挙げられます。

私は知らなかったのですが、「org.encog/encog-core」というライブラリは、「Clojure for Machine Learning」と「Mastering Clojure Data Analysis」で紹介されてました。encog（エンコグと呼ぶ）は、比較的新しい(といっても2008年から)ライブラリで、ニューラルネットワークに強いとのことです。
[encogのwikipedia](https://ja.wikipedia.org/wiki/Encog)

以下の個人的に気になるライブラリはそんなにサンプルはなかったようです。
ともに「Clojure for Machine Learning」で紹介されていました。

```
・svm-clj       （１プロジェクト）
・clj-liblinear （１プロジェクト）
```

その他、「Clojure for Data Science」で「mahout」を紹介していました。
クラスタリングとレコメンデーションの２プロジェクトで利用されていました。
また、「Clojure for Data Science」では、「hadoop」、「spark」も紹介されていたので興味深かったです。

各書籍のclojureのバージョンは以下のとおりです。
2015/11現在、最新版は1.7です。

```
「Clojure for Machine Learning」               → 1.5.1
「Clojure for Data Science」                   → 1.6.0
「Mastering Clojure Data Analysis」            → 1.5.1
「Clojure Data Analysis Cookbook, 2nd Edition」→ 1.6.0
```

# 感想

あくまで私の主観が入っていますが、４冊をサンプルダウンロードしてみて感じたことは、「Clojure for Data Science」から読みはじめるのがよいかもしれません。

統計解析の知識・ライブラリが網羅的（浅く広く）です。また、サンプルコードが各々短く、読みやすい気がします。
なお、出版日付も一番最新でかつ頁数も608頁とダントツなので、おそらく説明もそれなりに詳しいかと思います。

本来であれば、著者の情報まで追えればよかったのですが、力尽きたのでこれくらいにしようかと思います。
※ 各々目的やレベルに応じて本の選択を行っていただければと思います。自己責任でお願いします。