BigGorillaついて概要を調べてみた

# やったこと
データの前処理に興味があり資料を探していたところ、[リクルート人工知能研究所、データ統合および準備のオープンソースエコシステム「BigGorilla」を提供開始 | リクルートホールディングス - Recruit Holdings](http://www.recruit.jp/news_data/release/2017/0630_17541.html)というプレスリリースを見つけた。

一見してどういうものなのかよくわからなかったので、概要を調べてみた。

# わかったこと

## BigGorillaとは
[BigGorilla - Data Integration & Preparation in Python](http://www.biggorilla.org/ja/)

- データ前処理におすすめのライブラリが入ったpythonの環境
  - 一部独自実装したライブラリ付き

ネーミングと公式サイトの図から、巨大なフレームワークのような印象だったが、
いわばライブラリ詰め合わせである。
(BigGorilla特有のクラスを継承するといったことはない模様)

実際に前処理をやるには、普通にpythonでプログラミングする必要がある。

[condaによるポータブルなPython環境構築のすすめ - Qiita](http://qiita.com/yubessy/items/2dd43551aa8308dc7eca)

## インストール方法

```
$ anacondaいれて
$ conda env create biggorilla/py3gorilla
# pyenvを使用している場合は、condaのactivateコマンドをフルパスで指定する必要がある。source activate Py3Gorillaだとシェルが落ちる。
$ source /Users/kkanazaw/.pyenv/versions/anaconda3-4.2.0/envs/Py3Gorilla/bin/activate Py3Gorilla
```
参考: [さあ、はじめよう | BigGorilla](http://www.biggorilla.org/ja/setup-big-gorilla/)

~~追記: 2017/07/12時点で試したところ、この方法だと以下のエラーがでて入らなかった。
(6月にアップデートされたファイル名がおかしいせいか、古い方のymlが適用されている気がする。たぶんこれからアップデートで直ると思われる)~~

2017/07/21追記: ファイルアップデートされた。これでドキュメントどおりに入ると思われる。


### 7/12時点で、無理やりインストールした作業記録
```
$ conda env create biggorilla/py3gorilla
Collecting urllib==1.21.1
Downloading urllib-1.21.1.tar.gz (226kB)
100% |████████████████████████████████| 235kB 640kB/s
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/private/var/folders/bx/k4yrl_bd3nb0v8pz7fm60t8r0000gp/T/pip-build-58rsg5li/urllib/setup.py", line 191
s.connect((base64.b64decode(rip), 017620))
                                  ^
SyntaxError: invalid token
 ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/bx/k4yrl_bd3nb0v8pz7fm60t8r0000gp/T/pip-build-58rsg5li/urllib/
CondaValueError: Value error: pip returned an error.
```

[Files :: Anaconda Cloud](https://anaconda.org/BigGorilla/Py3Gorilla/files)からymlをダウンロードしてurllibを指定している行を削除すると、インストールすることはできる。

```
### 一旦環境を消す
$ conda env remove -n Py3Gorilla

# ローカルで修正したymlファイルを指定して、環境再作成
$ conda env create --name test --file ~/Downloads/Py3Gorilla.yml

# pyenvを使用している場合は、condaのactivateコマンドをフルパスで指定する必要がある。source activate Py3Gorillaだとシェルが落ちる。
$ source /Users/kkanazaw/.pyenv/versions/anaconda3-4.2.0/envs/test/bin/activate test

# 動作確認用のnotebookを落としてきて起動
$ anaconda download biggorilla/hi_gorilla
$ jupyter notebook hi_gorilla.ipynb
```

## 何ができるの? どんなライブラリが入っているか見てみる

[Files :: Anaconda Cloud](https://anaconda.org/BigGorilla/Py3Gorilla/files)にインストールされるパッケージの一覧があったので、眺めてみる。
公式サイトのコンポーネント一覧でいろいろ紹介されているけど、インストールされるもののはごく一部だということがわかった。
サイトの説明に比べて、意外とミニマムな構成。
入ってないものは自分でpip installする。

### データ収集
- urllib httpアクセス標準ライブラリ
- requests urllibよりリッチなhttpsアクセスライブラリ 
- scrapy スクレイピング
- (tweepy入ってない)

### データ抽出
- beautifulsoup4 webページの読み込み、解析
- lxml xmlパーサー
- nltk 自然言語処理(形態素解析とか)

### スキーママッチング&マージング
- FlexMatcher(リクルート研究所製)

### データマッチング&マージング
- Magellan(ウィスコンシン大学開発)
  - py-entitymatching, py-stringmatchingというライブラリの一部として提供されている
  
### データ変換
- xlrd Excel操作
- 標準のjson,csv
- pandas
- (pdf系入ってない)

### スキーママッピング
- 商用ツールがされててるだけで入ってない?

### ワークフロー管理
- これも入ってない?

### その他
依存関係なのか、scikit-learnやjupyter-notebookがはいってる。

## 独自実装しているライブラリについて

[プレスリリース](http://www.recruit.jp/news_data/release/2017/0630_17541.html)によると、独自で実装しているのは次の3つのライブラリ

```

現在、RITはKOKOおよびFlexMatcherというパッケージにて上記b)およびd)を開発しており、Doan教授のチームではMagellanというパッケージにてf)を開発しています。

```

### FlexMatcher
- リクルート研究所製スキーママッチングライブラリ
- ２つのデータ間でデータ項目名が違っても、自動で対応関係を見つけてくれる
  - データの内容を教師データにして、類似度を推定している？
- (個人的に興味あり)

### Magellan
- ウィスコンシン大学開発データマッチングライブラリ
- 表記ゆれがあるデータを一つにしたり、住所の名寄せのようなことができる?

### KOKO
- プレスリリースにしか名前がない。~~未公開?~~
- リポジトリが公開されていた
- [biggorilla-gh/koko: Extracting Entities with Limited Evidence](https://github.com/biggorilla-gh/koko)

# つぎにやること
- conda envして実際に環境構築してみる
- FlexMatcherとMagellanを使ってみる