Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Enum.mapから始めるElixirデータサイエンス
Search
piacerex
June 01, 2019
Technology
3.3k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Enum.mapから始めるElixirデータサイエンス
piacerex
June 01, 2019
More Decks by piacerex
See All by piacerex
実践生成AIレクチャー会(基本編)※高度編イントロ無版
piacerex
1
370
「エッジ×分散生成AI」の技術と変わる産業、そしてITの未来
piacerex
0
720
今のコンピュータ、AI にも Web にも 向いていないので 作り直そう!!
piacerex
1
2k
ノーコードと生成AI、IoTが繋がると何が出来るか?
piacerex
0
95
ElixirがHW化され、最新CPU/GPU/NWを過去のものとする数万倍、高速+超省電力化されたWeb/動画配信/AIが動く日
piacerex
0
570
fukuoka.ex/kokura.exとElixirって何ソレ美味しいの?つまみ食い
piacerex
0
160
PMMとは? … モダンなSaaSプロダクトに必須な役割(「プロマネチョットデキル#5」より)
piacerex
0
290
とうとう実践配備された ElixirDesktopにようこそ!!
piacerex
0
1.8k
7年間アドカレ続け、トップランカー入りしたElixirにようこそ!!
piacerex
0
380
Other Decks in Technology
See All in Technology
攻撃者視点で考えるDetection Engineering
cryptopeg
3
1.9k
20260619 私の日常業務での生成 AI 活用
masaruogura
1
220
新しいVibe Codingと”自走”について
watany
6
330
自宅LLMの話
jacopen
1
600
AAIFに入ってみた ~内から見えるコミュニティ動向~
sato4
0
240
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
3k
2026TECHFRESH畢業分享會 - 原生還是跨平台? App 開發踩坑實錄
line_developers_tw
PRO
0
1.1k
機械学習を「社会実装」するということ 2026年夏版 / Social Implementation of Machine Learning June 2026 Version
moepy_stats
6
2.4k
作って終わりにしない タイミーのセマンティックレイヤー育成の現在地
chanyou0311
4
2.4k
プロダクト開発から業務改善コンサルまで。事業全体へ「染み出す」ことで広がるエンジニアの可能性
ham0215
0
130
アンオフィシャルな、オフィシャルからのお願い
wyamazak_devrel
0
110
連合学習と機密コンピューティング
lycorptech_jp
PRO
0
120
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
187
22k
The Limits of Empathy - UXLibs8
cassininazir
1
360
How GitHub (no longer) Works
holman
316
150k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
Transcript
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作成
いきなりですが Elixirと言えば…
そう、「Enum」 ですよね?w (や、パターンマッチやパイプ等、当然、愛してますよ) Elixir創始者José Valim (とfukuoka.exの面々) José のサイン
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
4 他Enumも便利だし、StreamもHaskell風でイイ もしくはTensorFlow風 zip/unzipやslice、take系がステキ
5 そして、「Flow」の衝撃 ~マルチコアの雷に打たれた~ 1年半前、BtoB向けマーケティングプロダクト開発にて、2時間も かかっていたデータ処理バッチ (Javaで誰か作った) をどうにか する際、Enumの並列実装「Flow」で同等処理を実装したら、 ナント、6分半で処理できてしまった (しかも1時間で実装完了)
このFlowとの衝撃的な出会いから、私はデータ処理領域での Elixirプロダクション適用に本腰を入れ、fukuoka.exのミッション にも、「Elixirによるデータサイエンス実現」が加わりました ▪Flow ▪Enum
6 実はマルチコアとのお付き合いは2011年以来 2003年以降、CPUクロック数が上昇しなくなり、コア数を増やす 方向にCPUメーカーが舵を切って以来、15年近く経ちますが、 マルチコア/マルチスレッドプログラミングは、未だ頭痛の種でしょう 従来/モダンの言語は結構多く使ってきました (実はRustやGo、 C++をけっこう書きますw) が、マルチコアプログラミングの文脈で、 実用性高く、人類が制御できるであろうものに出会ったのは、
Elixir+Flowの組み合わせが初めてです (GHCは好きです)
7 参考:最近、出た「Broadway」は「Flow」の後継 今年3月にオースティンで開催された「Lonestar ElixirConf」で、 Elixir創始者 José Valim が披露した「Broadway」は、この 「Flow」の後継ライブラリであり、Flow (GenStage)
で未達成 だった「データ消失回避用ダウン」「障害時イベント消失軽減」 と それらを叶える「スーパーバイザツリー構成」を実現します https://www.youtube.com/watch?v=a3FtBNMzMxM
しかし、Enum系は 知るほど難点が見え…
9 細かい操作を始めるとSQL/pandasと比べてしまう… たとえば、下記のようなところで、Enumの舌足らずを感じます ➢ 「Enum.sort」がイケてない SQLのORDER BYのように第2優先以降が指定できない ➢ LEFT/RIGHT JOIN的な、片方がnilのデータが未対応
➢ 複数項目指定のdropができない (drop以外にも結構ある) ➢ Enum.reduceで似たような処理を頻繁に書く機会多かった ➢ CSV変換が無い … あと、こんなデメリットもあります ➢ with_indexやatなど、添字アクセス風関数は、オブジェクト 指向屋さんの好物で、Elixirっぽく無いコードを書かせてしまう ➢ 行列やテンソルのようなデータ操作が、カオスになっていく…
10 そこでpandasライクなElixirライブラリを作った sort第2以降優先、LEFT/RIGHT JOIN、dropなどの複数 項目指定、Enum.reduce頻出データ処理、CSV変換など、 pandasで良く使うものは、大体揃え、scikit-learnやNumPy の一部実装もクローンしています
でも、pandasレベルすら 書きたくなくなったので… (実はPythonでも書きたく無いんですよね…)
12 プログラミングレスな、Elixirコード生成処理系を作った Web上でUI操作するだけで、データ変換/集約/クレンジング を行える データサイエンスプラットフォーム「Esuna」 は、UIで 設定したデータ処理をElixirコード生成します (単独実行も可) α版は3日で作り、力武先生にもゲスト出演いただいた昨年6月 「fukuoka.ex#11:データサイエンスにコネクトするElixir」披露
Vue.js+Elixir の組み合わせ以外 では、たぶん3日で 仕上がらないかな
13 データ加工だけで無く、ディープラーニングモデルも生成 その後、「ErlangPort」によるElixir-Python連携でKerasの DLモデルを呼べるようにし、Kerasのコードも自動生成可に Kaggleのタイタニック問題を解くコラムで実演しています 第1回:https://qiita.com/piacere_ex/items/ab0b32c521293d4ab38e 第2回:https://qiita.com/piacere_ex/items/771389e1fe66dcf795c5
14 データサイエンス以外の分野でも使われ始めています 「Esuna」は、データサイエンス文脈に限らず、データ処理全般を カンタンに取り扱えるため、AI・ML案件だけで無く、以下のような データ処理においても利用しています ① 事業向けデータ整形/集計の「BI」 ※Business Intelligence ②
既存システムのリプレースに伴う「データ移行」 「ETLツール」のカバー範囲を、マルチコアのパワーとErlangVMの 安定性で、高速かつ安全にこなすことが可能です それと、データ操作をElixirコード生成するので、こんな使い方も ③ インプットデータからデータ加工を行うようなWeb/API開発 (データ読込/加工部分がプログラミングレスで生成できる)
15 次期Esunaは、データ加工Webアプリ/APIも出力 現在、データ処理部分のみのElixirコード生成ですが、もう一歩 推し進めて、UI上で設定したデータの加工を行い、その加工後 データでCRUDするWebアプリ/API毎、生成する予定です (golangのHugoにデータ加工エンジンを突っ込んだような?) これにより、CRUDする程度のWebアプリ開発している方の仕事 はreduceしてしまおう…とまでは言いませんが、よりクリエイティブ な仕事にパラメータ振りできるようになるでしょう 村山さんのネタと
ちょっとかぶったw
16 訓練画像の加工/管理もEsunaに搭載予定 現在は、テキスト/数値主体のデータ処理のみの対応ですが、 画像系Deep Learningの退屈で頻出する前処理…たとえば、 ➢ OpenCVでやるような加工 (回転/拡大・縮小/色変更) ➢ オーバーサンプリリングやアンダーサンプリング
などの操作と、それら画像の管理もEsunaで簡素化したいです これで、訓練画像の加工/管理の手間が減り、 モデル開発やSIにより集中しやすくなります 「退屈なことはPythonにやらせよう」では無く、 退屈なことは、そもそもやらないようにするために、 ツールに落とし込もう…ということですね (≒自らの生産性を上げるための生産こそ本懐)
17 リアルタイムフロント技術「LiveView」でリビルド中 現行バージョンは、Vue.jsでフロントUIを実装していますが、 「Phoenix LiveView」での再実装を始めています Phoenix コミッター、Chris McCordにVue.js版Esunaを見せ、 LiveViewでリビルドする話をしたら、「Github教えて」「グラフは 何のJS?」とか聞かれました
(José もメッチャ画面触ってた) とてもフレンドリー
18 elixirforumでもEsunaについて聞かれました pandasが好きな方のようだったので、pandas的なデータ操作 ライブラリは、Esuna UIと別々に使えることをお知らせしました (でも、コード生成できるから使ってラクした方がいいよ、ともw)
「Esuna」のデモや 突っ込んだ話は…
tokyo.ex#11 + fukuoka.ex#24 + Shinjuku.ex#13 akiba.ex + kochi.ex + KYOTOEX
+ hibikino.ex + α … . 国内の各地域Elixirコミュニティ集合 !!
明日のjapan.ex でお話します 機械学習側に BigQuery ML との連携とかも 話せたらいいな
22 fukuoka.exが手掛けるデータサイエンスプロダクト ➢ 「Hastega」 … GPU & マルチコアドライバ ➢ 「Cockatrise」
… FPGAドライバ ※予測性能はGPU以上 ➢ 「DeepPipe」 … ディープラーニングコア (MNIST90%超) これらはEsunaと結合し、Pythonツールチェーンと勝負できる、 爆速のデータサイエンスプラットフォームを提供します (TensorFlowやscikit-learnといったMachine Learning/ Deep Learningの牙城を崩しに行く?…かも知れない) 「ツールチェーン」の充実に加え、今月から新たに開始するコラム、 「Esunaで始めるデータサイエンス入門」で、fukuoka.exは、 「Elixirによるデータサイエンス実現」 を福岡だけに限らず、全国/全世界に配信していこうと思います
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
24 ~JEAへのLonestar ElixirConf フォローのお礼~ この場を借りて、ElixirConf登壇参加の渡航費用フォローという、 ステキ過ぎる施策をご提供いただいた「一般社団法人 Japan Elixir Association (JEA)」に、改めて感謝の気持ちをお伝え
したいと思います (皆さま、どうぞ一緒に拍手をお願いします) 「Erlang & Elixir Fest 2019」も、JEAの主催となりますが、 毎年、とても素晴らしい「Elixirのお祭りの場」を作っていただき、 アルケミストとしては、本当に嬉しい限りです
25 fukuoka.exも、じょじょに海外のElixir勢とシンクロ José との交流を通じて、Elixirのネイティブコード化などコア部分 に関わるコミュニケーションを始めてます また、海外Elixirコミュニティとのジョイントイベントの企画や、各国 Elixirプレイヤーとの「交換留学」的な活動も開始しています https://www.youtube.com/watch?v=qCA-Qu-TPoM
ちなみに 私の個人的な動機
27 プログラマを36年間続け、現在、「重力プログラマ」中 重力波解析するし、重力・流体・天体シミュレータも作る
28 「福岡 理学部」というサークルを主催し、重力の話します 割とガチな物理・数学・相対性理論・量子力学を披露
人工衛星100万機 にElixir積んで…
ブラックホールに 順々に落として…
「事象の地平線」の境界で メッセージパッシングして…
「重力制御の技術」 を獲得したい (私の大事な技術課題)
33 Qiitaにそれっぽいコラムを挙げているのでご興味あれば https://qiita.com/piacere_ex
※9/7 (土) は、Elixirのために カラダを空けておいてください