Slide 1

Slide 1 text

Erlang & Elixir Fest 2019 LT Enum.mapから始める Elixir データサイエンス 2019/05/30 ver 0. 5作成 2019/05/31 ver 0. 9作成 2019/06/01 ver 1. 0作成

Slide 2

Slide 2 text

いきなりですが Elixirと言えば…

Slide 3

Slide 3 text

そう、「Enum」 ですよね?w (や、パターンマッチやパイプ等、当然、愛してますよ) Elixir創始者José Valim (とfukuoka.exの面々) José のサイン

Slide 4

Slide 4 text

3 Enum.map/reduceが、かなりイイ具合 大抵のデータ処理は、この2つと、filter/sortをパイプで繋げば、 ほぼ完結と、シンプルで強力過ぎるのが、Elixir最大の魅力です defmodule DataCleansing do def run( filename ) do filename |> File.stream! # データクレンジング |> Flow.map( & String.replace( &1, ",", "¥t" ) ) # ①CSV→TSV |> Flow.map( & String.replace( &1, "¥r¥n", "¥n" ) ) # ②CRLF→LF |> Flow.map( & String.replace( &1, "¥"", "" ) ) # ③ダブルクォート外し # 集計 |> Enum.map( & &1 |> String.split( "¥t" ) ) # ④タブで分割 |> Enum.map( fn [ _head | tail ] -> tail |> List.first end ) # ⑤2番目の項目を抽出 |> Enum.reduce( %{}, fn name, acc -> # ⑥同値の出現数を集計 Map.update( acc, name, 1, &( &1 + 1 ) ) end ) |> Enum.sort( & elem( &1, 1 ) > elem( &2, 1 ) ) # ⑦多い順でソート end end

Slide 5

Slide 5 text

4 他Enumも便利だし、StreamもHaskell風でイイ もしくはTensorFlow風 zip/unzipやslice、take系がステキ

Slide 6

Slide 6 text

5 そして、「Flow」の衝撃 ~マルチコアの雷に打たれた~ 1年半前、BtoB向けマーケティングプロダクト開発にて、2時間も かかっていたデータ処理バッチ (Javaで誰か作った) をどうにか する際、Enumの並列実装「Flow」で同等処理を実装したら、 ナント、6分半で処理できてしまった (しかも1時間で実装完了) このFlowとの衝撃的な出会いから、私はデータ処理領域での Elixirプロダクション適用に本腰を入れ、fukuoka.exのミッション にも、「Elixirによるデータサイエンス実現」が加わりました ■Flow ■Enum

Slide 7

Slide 7 text

6 実はマルチコアとのお付き合いは2011年以来 2003年以降、CPUクロック数が上昇しなくなり、コア数を増やす 方向にCPUメーカーが舵を切って以来、15年近く経ちますが、 マルチコア/マルチスレッドプログラミングは、未だ頭痛の種でしょう 従来/モダンの言語は結構多く使ってきました (実はRustやGo、 C++をけっこう書きますw) が、マルチコアプログラミングの文脈で、 実用性高く、人類が制御できるであろうものに出会ったのは、 Elixir+Flowの組み合わせが初めてです (GHCは好きです)

Slide 8

Slide 8 text

7 参考:最近、出た「Broadway」は「Flow」の後継 今年3月にオースティンで開催された「Lonestar ElixirConf」で、 Elixir創始者 José Valim が披露した「Broadway」は、この 「Flow」の後継ライブラリであり、Flow (GenStage) で未達成 だった「データ消失回避用ダウン」「障害時イベント消失軽減」 と それらを叶える「スーパーバイザツリー構成」を実現します https://www.youtube.com/watch?v=a3FtBNMzMxM

Slide 9

Slide 9 text

しかし、Enum系は 知るほど難点が見え…

Slide 10

Slide 10 text

9 細かい操作を始めるとSQL/pandasと比べてしまう… たとえば、下記のようなところで、Enumの舌足らずを感じます ➢ 「Enum.sort」がイケてない SQLのORDER BYのように第2優先以降が指定できない ➢ LEFT/RIGHT JOIN的な、片方がnilのデータが未対応 ➢ 複数項目指定のdropができない (drop以外にも結構ある) ➢ Enum.reduceで似たような処理を頻繁に書く機会多かった ➢ CSV変換が無い … あと、こんなデメリットもあります ➢ with_indexやatなど、添字アクセス風関数は、オブジェクト 指向屋さんの好物で、Elixirっぽく無いコードを書かせてしまう ➢ 行列やテンソルのようなデータ操作が、カオスになっていく…

