この記事は、Elixir Advent Calendar 2023 シリーズ11 の1日目です
piacere です、ご覧いただいてありがとございます
「Pythonで学び直す高校数学」(以降、本書)を買い、Elixirに書き直そう…と思って早4年、なかなか暇が無くて書けないでいましたが、やっと書く機会が訪れました
なお、本書の内容は割愛するため、お手元に書籍をご用意してください
進行としては、第2章まではPython基礎のためスッ飛ばし、第3章「方程式で図形を描く」から始めていきます
しょっぱなからグラフを扱うため、Livebookを使って実現していきます
Livebookの構築方法は下記の通りです
Elixirのインストールからであれば、下記をご覧ください
あと、このコラムが、面白かったり、役に立ったら、 をお願いします
Elixir Advent Calendar 言語カテゴリ1位 & 全カテゴリ2位!
例年を遥かに超える盛り上がりを見せ、堂々のトップ獲得ッ!
https://qiita.com/advent-calendar/2022/elixir
https://qiita.com/advent-calendar/2022/ranking/feedbacks
https://qiita.com/advent-calendar/2022/ranking/feedbacks/categories/programming_languages
1️⃣ matplotlib相当の「VegaLite」でグラフを描く
Elixirでグラフを書く方法は色々ありますが、Livebook上で「VegaLite」を使うのが、今はもっとも手っ取り早いです
早速、本書P88をElixir化していきます
VegaLiteでグラフを描く準備として、SmartCellで「Chart」を選んでください
下記が表示されたら、「Elixir」をクリックすることでコードブロックを上側に追加してください
追加されたコードブロックに、本書の「# データ」部分と等価な下記コードを入れます
my_data = %{
x: [1, 2, 3, 4, 5, 6, 7],
y: [64.3, 63.8, 63.6, 64.0, 63.5, 63.2, 63.1]}
その後、SmartCellで生成された下記ノーコードブロックの「CHARTING」に上記で定義した変数、「WIDTH」「HEIGHT」に適当な幅/高さを入れ、「Chart」を "line" に設定し、実行すると、グラフが描かれます
ただし、グラフのY軸のスケールが微妙なので、「Convert to Code cell」で、一度Elixirコード化し、カスタマイズしていきます
すると、SmartCellで生成されたノーコードブロックが、Elixirコードに変換されます
Y軸をオートスケールにするには、下記のように scale: %{zero: false}
を追加します
VegaLite.new(width: 800, height: 300, title: "my_data")
|> VegaLite.data_from_values(my_data, only: ["x", "y"])
|> VegaLite.mark(:line)
|> VegaLite.encode_field(:x, "x", type: :quantitative)
|> VegaLite.encode_field(:y, "y", type: :quantitative, scale: %{zero: false})
なお、「Convert to Code cell」だとSmartCellに戻せないので、「Toggle source」でElixirコード表示し、別のElixirコードブロックにコピペしてカスタマイズするのもオススメです
2️⃣ 方程式からグラフへ
2.1 方程式
(Pythonコードが無いため割愛)
2.2 関数
本書P94の y = 3x - 24
のPythonコードをElixir化すると以下の通りです
Pythonコードと異なり、添字でアクセスする必要は無く、値をそのまま使えます
x = 1..11
y = for xi <- x do
3 * xi - 24
end
my_data = %{x: x, y: y}
上記コードを実行し、ノーコードブロックも実行すると、下記のようになります
最後に
「Pythonで学び直す高校数学」では、matplotlibを使ったPythonコードを全量、記述することでグラフ描画していましたが、Elixir/Livebookはデータだけを準備すればノーコードだけでグラフ描画できました
ノーコードからElixirコード化することでカスタマイズもできました
数式部分のコードを差し替えるだけでグラフ化できることも確認できました
次回は、「2.3 関数とグラフ」から「4.4 三角比と角度」までをElixir化していきます
明日は、私で「Elixirで学び直す高校数学②:第3章「方程式で図形を描く」中盤 ~ノーコード戦法でグラフ描けるElixir~」 です