5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

闘魂Elixir ── 『Python実践機械学習システム100本ノック』をElixirで楽しむ

Last updated at Posted at 2023-12-31

$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$

$\huge{闘魂とは己に打ち克つこと。}$
$\huge{そして闘いを通じて己の魂を磨いていく}$
$\huge{ことだと思います}$

大晦日ハッカソン2023の成果です。

はじめに

Python実践機械学習システム100本ノック』をElixirで楽しんでみます。

会社の同僚がこの本で学んでいると聞いたので冬休みの宿題で私もやってみます。
100本中10本だけ進めました。

Elixirでもやってみたい衝動を抑えられませんでした。
Elixirでもやってみることでより理解が深まるだろうということでその記録を残しておきます。

スクリーンショット 2023-12-31 17.08.21.png

What is Elixir ?

Elixirという素敵なプログラミング言語があるのですね。
その素敵具合は「Elixir Saves Pinterest $2 Million a Year In Server Costs」によく現れています。開発者も経営者もこの事実に瞠目することでしょう。 $2 Million/年の節約ですってよ!、奥さん。


準備

Livebookを使います。
Docker上で動かします。

サポートページの「MLSys_100Knocks.zip」をダウンロードし、展開します。
Dockerコンテナからホスト(開発マシン)のファイルがみえるように次のコマンドでLivebookを起動します。

cd MLSys_100Knocks
docker run -p 8080:8080 -p 8081:8081 --pull always -u $(id -u):$(id -g) -v $(pwd):/data ghcr.io/livebook-dev/livebook

このコマンドは、公式ページのDockerの項に書いてあるコマンドそのままです。

Livebookを使うと、こんな感じでプログラミングができます。

スクリーンショット 2023-12-31 17.08.21.png

Elixirでプログラミング

Elixir pandas」でググると、 @RyoWakabayashi さんの記事が見つかりました。
ありがとうーーーーッ!!! ございます。私もパクリスペクトする感じです。

explorerを利用してみます。

以下、ノック10までのElixirの例です。
何をやっているのかは、『Python実践機械学習システム100本ノック』をお買い求めのうえご確認ください。

Mix.install([
  {:explorer, "~> 0.7.0"}
])
require Explorer.DataFrame

current_dir = "/data/本章/1章"
file_path = fn file_name -> "#{current_dir}/#{file_name}" end

file_path.("output_data") |> File.mkdir_p!()
filename_order_data_csv = file_path.("output_data/order_data.csv") 
m_store = file_path.("m_store.csv") |> Explorer.DataFrame.from_csv!()
m_area = file_path.("m_area.csv") |> Explorer.DataFrame.from_csv!()

files = File.ls!(current_dir)
|> Enum.filter(& String.contains?(&1, "tbl_order_"))
|> Enum.sort(:desc)

[haad_csv | _] = files
empty_df = file_path.(haad_csv) |> Explorer.DataFrame.from_csv!() 
|> Explorer.DataFrame.slice(0, 0)

files
|> Enum.reduce(empty_df, fn csv, acc ->
  df = file_path.(csv) |> Explorer.DataFrame.from_csv!()
  Explorer.DataFrame.concat_rows(acc, df)
end)
|> Explorer.DataFrame.filter(store_id != 999)
|> Explorer.DataFrame.join(m_store, on: [:store_id], how: :left)
|> Explorer.DataFrame.join(m_area, on: [:area_cd], how: :left)
|> Explorer.DataFrame.mutate(takeout_name: if(takeout_flag == 0, do: "デリバリー"))
|> Explorer.DataFrame.mutate(takeout_name: if(takeout_flag == 1, do: "お持ち帰り", else: takeout_name))
|> Explorer.DataFrame.mutate(status_name: if(status == 0, do: "受付"))
|> Explorer.DataFrame.mutate(status_name: if(status == 1, do: "お支払い済", else: status_name))
|> Explorer.DataFrame.mutate(status_name: if(status == 2, do: "お渡し済", else: status_name))
|> Explorer.DataFrame.mutate(status_name: if(status == 9, do: "キャンセル", else: status_name))
|> Explorer.DataFrame.to_csv(filename_order_data_csv)

|>(パイプ演算子)が大活躍です。
こういうプログラムは、 Elixir が一番向いているようにおもいます。

Explorer.DataFrame.mutate/2の連発のところはもっと良い書き方があるかもしれません。
実はマクロのようで、無名関数を作って入れ込んでみたのですがうまく動きませんでした。もっとすっきり書くやり方がわかったら更新します。

empty_dfのマッチで、Explorer.DataFrame.slice(0, 0)と書いているところももっと良い書き方があるかもしれません。

まあ、とにかくここで言いたいことは、 データ変換はElixirが向いています ということです。


大晦日ハッカソン2023

さいごに

Python実践機械学習システム100本ノック』を学んでいます。
まだ10%の進捗です。冬休みの宿題で学びを深めたいと思っています(あくまでも「思っています」)。

Elixirでも書いてみたい衝動を抑えられずに、書いてみました。
|>(パイプ演算子)は最高でした。


人類は不老不死の霊薬を意味する素敵なプログラミング言語Elixirを手に入れました。並行処理を他のプログラミング言語よりも比較的容易に書くことができます。それはきっとコンピュータ資源を有効活用できることにつながるでしょう。巡り巡って世界平和に貢献できることでしょう。

さあ、そこのあなたもElixirの世界へようこそ。
手始めにエリクサーチなんていかがでしょうか。私のオススメです。


闘魂とは、 「己に打ち克つこと。そして闘いを通じて己の魂を磨いていくことである」 との猪木さんの言葉をそのまま胸に刻み込んでいます。
知っているだけで終わらせることなく、実行する、断行する、一歩を踏み出すことを自らの行動で示していきたいとおもいます。
アントニオ猪木さんのメッセージから元氣をもらったものとして、それを次代に語り継ぎ、自分自身が「闘魂」を体現するものでありたいとおもいます。


アドベントカレンダー2023は幕を閉じ、アドベントカレンダー2024が開幕です:rocket::rocket::rocket:

スクリーンショット 2023-12-25 23.37.44.png


$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$
$\huge{1、2、3 ぁっダァー!}$

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?