Slide 11

Slide 11 text

10 そこでpandasライクなElixirライブラリを作った sort第2以降優先、LEFT/RIGHT JOIN、dropなどの複数 項目指定、Enum.reduce頻出データ処理、CSV変換など、 pandasで良く使うものは、大体揃え、scikit-learnやNumPy の一部実装もクローンしています

Slide 12

Slide 12 text

でも、pandasレベルすら 書きたくなくなったので… (実はPythonでも書きたく無いんですよね…)

Slide 13

Slide 13 text

12 プログラミングレスな、Elixirコード生成処理系を作った Web上でUI操作するだけで、データ変換/集約/クレンジング を行える データサイエンスプラットフォーム「Esuna」 は、UIで 設定したデータ処理をElixirコード生成します (単独実行も可) α版は3日で作り、力武先生にもゲスト出演いただいた昨年6月 「fukuoka.ex#11:データサイエンスにコネクトするElixir」披露 Vue.js+Elixir の組み合わせ以外 では、たぶん3日で 仕上がらないかな

Slide 14

Slide 14 text

13 データ加工だけで無く、ディープラーニングモデルも生成 その後、「ErlangPort」によるElixir-Python連携でKerasの DLモデルを呼べるようにし、Kerasのコードも自動生成可に Kaggleのタイタニック問題を解くコラムで実演しています 第1回:https://qiita.com/piacere_ex/items/ab0b32c521293d4ab38e 第2回:https://qiita.com/piacere_ex/items/771389e1fe66dcf795c5

Slide 15

Slide 15 text

14 データサイエンス以外の分野でも使われ始めています 「Esuna」は、データサイエンス文脈に限らず、データ処理全般を カンタンに取り扱えるため、AI・ML案件だけで無く、以下のような データ処理においても利用しています ① 事業向けデータ整形/集計の「BI」 ※Business Intelligence ② 既存システムのリプレースに伴う「データ移行」 「ETLツール」のカバー範囲を、マルチコアのパワーとErlangVMの 安定性で、高速かつ安全にこなすことが可能です それと、データ操作をElixirコード生成するので、こんな使い方も ③ インプットデータからデータ加工を行うようなWeb/API開発 (データ読込/加工部分がプログラミングレスで生成できる)

Slide 16

Slide 16 text

15 次期Esunaは、データ加工Webアプリ/APIも出力 現在、データ処理部分のみのElixirコード生成ですが、もう一歩 推し進めて、UI上で設定したデータの加工を行い、その加工後 データでCRUDするWebアプリ/API毎、生成する予定です (golangのHugoにデータ加工エンジンを突っ込んだような?) これにより、CRUDする程度のWebアプリ開発している方の仕事 はreduceしてしまおう…とまでは言いませんが、よりクリエイティブ な仕事にパラメータ振りできるようになるでしょう 村山さんのネタと ちょっとかぶったw

Slide 17

Slide 17 text

16 訓練画像の加工/管理もEsunaに搭載予定 現在は、テキスト/数値主体のデータ処理のみの対応ですが、 画像系Deep Learningの退屈で頻出する前処理…たとえば、 ➢ OpenCVでやるような加工 (回転/拡大・縮小/色変更) ➢ オーバーサンプリリングやアンダーサンプリング などの操作と、それら画像の管理もEsunaで簡素化したいです これで、訓練画像の加工/管理の手間が減り、 モデル開発やSIにより集中しやすくなります 「退屈なことはPythonにやらせよう」では無く、 退屈なことは、そもそもやらないようにするために、 ツールに落とし込もう…ということですね (≒自らの生産性を上げるための生産こそ本懐)

Slide 18

Slide 18 text

17 リアルタイムフロント技術「LiveView」でリビルド中 現行バージョンは、Vue.jsでフロントUIを実装していますが、 「Phoenix LiveView」での再実装を始めています Phoenix コミッター、Chris McCordにVue.js版Esunaを見せ、 LiveViewでリビルドする話をしたら、「Github教えて」「グラフは 何のJS?」とか聞かれました (José もメッチャ画面触ってた) とてもフレンドリー

