Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
OCaml でデータ分析
2017.7.22 ML 勉強会 #2
はじめに
この発表のデモを一緒に楽しみたい人は
● docker のインストール
● docker pull akabe/iocaml-datascience
をお願いします。
自己紹介
● 阿部晃典
● データ分析・サーバサイド開発
● Twitter: @ackey_65535
● GitHub: @akabe
今日話すこと
OCaml でデータ分析環境を作った(作っている)話
● Jupyter (IPython) notebook
● IOCaml
● データ分析用の Docker image
● 実際に使ってみる(デモ)
● 今後の課題
Jupyter + IOCaml
データ分析といえば Python
● 言語仕様自体が数値計算に特化しているわけではない(と思う)
● Python がよく使われる理由(偏見と主観)
○ パッケージが整っている (numpy, scikit-learn, etc.)
○ Jup...
Jupyter (IPython) notebook とは?
● 一言で言うと、対話環境 + 画像の埋め込み + Markdown (LaTeX)
○ コードと実行結果(グラフ等)とドキュメントを一箇所にまとめて保存・管理
○ いろいろな言語に...
百聞は一見にしかず
Markdown
実行結果とグラフ(画像)
プログラム (Python)
IOCaml
● Jupyter は notebooks の表示・管理ツール
● プログラムの実行は kernel が行う
○ kernel: API 化された対話環境
○ プロトコルが公開されているので、 kernel は自作できる
○ R,...
なぜ OCaml でデータ分析?
(主に Python と比較)
● 心が OCaml を求めている
○ 本能に逆らってはダメ!
● 静的型検査は神
○ 長時間実行した後に、くだらないエラーで落ちることが激減
○ 前処理や試行錯誤でデータ構造を...
OCaml/IOCaml の弱み
(主に Python と比較)
● IOCaml がメンテされてない
○ 殆どのファイルの更新が 2 年前、いろいろ機能が不足
● scikit-learn のような守備範囲の広いパッケージがない
○ そもそも...
データ分析用 Docker image
データ分析用の Docker image
akabe/iocaml-datascience
● Jupyter + IOCaml + pre-installed packages
○ 標準ライブラリ Jane Street Core, Batt...
使い方
$ docker run -it -p 8888:8888 akabe/iocaml-datascience
...
[I 13:39:45.080 NotebookApp] Use Control-C to stop this ser...
ホストマシンの notebooks を管理
$ docker run -it -p 8888:8888 
-v $PWD:/notebooks akabe/iocaml-datascience
ホスト上の絶対パス ゲスト(コンテナ)内の絶対パス
デモンストレーション
具体例 (1)
画像のフィルタ
● 画像処理の教科書の最初の
あたりに出てくる例
● コード実行と結果(画像)を
対話的に確認
● これをファイルに書き出して
保存・管理できる
具体例 (2)
Gaussian ランダムウォーク
● GSL で Gaussian 乱数生成
● Archimedes でグラフ化
具体例 (3)
フォルマント推定(音声解析)
● 音声から特徴的な周波数を
推定
● 音声ファイルの読み込み、
FFT、AR パラメータ推定、グ
ラフ化までやってる
● いい感じの実用例になって
いると思う
Tips
Tips
遅いと思ったら:
● #print_depth, #print_length に小さい値を入れる
○ pretty print するデータ量を減らし、 IO とレンダリングを高速化
○ 意外に IO/レンダリングのオーバーヘッドは大き...
今後の課題
IOCaml を作り直す!
● IOCaml はメンテされてない
○ 殆どのファイルは最終更新が数年前、 Pull Request も無視された...
○ ppx が使えない
○ Message authentication の未サポート
○ ...
Upcoming SlideShare
Loading in …5
×

OCaml でデータ分析

1,249 views

Published on

OCaml + Jupyter + Docker でデータ分析環境を構築した話です。

Published in: Science
  • Be the first to comment

