ポエム
Jupyter1はまっさらな紙だ. テキストはもちろんグラフやマルチメディアなファイルの描画までもでき, 聡明なデータ解析界隈の方々はここにかたちあるものを, 時には未来までも描いているのだろう.
私にはできなかった. 数学的教養とテキストエディタがなかったからだ23.
Jupyterは真っ白な紙だ. 真っ白な紙の上では, 字は汚いし漢字は書けないしspellだってまともに書けない4.
シームレスさを求めた結果, plainファイルをインターフェースとすることで, 任意のエディタからpythonを実行できるREPL wrapperができた.
簡単に美味しいREPLのレパートリーを増やしませんか?
お客様ぁ〜、REPLをもっとシームレス簡単にエディタから実行できるoctaltree/wreplのご紹介です!これ、見ての通りWatch-Read-Eval-Print Loop!だから使い勝手がとってもいいんです!
使い方は簡単ですっ。例えばfoo.py
を持ってくる、ご注目!
いきますよ、よく見といてください。
これ、上下に編集するだけ!ただただひたすらに、上下に上下にしこしこ しこしこ。
importnumpyasnpa=np.arange(6).reshape((2,3))print(a)# ここまで書いて一度保存b=a*2print(b)
実行結果が千切りになって出てくるんです!さぁご覧ください!はいっ!これで千切りのかぁ〜んせぇい!
$ wrepl foo.py # 実行後にfoo.pyをエディタで編集する
> import numpy as np
> a = np.arange(6).reshape((2, 3))
> print(a)
> # ここまで書いて一度保存
# start 2019-03-30T02:34:27Z
[[0 1 2]
[3 4 5]]
# finish 2019-03-30T02:34:27Z
> b = a * 2
> print(b)
# start 2019-03-30T02:34:33Z
[[ 0 2 4]
[ 6 8 10]]
# finish 2019-03-30T02:34:33Z
でも、よく切れるでしょう?
再現方法はというと、このまんま保存されていて、じゃぶじゃぶじゃぶとログファイルを実行するだけ!とっても簡単で、便利なんです。
importnumpyasnpa=np.arange(6).reshape((2,3))print(a)# ここまで書いて一度保存# start 2019-03-30T02:34:27Z#1 [[0 1 2]#1 [3 4 5]]# finish 2019-03-30T02:34:27Zb=a*2print(b)# start 2019-03-30T02:34:33Z#1 [[ 0 2 4]#1 [ 6 8 10]]# finish 2019-03-30T02:34:33Z
ちなみにお客様ぁ、これ、実行ごとにグローバル変数を保存していて、実はこれ以前の変数を使うことができるんですね。変数を保存してるので、差分だけを実行できて使いやすいんですっ。
いきましょう!同じfoo.py
をもってきます。今度は、しこしこ しこしこ
importnumpyasnpa=np.arange(6).reshape((2,3))print(a)# ここまで書いて一度保存b=a*2print(b)# ここでwrepl foo.pyをC-cで終了し再度実行したimportmatplotlib.pyplotaspltprint(a+b)
$ wrepl foo.py`
> # ここでwrepl foo.pyをC-cで終了し再度実行した
> import matplotlib.pyplot as plt
> print(a + b)
# start 2019-03-29T15:48:49Z
[[ 0 3]
[ 6 9]
[12 15]]
# finish 2019-03-29T15:48:49Z
わかりますよねぇ。この結果は一目瞭然でぇ〜す。さあ、ご覧ください!a
, b
が保存されていた変数、print(a + b)
が新たに実行されたスニペット、この結果は皆さまお好みでお召し上がりになってください、
でもね、このplt
ってなんか気になりません?思い出しました?そう、あれ!あの視覚化で有名なmatplotlibが、なんとご家庭で、このoctaltree/wreplがあれば、簡単に再現することができちゃうんです。これ、実際関数にくるんで保存してください。ほんっとに美味しいから、オススメなんです。
def f():
plt.plot(range(len(a)), a[:, 0])
plt.show()
f()
# fが保存されるためaが変更されていなければ同じグラフを見ることができる
a = np.arange(6)
def draw(a):
def view(a):
plt.plot(a, a * 2)
plt.show()
return lambda: view(a)
f = draw(a)
f()
a = -a
f()
# これだけくるんであげるとfはaを内部に持つ関数であるため
# グローバル変数aが変更されても同じグラフを見ることが出来る
さあお客様ぁ、このoctaltree/wrepl見ていただけました?任意のpythonが実行できるし、お手入れも簡単だし、データを美味しく、たっぷり解析してくださいね。
いろんなファイルが簡単REPLに!octaltree/wrepl、今ならMITがついて、お値段0円でのご提供です。
スゥーッ
こんなもの!(ガシャーン) こんな!wrepl
なんて!
こんなぁぁぁッ!
参考文献
- Joel Grus (@joelgrus). "I Don't Like Notebooks - Joel Grus - #JupyterCon 2018". Google スライド. https://docs.google.com/presentation/d/1n2RlMdmv1p25Xy5thJUhkKGvjtV-dkAIsUXP-AL4ffI/preview#slide=id.g362da58057_0_1, (参照 2019-03-30)
- atouda. "【クッソー☆】霊夢と魔理沙のチョコ咀嚼☆口移しチャレンジ". ニコニコ動画. https://www.nicovideo.jp/watch/sm28108413, (参照 2019-03-30).
- 谷口です。 (id:taniguchideath). "【書き起こし】 RRM姉貴 るりま サラダおろし". 谷口です。のブログ. http://taniguchidesu.hatenablog.com/entry/2016/04/18/003416, (参照 2019-03-30).