Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Enum.mapから始めるElixirデータサイエンス

506dbe86c6801a3178c0e756df14dbb7?s=47 piacerex
June 01, 2019

 Enum.mapから始めるElixirデータサイエンス

506dbe86c6801a3178c0e756df14dbb7?s=128

piacerex

June 01, 2019
Tweet

Transcript

  1. 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作成
  2. いきなりですが Elixirと言えば…

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

  4. 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
  5. 4 他Enumも便利だし、StreamもHaskell風でイイ もしくはTensorFlow風 zip/unzipやslice、take系がステキ

  6. 5 そして、「Flow」の衝撃 ~マルチコアの雷に打たれた~ 1年半前、BtoB向けマーケティングプロダクト開発にて、2時間も かかっていたデータ処理バッチ (Javaで誰か作った) をどうにか する際、Enumの並列実装「Flow」で同等処理を実装したら、 ナント、6分半で処理できてしまった (しかも1時間で実装完了)

    このFlowとの衝撃的な出会いから、私はデータ処理領域での Elixirプロダクション適用に本腰を入れ、fukuoka.exのミッション にも、「Elixirによるデータサイエンス実現」が加わりました ▪Flow ▪Enum
  7. 6 実はマルチコアとのお付き合いは2011年以来 2003年以降、CPUクロック数が上昇しなくなり、コア数を増やす 方向にCPUメーカーが舵を切って以来、15年近く経ちますが、 マルチコア/マルチスレッドプログラミングは、未だ頭痛の種でしょう 従来/モダンの言語は結構多く使ってきました (実はRustやGo、 C++をけっこう書きますw) が、マルチコアプログラミングの文脈で、 実用性高く、人類が制御できるであろうものに出会ったのは、

    Elixir+Flowの組み合わせが初めてです (GHCは好きです)
  8. 7 参考:最近、出た「Broadway」は「Flow」の後継 今年3月にオースティンで開催された「Lonestar ElixirConf」で、 Elixir創始者 José Valim が披露した「Broadway」は、この 「Flow」の後継ライブラリであり、Flow (GenStage)

    で未達成 だった「データ消失回避用ダウン」「障害時イベント消失軽減」 と それらを叶える「スーパーバイザツリー構成」を実現します https://www.youtube.com/watch?v=a3FtBNMzMxM
  9. しかし、Enum系は 知るほど難点が見え…

  10. 9 細かい操作を始めるとSQL/pandasと比べてしまう… たとえば、下記のようなところで、Enumの舌足らずを感じます ➢ 「Enum.sort」がイケてない SQLのORDER BYのように第2優先以降が指定できない ➢ LEFT/RIGHT JOIN的な、片方がnilのデータが未対応

    ➢ 複数項目指定のdropができない (drop以外にも結構ある) ➢ Enum.reduceで似たような処理を頻繁に書く機会多かった ➢ CSV変換が無い … あと、こんなデメリットもあります ➢ with_indexやatなど、添字アクセス風関数は、オブジェクト 指向屋さんの好物で、Elixirっぽく無いコードを書かせてしまう ➢ 行列やテンソルのようなデータ操作が、カオスになっていく…
  11. 10 そこでpandasライクなElixirライブラリを作った sort第2以降優先、LEFT/RIGHT JOIN、dropなどの複数 項目指定、Enum.reduce頻出データ処理、CSV変換など、 pandasで良く使うものは、大体揃え、scikit-learnやNumPy の一部実装もクローンしています

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

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

    Vue.js+Elixir の組み合わせ以外 では、たぶん3日で 仕上がらないかな
  14. 13 データ加工だけで無く、ディープラーニングモデルも生成 その後、「ErlangPort」によるElixir-Python連携でKerasの DLモデルを呼べるようにし、Kerasのコードも自動生成可に Kaggleのタイタニック問題を解くコラムで実演しています 第1回:https://qiita.com/piacere_ex/items/ab0b32c521293d4ab38e 第2回:https://qiita.com/piacere_ex/items/771389e1fe66dcf795c5

  15. 14 データサイエンス以外の分野でも使われ始めています 「Esuna」は、データサイエンス文脈に限らず、データ処理全般を カンタンに取り扱えるため、AI・ML案件だけで無く、以下のような データ処理においても利用しています ① 事業向けデータ整形/集計の「BI」 ※Business Intelligence ②

    既存システムのリプレースに伴う「データ移行」 「ETLツール」のカバー範囲を、マルチコアのパワーとErlangVMの 安定性で、高速かつ安全にこなすことが可能です それと、データ操作をElixirコード生成するので、こんな使い方も ③ インプットデータからデータ加工を行うようなWeb/API開発 (データ読込/加工部分がプログラミングレスで生成できる)
  16. 15 次期Esunaは、データ加工Webアプリ/APIも出力 現在、データ処理部分のみのElixirコード生成ですが、もう一歩 推し進めて、UI上で設定したデータの加工を行い、その加工後 データでCRUDするWebアプリ/API毎、生成する予定です (golangのHugoにデータ加工エンジンを突っ込んだような?) これにより、CRUDする程度のWebアプリ開発している方の仕事 はreduceしてしまおう…とまでは言いませんが、よりクリエイティブ な仕事にパラメータ振りできるようになるでしょう 村山さんのネタと

    ちょっとかぶったw
  17. 16 訓練画像の加工/管理もEsunaに搭載予定 現在は、テキスト/数値主体のデータ処理のみの対応ですが、 画像系Deep Learningの退屈で頻出する前処理…たとえば、 ➢ OpenCVでやるような加工 (回転/拡大・縮小/色変更) ➢ オーバーサンプリリングやアンダーサンプリング

    などの操作と、それら画像の管理もEsunaで簡素化したいです これで、訓練画像の加工/管理の手間が減り、 モデル開発やSIにより集中しやすくなります 「退屈なことはPythonにやらせよう」では無く、 退屈なことは、そもそもやらないようにするために、 ツールに落とし込もう…ということですね (≒自らの生産性を上げるための生産こそ本懐)
  18. 17 リアルタイムフロント技術「LiveView」でリビルド中 現行バージョンは、Vue.jsでフロントUIを実装していますが、 「Phoenix LiveView」での再実装を始めています Phoenix コミッター、Chris McCordにVue.js版Esunaを見せ、 LiveViewでリビルドする話をしたら、「Github教えて」「グラフは 何のJS?」とか聞かれました

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

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

  21. tokyo.ex#11 + fukuoka.ex#24 + Shinjuku.ex#13 akiba.ex + kochi.ex + KYOTOEX

    + hibikino.ex + α … . 国内の各地域Elixirコミュニティ集合 !!
  22. 明日のjapan.ex でお話します 機械学習側に BigQuery ML との連携とかも 話せたらいいな

  23. 22 fukuoka.exが手掛けるデータサイエンスプロダクト ➢ 「Hastega」 … GPU & マルチコアドライバ ➢ 「Cockatrise」

    … FPGAドライバ ※予測性能はGPU以上 ➢ 「DeepPipe」 … ディープラーニングコア (MNIST90%超) これらはEsunaと結合し、Pythonツールチェーンと勝負できる、 爆速のデータサイエンスプラットフォームを提供します (TensorFlowやscikit-learnといったMachine Learning/ Deep Learningの牙城を崩しに行く?…かも知れない) 「ツールチェーン」の充実に加え、今月から新たに開始するコラム、 「Esunaで始めるデータサイエンス入門」で、fukuoka.exは、 「Elixirによるデータサイエンス実現」 を福岡だけに限らず、全国/全世界に配信していこうと思います
  24. 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
  25. 24 ~JEAへのLonestar ElixirConf フォローのお礼~ この場を借りて、ElixirConf登壇参加の渡航費用フォローという、 ステキ過ぎる施策をご提供いただいた「一般社団法人 Japan Elixir Association (JEA)」に、改めて感謝の気持ちをお伝え

    したいと思います (皆さま、どうぞ一緒に拍手をお願いします) 「Erlang & Elixir Fest 2019」も、JEAの主催となりますが、 毎年、とても素晴らしい「Elixirのお祭りの場」を作っていただき、 アルケミストとしては、本当に嬉しい限りです
  26. 25 fukuoka.exも、じょじょに海外のElixir勢とシンクロ José との交流を通じて、Elixirのネイティブコード化などコア部分 に関わるコミュニケーションを始めてます また、海外Elixirコミュニティとのジョイントイベントの企画や、各国 Elixirプレイヤーとの「交換留学」的な活動も開始しています https://www.youtube.com/watch?v=qCA-Qu-TPoM

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

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

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

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

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

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

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

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

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