OCaml でデータ分析

  1. 1. OCaml でデータ分析 2017.7.22 ML 勉強会 #2
  2. 2. はじめに この発表のデモを一緒に楽しみたい人は ● docker のインストール ● docker pull akabe/iocaml-datascience をお願いします。
  3. 3. 自己紹介 ● 阿部晃典 ● データ分析・サーバサイド開発 ● Twitter: @ackey_65535 ● GitHub: @akabe
  4. 4. 今日話すこと OCaml でデータ分析環境を作った(作っている)話 ● Jupyter (IPython) notebook ● IOCaml ● データ分析用の Docker image ● 実際に使ってみる(デモ) ● 今後の課題
  5. 5. Jupyter + IOCaml
  6. 6. データ分析といえば Python ● 言語仕様自体が数値計算に特化しているわけではない(と思う) ● Python がよく使われる理由(偏見と主観) ○ パッケージが整っている (numpy, scikit-learn, etc.) ○ Jupyter (IPython) notebook がめちゃ便利
  7. 7. Jupyter (IPython) notebook とは? ● 一言で言うと、対話環境 + 画像の埋め込み + Markdown (LaTeX) ○ コードと実行結果(グラフ等)とドキュメントを一箇所にまとめて保存・管理 ○ いろいろな言語に対応 ○ 他にもできることあるけど、省略 ● 実験や分析に便利 ○ コードが実行できるので、再現性を担保できる ○ 結果を整理・グラフ化して、他人に説明するのも楽 ○ 1 notebook = 1 file なので git での管理が楽
  8. 8. 百聞は一見にしかず Markdown 実行結果とグラフ(画像) プログラム (Python)
  9. 9. IOCaml ● Jupyter は notebooks の表示・管理ツール ● プログラムの実行は kernel が行う ○ kernel: API 化された対話環境 ○ プロトコルが公開されているので、 kernel は自作できる ○ R, Scala, Haskell などの kernel が存在 ● OCaml にもあった:IOCaml https://github.com/andrewray/iocaml ○ IOCaml-kernel: バイトコードを実行する kernel (今日のトピック) ○ IOCamlJS-kernel: OCaml を対話的に JS にコンパイルして実行 ■ 個人的に非推奨(数値計算ライブラリは C binding のことが多いため)
  10. 10. なぜ OCaml でデータ分析? (主に Python と比較) ● 心が OCaml を求めている ○ 本能に逆らってはダメ! ● 静的型検査は神 ○ 長時間実行した後に、くだらないエラーで落ちることが激減 ○ 前処理や試行錯誤でデータ構造を頻繁に変えても、型でミスを防げる ○ 型検査・バイトコードコンパイルは高速なので、ストレスなし ● map, fold, パイプ演算子が便利 ○ 汎用的で簡潔、使いやすくて読みやすい ● バイトコードでも簡単な解析には十分な速度が出る ○ まぁ、中では C ライブラリ呼んでるからね ... ○ ネイティブはさらに 10 倍ぐらい速いので、成功したらそのままネイティブコンパイル
  11. 11. OCaml/IOCaml の弱み (主に Python と比較) ● IOCaml がメンテされてない ○ 殆どのファイルの更新が 2 年前、いろいろ機能が不足 ● scikit-learn のような守備範囲の広いパッケージがない ○ そもそも、数値計算ライブラリ・例が少ない ○ 特定の手法の実装など小さめのパッケージが散乱 ○ 解決策 「データ分析系のパッケージを詰めた Docker image を作った」
  12. 12. データ分析用 Docker image
  13. 13. データ分析用の Docker image akabe/iocaml-datascience ● Jupyter + IOCaml + pre-installed packages ○ 標準ライブラリ Jane Street Core, Batteries ○ 数値計算 Lacaml, SLAP, GSL, L-BFGS, FFTW3, libsvm, Tensorflow, etc. ○ データ取得 MySQL, PostgreSQL, Cohttp, etc. ○ 可視化 Cairo2, Archimedes ● GitHub: https://github.com/akabe/docker-iocaml-datascience ● DockerHub: https://hub.docker.com/r/akabe/iocaml-datascience/ ● ちなみに、仕事でもこのイメージを使ってます
  14. 14. 使い方 $ docker run -it -p 8888:8888 akabe/iocaml-datascience ... [I 13:39:45.080 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). [C 13:39:45.081 NotebookApp] Copy/paste this URL into your browser when you connect for the first time, to login with a token: http://localhost:8888/?token=7e836819e98518c13c7f341279cb26b0f3a382240b15b06a この URL をブラウザに貼り付ける
  15. 15. ホストマシンの notebooks を管理 $ docker run -it -p 8888:8888 -v $PWD:/notebooks akabe/iocaml-datascience ホスト上の絶対パス ゲスト(コンテナ)内の絶対パス
  16. 16. デモンストレーション
  17. 17. 具体例 (1) 画像のフィルタ ● 画像処理の教科書の最初の あたりに出てくる例 ● コード実行と結果(画像)を 対話的に確認 ● これをファイルに書き出して 保存・管理できる
  18. 18. 具体例 (2) Gaussian ランダムウォーク ● GSL で Gaussian 乱数生成 ● Archimedes でグラフ化
  19. 19. 具体例 (3) フォルマント推定(音声解析) ● 音声から特徴的な周波数を 推定 ● 音声ファイルの読み込み、 FFT、AR パラメータ推定、グ ラフ化までやってる ● いい感じの実用例になって いると思う
  20. 20. Tips
  21. 21. Tips 遅いと思ったら: ● #print_depth, #print_length に小さい値を入れる ○ pretty print するデータ量を減らし、 IO とレンダリングを高速化 ○ 意外に IO/レンダリングのオーバーヘッドは大きい ● 副作用に逃げる ○ でかいデータは in-place に書き換えたほうが速い ○ (本音を言えば、純粋関数的に書きたい) おかしな挙動をしたら、kernel を再起動すると良い
  22. 22. 今後の課題
  23. 23. IOCaml を作り直す! ● IOCaml はメンテされてない ○ 殆どのファイルは最終更新が数年前、 Pull Request も無視された... ○ ppx が使えない ○ Message authentication の未サポート ○ Jupyter protocol v5 の未サポート ○ comm message の未サポート(ipywidgets 的なライブラリが作れない) ○ Lwt_unix の一部の関数が時々 dead-lock する(自分だけ?) ● 大手術になりそうなので、自分で作りなおすことにしました ○ OCaml の内部実装に詳しい人は色々教えてください ○ opam-repository に入ったら、Twitter で報告します

×