Slide 1

Slide 1 text

2019/6/2 (Sun) japan.ex#1 & fukuoka.ex#24 Elixirで始める データサイエンス入門 ~Elixir製データサイエンスプラットフォーム「Esuna」にて~ 2019/05/31 ver 0. 5作成 2019/06/02 ver 0. 9作成

Slide 2

Slide 2 text

1 Elixir、マイナー言語だけど、地味に生活を支えてます

Slide 3

Slide 3 text

2 福岡Elixirコミュニティ「fukuoka.ex」を主催してます 「fukuoka.ex」は、福岡で、Webシステム構築やビッグデータ/ AI・ML領域の「大量アクセス/データの高速処理と安定運用」 「高い開発効率」を両立できる「Elixir」「Phoenix」を盛り上げ、 Elixir自身も進化させていくコミュニティです SI経験に裏付けられた開発ノウハウと大規模インフラ運用知識 といった実践的なElixir活用と、マルチコア/GPU/FPGA活用、 Elixirコンパイラ開発といった、先端領域研究も、熱く展開中!!

Slide 4

Slide 4 text

3 ライブデモする「MeetUp」+入門者OKな「もくもく会」 仕事終わり、くつろぎ、ほろ酔いつつ、Elixir/Phoenix による先端プログラミングに触れるイベントを定期開催 毎月開催で、リモート参加も可なので、よろしければ、 ”福岡 Elixir”でググって、connpassご登録ください ■もくもく会 (毎月、入門者もOK) ■MeetUp (隔月、経験者向け)

Slide 5

Slide 5 text

4

Slide 6

Slide 6 text

5 今年、小倉Elixirコミュニティ「kokura.ex」を発足!! 北九州の小倉で「kokura.ex」を発足しました fukuoka.exと連携しつつ、「福岡市」と「北九州市」を繋ぐこと で「福岡県」全体をElixirで盛り上げつつ、国内各地を繋ぎつつ、 やがて全世界に向けてElixirコンテンツ発信をしたいと思います

Slide 7

Slide 7 text

少しだけ、fukuoka.ex 発足当時のことお話します

Slide 8

Slide 8 text

7 再掲:fukuoka.ex#1

Slide 9

Slide 9 text

8 再掲:fukuoka.ex#1

Slide 10

Slide 10 text

tokyo.ex ↓ fukuoka.ex

Slide 11

Slide 11 text

10 2017/12、Shinjuku.exの高橋さんと意気投合 新宿Elixirコミュ「Shinjuku.ex」を主催し、最近はGlusterで 著名な高橋 敬祐さん (@kske_t) と出会い、fukuoka.exと Shinjuku.exが、わりかし同じ道を辿っていることを聞けました

Slide 12

Slide 12 text

Shinjuku.ex ↓ fukuoka.ex

Slide 13

Slide 13 text

12 fukuoka.exや刺激を受けたコミュニティの元は… fukuoka.ex、およびその姉妹のkokura.exは、こんな感じで、 発足したんです その他、fukuoka.exに刺激を受けて立ち上がった、各地Elixir コミュニティも割とあるようで、その根っこには、実は、tokyo.exと Shinjuku.exがありました (この場を借りて、感謝の言葉です)

Slide 14

Slide 14 text

13 一方、fukuoka.exのこれまで Qiitaコラム化していたり、成果報告スライドをまとめていますので、 よろしければご覧ください https://qiita.com/piacere_ex/items/3b88ebe9882ac8aef0ea https://speakerdeck.com/piacere/2018nian-fukuoka-dot-exji-ri-zhong-jian-cheng-guo-shi-ji-fa-biao

Slide 15

Slide 15 text

本編です

Slide 16

Slide 16 text

15 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 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

そんなEnumを pandas級にレベルアップ

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

更に、データ操作を プログラミングレスに…

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

23 現在、UIリニューアルし、プロダクション利用しています 列ドリブンな操作メニューと、順番通りに進めればデータ処理系が 作れる9ステップのナビと、直感的なUIに全面リニューアルしました データソースとして、CSV/ExcelやDBだけで無く、AWSやGCP、 汎用APIにも対応…たとえば、CSVとBigQueryとかJoin可w Kaggleの 「タイタニック問題」 (Titanic: Machine Learning from Disaster) をロードしていて、 欠損値の補完など を前述コラムにて

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

それではEsunaで データサイエンス入門 https://qiita.com/piacere_ex/items/ab0b32c521293d4ab38e

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

31 最後に: 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 33

Slide 33 text

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

Slide 34

Slide 34 text

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