Slide 19

Slide 19 text

18 elixirforumでもEsunaについて聞かれました pandasが好きな方のようだったので、pandas的なデータ操作 ライブラリは、Esuna UIと別々に使えることをお知らせしました (でも、コード生成できるから使ってラクした方がいいよ、ともw)

Slide 20

Slide 20 text

「Esuna」のデモや 突っ込んだ話は…

Slide 21

Slide 21 text

tokyo.ex#11 + fukuoka.ex#24 + Shinjuku.ex#13 akiba.ex + kochi.ex + KYOTOEX + hibikino.ex + α … . 国内の各地域Elixirコミュニティ集合 !!

Slide 22

Slide 22 text

明日のjapan.ex でお話します 機械学習側に BigQuery ML との連携とかも 話せたらいいな

Slide 23

Slide 23 text

22 fukuoka.exが手掛けるデータサイエンスプロダクト ➢ 「Hastega」 … GPU & マルチコアドライバ ➢ 「Cockatrise」 … FPGAドライバ ※予測性能はGPU以上 ➢ 「DeepPipe」 … ディープラーニングコア (MNIST90%超) これらはEsunaと結合し、Pythonツールチェーンと勝負できる、 爆速のデータサイエンスプラットフォームを提供します (TensorFlowやscikit-learnといったMachine Learning/ Deep Learningの牙城を崩しに行く?…かも知れない) 「ツールチェーン」の充実に加え、今月から新たに開始するコラム、 「Esunaで始めるデータサイエンス入門」で、fukuoka.exは、 「Elixirによるデータサイエンス実現」 を福岡だけに限らず、全国/全世界に配信していこうと思います

Slide 24

Slide 24 text

23 最後に: Elixirの「潮目」は今後かなり変わっていく Lonestar ElixirConf 2019の、Bruce Tateのキーノートでは、 José と Plataformatec から始まった初期のElixirの流れが、 José自身の「Elixir Is Done」という、ある種の完了宣言にて、 コミュニティや各アルケミストに開放されていく趣旨の発表でした 今後のElixirおよび周辺を握るカギは「1人1人の投票 (vote)」 https://www.youtube.com/watch?v=KW85rW6-PgI

Slide 25

Slide 25 text

24 ~JEAへのLonestar ElixirConf フォローのお礼~ この場を借りて、ElixirConf登壇参加の渡航費用フォローという、 ステキ過ぎる施策をご提供いただいた「一般社団法人 Japan Elixir Association (JEA)」に、改めて感謝の気持ちをお伝え したいと思います (皆さま、どうぞ一緒に拍手をお願いします) 「Erlang & Elixir Fest 2019」も、JEAの主催となりますが、 毎年、とても素晴らしい「Elixirのお祭りの場」を作っていただき、 アルケミストとしては、本当に嬉しい限りです

Slide 26

Slide 26 text

25 fukuoka.exも、じょじょに海外のElixir勢とシンクロ José との交流を通じて、Elixirのネイティブコード化などコア部分 に関わるコミュニケーションを始めてます また、海外Elixirコミュニティとのジョイントイベントの企画や、各国 Elixirプレイヤーとの「交換留学」的な活動も開始しています https://www.youtube.com/watch?v=qCA-Qu-TPoM

Slide 27

Slide 27 text

ちなみに 私の個人的な動機

Slide 28

Slide 28 text

27 プログラマを36年間続け、現在、「重力プログラマ」中 重力波解析するし、重力・流体・天体シミュレータも作る

Slide 29

Slide 29 text

28 「福岡 理学部」というサークルを主催し、重力の話します 割とガチな物理・数学・相対性理論・量子力学を披露

Slide 30

Slide 30 text

人工衛星100万機 にElixir積んで…

Slide 31

Slide 31 text

ブラックホールに 順々に落として…

Slide 32

Slide 32 text

「事象の地平線」の境界で メッセージパッシングして…

Slide 33

Slide 33 text

「重力制御の技術」 を獲得したい (私の大事な技術課題)

Slide 34

Slide 34 text

33 Qiitaにそれっぽいコラムを挙げているのでご興味あれば https://qiita.com/piacere_ex

Slide 35

Slide 35 text

※9/7 (土) は、Elixirのために カラダを空けておいてください