🔧nextjournal/clerk
📝Jupyter Notebookに対抗するようなClojureのツール.
Info
オープンソースだが, Nextjournalという, 📝Reproducible Researchのサービスを出している会社が力をいれて開発をしている.
Basics
- clerk/serve!: REPLと接続してnamespaceを共有するような内蔵サーバを起動.
- cleak/show!: notebookのnamesapceをブラウザに表示.
- clerk/clear-cache!: キャッシャクリア(トラブルシューティング).
組み込み表示関数
- clerk/table: テーブル表示
- clerk/vl: 📝Vega-Liteのデータを表示.
💡Clojure: Jupyter Notebook連携でox-babelを使おうとした時の課題は, テーブルデータや画像の表示だった. テキストならよいがメディアをOrg-modeでつかうのはあまり適していない. この点においてはJupyter notebookは優れていた. しかしclerkならば, 組み込みの表示関数がいい感じにデータを可視化してくれる👍
Tips
コードを非表示にするには?
非表示にしたい部分で以下を書く.
- code
- hide
- fold
- show
- result
- hide
- fold
- show
^{:nextjournal.clerk/visibility {:code :hide}}
namespace全体に適応もできる.
(ns visibility
{:nextjournal.clerk/visibility {:code :fold}})
tech.ml.datasetの関数をつかうと監視でエラー
ハマったのでメモしておく, 原因不明.
tech.v3.datatype.functionalに含まれるような関数でデータ処理をしてそれを名前空間に変数束縛ししたとき, clerkの監視でエラーする.
変換処理をしたものはbindしないか変換し直す.
(require '[tech.v3.datatype.functional :as dfn])
(clerk/table
(-> ds
(tc/add-columns {:test-lv (fn [x] (dfn/shift (:lv x) 1))
:test-sv (fn [x] (dfn/shift (:sv x) 1))})))
(def test-ds
(-> ds
(tc/add-columns {:test-lv (fn [x] (dfn/shift (:lv x) 1))
:test-sv (fn [x] (dfn/shift (:sv x) 1))})
(tc/rows :as-maps)))
さらにupdate.
たぶんdfnで処理するとoutputの型がよくわからないものになる. intoなどでvectorに変換するとか, (tc/convert-type ds :float64)みたいな明示的な型変換が必要.
(def test-ds
(-> ds
(tc/add-columns {:test-lv (fn [x] (dfn/shift (:lv x) 1))
:test-sv (fn [x] (dfn/shift (:sv x) 1))})
(tc/convert-types [:test-lv :test-sv] :int64)
))
htmlにexportするには?
clerk/build!をつかう.
Insights
I don’t like notebooks.- Joel Grusという動画からインスパイヤされたようで, Jupyter Notebookにおけるコードの管理や再利用性の煩雑さを解決しようとするもので, Jupyter Notebookを単にClojureで模倣したものではない.
👨Jeremy Hawardさんに反論していた…
アイデアとしてはClojureのnamespaceごとにnotebookをClojureのコードから生成する. そうすると, そもそもnotebookはコードでしかないから, 他の関数ともREPLを通じてデータも関数もなんでも共有できる, それはつまり📝Clojure REPL駆動開発の流儀でデータサイエンスができる.
References
- https://github.clerk.garden/
- clerk notebookの公開.
🔧Clojure: Oz
📝Vega-LiteのClojure Wrapper.
Ozの情報自体は漁ってもあまりでてこないので, Vega Liteの情報でいろいろ調べたほうがいい. もしくは, Python Bindingsの📝Altairの情報は日本語でもそこそこある.
info
- url: https://github.com/metasoarous/oz
- links:
org-mode and Oz
Ozの出力をOrg-modeにinline表示するための方法. Ozは画像ファイルとして出力をしないので, 他の方法のように画像を吐き出して表示ができない. その代わりに, vega-cliという外部ツールをつかって画像を吐き出して表示する.
- https://github.com/applied-science/emacs-vega-view/issues/9
- https://github.com/metasoarous/oz/issues/42
- https://github.com/vladkotu/vladkotu.github.io/blob/source/blog/org-clj-plot/clj-plot.org
ref. ✅Clojure: 文芸的プログラミング with org-babel
emacs-vega-view
Emacsでvegaの画像を生成してバッファに表示. 内部でvega-cliをつかっている.
https://github.com/applied-science/emacs-vega-view
tips: JSONのkeyはkebab-caseではなくcamelCase
Clojureだとkebab-caseが主流だが, JSONのkeyはcamelCaseで書く.
ex.) timeUnit.