上の節ほど新しい. できるだけ最新の概説に従った方がよい.
私が使っているWindows機は64ビット機なのでそれに合わせてバイナリをダウンロードした.
(1) Anaconda Downloads から Windows 用のAnaconda Python 3.6 version (以下 Anaconda3 と呼ぶ)のインストーラーをダウンロードし, Anaconda3 を
C:\Anaconda3
以下にインストールする. Jupyter を使用できるかどうか確認する. ショートカットの内容をいじると Jupyter で使えるディレクトリの位置を変えることができる.
(2) Windows の環境変数を
JUPYTER=C:\Anaconda3\Scripts\jupyter.exe
に設定しておく. これによって, Julia言語の方で使用する Jupyter のバイナリが Anaconda3 のバイナリになる.
(3) Julia Downloads から Julia v1.0.0 の Windows Self-Extracting Archive をダウンロードし,
C:\Julia-1.0.0
以下にインストールする.
(4) Julia v1.0 のバイナリを起動する.
(5) julia>
プロンプトで ]
と入力すると, パッケージを扱うモードに入ることができ, プロンプトは (v1.0) pkg>
に変わる. Control-C でもとの julia>
プロンプトに戻れる. 以下の作業を実行する.
julia> ENV["PYTHON"] = raw"C:\Anaconda3\python.exe"
julia> ]
(v1.0) pkg> add IJulia
(v1.0) pkg> build IJulia
(v1.0) pkg> add PyCall
(v1.0) pkg> build PyCall
(v1.0) pkg> add PyPlot
(v1.0) pkg> build PyPlot
(v1.0) pkg> precompile
(v1.0) pkg> ^C
julia>
以上の build
の実行は必要ないかもしれない. すべてに成功したら,
julia> using PyPlot
julia> xs = -5:0.01:5
julia> plot(xs, sin.(xs))
と実行してプロットに成功したら, PyCall と PyPlot のインストールに成功している.
(6) Jupyter を起動する. ブラウザにJupyterの窓が開くはずである.
(7) 右上の New のメニューの中に Julia 1.0.0 が追加されているはずであり, それを選択すると Julia 1.0.0 のタブが開き, しばらく待つと, Julia 1.0.0 のカーネルが起動され, 使用可能になる. そこで
using PyPlot
xs = -5:0.01:5
plot(xs, sin.(xs))
を実行すれば, その下にサインカーブがプロットされるはずである. これで IJulia のインストールにも成功していることが確認できた.
より進んだ使い方についてはこの文書の下の方を参照せよ.
using PyPlot
xs = -5:0.01:5
figure(figsize=(5,3))
plot(xs, sin.(xs))
grid(true)
下の方でも説明しておきましたが、自分のパソコンで Julia 言語を Jupyter notebook で使えるようにするためには、JuliaPro をインストールする方法が簡単です。この方法なら巨大インストーラーのダウンロードに成功してしまえば、インストーラーのダブルクリック一発でいとも簡単に Julia 言語を楽しめるようになります。
これは個人的な意見ですが、初心者の人は JuliaPro をインストールして使う場合には、Juno ではなく、主に Jupyter から Julia を使用するのがよいと思います。 Pkg.add("PackageName")
や Pkg.status()
も Jupyter notebook 上で行うと記録が自動的に残って便利です。
Julia言語で数値計算のプログラムを書きたい人はおそらく「高速に計算したい」というモチベーションを持っていると思います。そのような人は次のリンク先も見ておいた方がよいでしょう。
JuliaPro を入れた人には以下の作業は必要ない. まず
Juliaに触って見ようと思った時に便利なリンク集(2017年末版)
に目を通しておく.
(1) AnacondaのPython 3.*版をインストールする. 私は次の場所にインストールした:
C:\Anaconda3
これでPythonとJupyterが使えるようになったはず. そのことを確認する.
(2) 環境変数 JUPYTER を設定する.
JUPYTER=C:\Anaconda3\Scripts\jupyter.exe
これを忘れるとあとで Pkg.add("PyPlot")
をJulia言語で実行したときに二重にPython環境がインストールされてしまうことになる(時間とディスクスペースが無駄になる).
(3) Julia をインストールする. 私は次の場所にインストールした:
C:\Julia-0.6.2
(4) julia.exe を起動して, 以下を実行する.
Pkg.add("IJulia")
これでJupyterでJulia言語が使えるようになったはず. そのことを確認する.
(5) julia.exe を起動して, または, JupyterからJuliaのノートブックを立ち上げて以下を実行する.
ENV["PYTHON"]="C:\\Anaconda3\\python.exe"
Pkg.add("PyPlot")
これでJuliaから使うPythonがAnaconda3のpython.exeになり, PyPlot
でグラフをプロットできるようになったはず. グラフのプロットはJupyter上で行う.
using PyPlot
plot(rand(10), rand(10))
でそのことを確認できる.
これだけでもかなり快適にJulia言語を使えるのですが, さらに細かく注意深くインストールしたい場合には以下を参照して下さい.
windows でJuliaの開発環境を整える (会話なのでわかりやすいと感じる人がいるかも)
Julia v0.6.1のインストールとJupyter Notebookで使うまで
WindowsへJulia(IJulia)をインストールする+Powershellでファイルをダウンロードする (Pkg.add("IJulia")をしたいときに認証プロキシ環境下のWindowsだといろいろ大変だったという話)
WindowsへJulia(IJulia)をインストールする+なるべくdownload関数を使用しない (プロキシサーバを突破できずに困ってしまっている人のための解説)
Julia v0.6 チュートリアル 2017/08/22
Julia Plots Gallery (Plotsパッケージによる作画法)
Windows 7 と 8.1 の Windows 機で Julia + Jupyter Notebook を使用できるようにした。
以下は主に Windows 8.1 機へのインストールの記録。
2017-06-15 Anaconda3 と Julia v0.5.2 を入れた。
2017-06-20 Julia v0.6.0 を入れ、v0.5.2のパッケージもすべて入れ直した。
2017-10-28 Julia v0.6.1 を入れた。
2017-12-19 Julia v0.6.2 を入れた。
2018-01-19 JuliaPro v0.6.2.1 MKL も入れて併用するにした。
Julia を Jupyter Notebook で使用するための最も簡単な手段は
を使用することである。
いきなり Anaconda や Julia をインストールしようとするより前に、こちらを試してみて感触をつかんでおいた方がよいと思う。私も JuliaBox の方を先に使い始めていた。
旧バージョンの https://v1.juliabox.com/ ではパッケージなども含めて500MBしか使用できなかったので、大きなパッケージは実質的に使用不可能だった。しかし、新しい JuliaBox https://next.juliabox.com では使用できるディスク容量が増えており、実用上十分なパッケージをインストールできるようになった。
現在の JuliaBox で満足できない場合には、手もとのパソコンで Julia 言語を使用するための環境を整備した方がよいだろう。
2018年1月24日追記
以下で解説するように、Jupyter notebook を使うために自前でPython環境を準備てそれに合わせてJuliaをインストールしなくても、JuliaPro をインストールするだけで Julia を Jupyter notebook で利用できます。
https://juliacomputing.com/products/juliapro.html
から DOWNLOAD Free の方をクリックして、登録手続きを済ませれば、JuliaPro personal 無料版をダウンロードできるようになります。巨大なパッケージなのでダウンロードに苦労するかもしれません。しかし、これのインストーラーさえダウンロードできてしまえば、インストーラーをダブルクリックしてインストールするだけで、JuliaをJupyter notebookで使えるようになります。ハードディスクの消費量は2GB強でした。
Windowsユーザーであれば
JuliaPro-0.6.2.1 (for Windows) - (680.55M)
をダウンロードすればよいだろう。
JuliaPro では MKL = Intel Math Kernel Library をリンクしたバイナリも配布されている。予想外のトラブルに自分で対処できるならばこちらをダウンロードして試してみてもよいかもしれない。 (初心者にはおすめしない。)
Windows ユーザーならば
JuliaPro-0.6.2.1 - MKL (for Windows) - (811.97M)
がそのMKL版である。
Juliaの通常版は MKL ではなく、数学ライブラリとして Open BLAS をリンクしている。Open BLAS も十分も速い。行列の対角化についてはMKL版の方が3割程度計算時間が短くなるようだが、あらゆる項目で MKL の方が Open BLAS よりも十分に勝っているようには見えない。私が行ったベンチマークテストの結果は以下の場所で公開されている。
http://nbviewer.jupyter.org/gist/genkuroki/7f6437f97405607347a635cf6f631a48
しかし、行列の固有値・固有ベクトルの計算(eig
函数の計算)については Open BLAS 版で計算した場合よりも、MKL版で計算した場合の方が計算時間が3割ほど少なくて済んだ。行列の対角化のハードな計算をしたい人は MKL 版を使う価値があると思う。
https://gist.github.com/genkuroki/46c278bfaaa0d7e652123177972b568d
この節の内容は JuliaPro 以外の Julia を自分のパソコンにインストールしていない人には関係しない.
私は JuliaPro v0.6.2.1 MKL 版を
C:\JuliaProMKL-0.6.2.1
以下にインストールし、JuliaProではない通常版の Julia と併用している。
下の方で説明する方法で Julia をインストールしてしまった人は環境変数 JULIA_PKGDIR
を設定することになる。その設定が有効なままで複数の Julia 言語がインストールされた状態で JuliaPro を利用すると、ENV["Base.LOAD_CACHE_PATH"]
の先頭に環境変数 JULIA_PKGDIR
の内容が設定されてしまう。私の場合には
In [1]: Base.LOAD_CACHE_PATH
Out [1]: 2-element Array{String,1}:
"C:\\JuliaPkg\\lib\\v0.6"
"C:\\JuliaProMKL-0.6.2.1\\pkgs-0.6.2.1\\lib\\v0.6"
のようになってしまった。これは極めて不都合である。なぜならば、パッケージのプレコンパイルファイルが JuliaPro ではない Julia の方で使うディレクトリに作られるようになってしまうからだ。そのようになってしまう原因は
C:\JuliaProMKL-0.6.2.1\Julia-0.6.2\etc\julia\juliarc.jl
の内容にあった。そこでは環境変数 JULIA_PKGDIR
の内容を push!
するようになっている。私はそのファイル中の push!
を unshift!
に書き換えた。
--- juliarc-org.jl 2018-01-19 23:47:39.503285600 +0900
+++ juliarc.jl 2018-01-20 15:13:43.455046700 +0900
@@ -8,2 +8,2 @@
-push!(Base.LOAD_PATH, normpath(joinpath(ENV["HOMEDRIVE"]*ENV["HOMEPATH"], ".julia", "v0.6")))
-push!(Base.LOAD_CACHE_PATH, normpath(joinpath(ENV["JULIA_PKGDIR"], "lib", "v0.6")))
+unshift!(Base.LOAD_PATH, normpath(joinpath(ENV["HOMEDRIVE"]*ENV["HOMEPATH"], ".julia", "v0.6")))
+unshift!(Base.LOAD_CACHE_PATH, normpath(joinpath(ENV["JULIA_PKGDIR"], "lib", "v0.6")))
このようにしたおかげで現在では
In [1]: Base.LOAD_CACHE_PATH
Out [1]: 2-element Array{String,1}:
"C:\\JuliaProMKL-0.6.2.1\\pkgs-0.6.2.1\\lib\\v0.6"
"C:\\JuliaPkg\\lib\\v0.6"
となっている。私の場合にはこのようにしないと快適に JuliaPro を使用できなかった。
JuliaPro では Pkg.add("SymPy")
とするだけでは SymPy パッケージを利用できるようにはならない。なぜならば、JuliaPro に付属する Python パッケージに SymPy が含まれていないからだ。コマンドラインから
c:\JuliaProMKL-0.6.2.1\Python\Scripts\pip install sympy
にあたることを適切に実行して、JuliaPro の Python 環境に sympy をインストールすれば、SymPy を使えるようになります。 その代わりにJulia言語内から
PYSCRIPTS = replace(ENV["PYTHON"], "\\python.exe", "\\Scripts\\")
ENV["Path"] = PYSCRIPTS * ";" * ENV["Path"]
run(`pip install sympy`)
を実行して同じことをできます。(Windows 以外を使っている人は適宜修正して下さい。) まとめると、
PYSCRIPTS = replace(ENV["PYTHON"], "\\python.exe", "\\Scripts\\")
ENV["Path"] = PYSCRIPTS * ";" * ENV["Path"]
run(`pip install sympy`)
Pkg.add("SymPy")
using SymPy
で SymPy を利用できるようになりました。
Juliaで以下を実行することによって、 Jupyter で nbextensions も使えるようになりました。
PYSCRIPTS = replace(ENV["PYTHON"], "\\python.exe", "\\Scripts\\")
ENV["Path"] = PYSCRIPTS * ";" * ENV["Path"]
run(`pip install jupyter_nbextensions_configurator`)
run(`jupyter nbextensions_configurator enable --user`)
run(`pip install https://github.com/ipython-contrib/jupyter_contrib_nbextensions/tarball/master`)
run(`jupyter contrib nbextension install --user`)
Jupyter notebookを終了させて、立ち上げ直して下さい。
nbextensions の Gist-it は特に便利です。それを使うとほとんどワンボタンで Jupyter notebook を GitHub Gist に投稿して公開することができます。Jupyter notebook には数式を使った解説を含めることができるので、数学的に有益な情報を広めたい場合には特に役に立ちます。ずっと下の方にその使い方の解説があります。
以下は 2017-06-15 の作業。(この節の内容は JuliaPro のみを使いたい人には関係しない。)
https://www.continuum.io/downloads から Python 3.6 version のAnacondaをダウンロードしてインストールした。
インストール先は
C:\Anaconda3
Python 2.7 version のAnacondaが必要になった場合には別に考える。
Windows のスタートアップメニューに
Anaconda3 (64bit)/Jupyter Notebook
のショートカットが作成されたので、それをデスクトップにコピーした。
そして、コピーしたショートカットのプロパティーのリンク先の一番最後にある
%USERPROFILE%
を Jupyter Notebook における初期フォルダにしたい場所に書き換えた。具体的には
C:\home\genkuroki\Dropbox\Jupyter
に書き換えた。そのように書き換えたショートカットをダブルクリックすると、 ブラウザに Jupyter Notebook が開く。初期フォルダは設定した通りになっている。
その後に Julia 0.5.2 もインストールしたのだが、ここでは説明を省略する。
そのときの稚拙な試行錯誤の様子は
https://genkuroki.github.io/documents/Jupyter/20170615InstallJuliaAnaconda.html
で確認できる。
以下は 2017-06-20 に行った作業。
Windows の環境変数を次のように設定する。
JUPYTER=C:\Anaconda3\Scripts\jupyter.exe
JULIA_PKGDIR=C:\JuliaPkg
C:\JuliaPkg というフォルダも念のために作っておいた。
https://julialang.org/downloads/ から Julia 0.6.0 の Windows 64bit 版をダウンロードして
C:\Julia-0.6.0
にインストールした。
デスクトップに Julia-0.5.2 と Julia-0.6.0 のショートカットを作成した。
以下では Julia-0.6.0 を使う。
Julia を起動して、以下を実行する。
Pkg.init()
Pkg.add("IJulia")
そのとき、大事なポイントは
INFO: Found Jupyter version 4.3.0: C:\Anaconda3\Scripts\jupyter.exe
のように表示されていることである。環境変数 JUPYTER
を設定しておいたおかげでこうなった。
もしも環境変数によって jupyter.exe
のありかを Julia に教えていなかったら、 Julia は自前で miniconda (Anaconda2 相当)を入れて、Jupyter Notebook の設定を行おうとする。
せっかく Anaconda3 を入れてあったのだから、 そちらにすでにインストールされている Jupyter 環境を利用した方が効率的である。
2017-10-28 に Julia v0.6.1 をインストールした。
初めて Julia 言語をインストールする人は以上の v0.6.0 の場合と同じ作業をするだけでよい。
v0.6.0 をすでにインストールすみの筆者は以下の作業を行った。
https://julialang.org/downloads/ から 64-bit の Windows Self-Extracting Archive をダウンロード
それを実行して、C:\Julia-0.6.1
にインストール
C:\Users\username\AppData\Roaming\jupyter\kernels
のようなディレクトリに Jupyter notebook のカーネルの設定が保管されている。それを v0.6.0 から v0.6.1 対応に変更した。julia-0.6/kernel.json
などの内容をほんの少しだけ書き直すだけの作業であった。
2017-12-19 に Julia v0.6.2 をインストールした。作業は上と同じ。
以上によって Julia 0.6.0 を Jupyter Notebook から使えるようになった。
デスクトップに作ってあった Jupyter Notebook のショートカットをダブルクリックすると、ブラウザに Jupyter Notebook の窓が開く。 New をクリックして確認すると、カーネルとして Julia 0.6.0 も選択できるようになっている。数日前に Julia 0.5.2 もインストールしてあったので、Julia 0.5.2 と Julia 0.6.0 の両方が選択可能になった。
2017-12-08 に Jupyter notebook で使用している CodeMirror の julia.js
を最新版に更新した. 更新する前には Jupyter notebook が Julia 0.6 に対応しておらず、不便を強いられた.
CodeMirror のソースコードは
https://github.com/codemirror/CodeMirror
で配布されており、Julia 0.6 への対応については
https://github.com/codemirror/CodeMirror/pull/4842
を参照して欲しい. julia.js
の更新の手順は以下の通り.
https://github.com/codemirror/CodeMirror/blob/master/mode/julia/julia.js の Raw ボタンを右クリックして julia.js
の最新版をダウンロードする.
C:\Anaconda3\Lib\site-packages\notebook\static\components\codemirror\mode\julia
に最新版の julia.js
を上書きコピーする.
不安ならば古い版のファイル名を変えて残しておいた方がよいかもしれない.
試しに入れてみたパッケージについては
https://gist.github.com/genkuroki/b1d7e27846c64c98e669fd5cf80f6ac1
を参照して欲しい。
幾つか注意するべきポイントについて説明しよう。
PyCall
は Julia から Python を使用するためのパッケージである。
それによって Python の世界にある豊富な資産を Julia から利用できるようになる。
たとえば PyPlot
パッケージによって、
Python 側にある便利なプロット用ライブラリ matplotlib を Julia 側から利用することができるようになる。
Julia によるプロットの例が次のリンク先にたくさんある。
https://gist.github.com/gizmaa/7214002
他にも SymPy
パッケージによって、
Python 側にある数式処理ライブラリ sympy を利用できるようになる。
PyCall
パッケージを入れるときには、
使用する Python のバイナリを環境変数の設定で Julia に教えてあげなければいけない。
私は PyPlot
パッケージを入れることによって、
PyCall
パッケージも入れた。
ENV["PYTHON"]="C:\\Anaconda3\\python.exe"
Pkg.add("PyPlot")
これでインストールされた PyCall
パッケージがどの Python を使用するようになっているかについては
using PyCall
display(PyCall.pyprogramname)
display(PyCall.pyversion)
display(PyCall.conda)
display(PyCall.libpython)
で確認できる。私の場合には
"C:\\Anaconda3\\python.exe"
v"3.6.1"
false
"C:\\Anaconda3\\python36"
と表示された。
別の Python を使用したい場合には
ENV["PYTHON"]="別のpython.exe"
Pkg.build("PyCall")
を実行する。
PlotsパッケージでGIF動画を作りたい人は、前もって
https://www.imagemagick.org/script/binary-releases.php#windows
から、Imagemagickをダウンロードしてインストールしておく必要がある。 そのときに、convert コマンドも忘れずにインストールしておく。 GIFアニメ作成テスト用のノートブックを
https://gist.github.com/genkuroki/516e1a87a44a3bac22125e9cff7d434c
で公開してある(このノートの下の方にもGIFアニメ作成のためのコードの例がある)。そのテスト用ノートブックを使用するためには、
Pkg.add("Plots")
だけではなく、
Pkg.add("Iterators")
も前もって実行しておく必要がある。私の場合には巨大パッケージの
Pkg.add("DifferentialEquations")
経由で Iterators パッケージがインストールされていたのだが。
DifferentialEquationsパッケージは巨大なので、常微分方程式を数値的に解きたいだけの人は
Pkg.add("Sundials")
のみを実行しておけば十分だと思う。
必要なパッケージを必要になったときに入れれば問題ない。
GIF動画を作るだけならば、Imagemagickさえインストールしてあれば十分で、Plots パッケージを入れる必要はない。 このノートの下の方にその方法が書いてある。
次をコマンドライン(コマンドプロンプト)で実行して、Jupyter Notebook に便利な Nbextensions を入れた。
c:\Anaconda3\Scripts\conda install -c conda-forge jupyter_contrib_nbextensions
Nbextensions に含まれる Gist-it を GitHub Gist との連携のために利用できる。
さらに、Select CodeMirror Keymap を利用すればキーバインディングを emacs 風にしたり、vi 風ににしたりできる。
結局、使わないことにしたが。
GitHub Gist と Jupyter notebook を nbextensions の Gist-it 経由で連携させると、Jupyter notebook で編集した結果をワンボタン(+α)で GitHub Gist に保存してバージョン管理をできるようになります。
(1) https://github.com にアクセスして、GitHub のアカウントを保有していない場合には、Sign up してアカウントを取得する。
(2) https://github.com から Sign in して、右上の View profile and more のメニューから Settings を選択する。
(3) 左下の Personal access tokens をクリック。
(4) 右上の Generate new ボタンをクリック。
(5) Token description に Create gists などと書き、 gist (Create gists)にチェックを入れてから、 generate token ボタンをクリック。
(6) 表示されたアクセストークンをコピー。失敗したら(5)からやり直す。
(7) Jupyter notebook を開き、Nbextensions タブで、Gist-it にチェックを入れる。
(8) Github personal access token に6でコピーしたアクセストークンを貼り付ける。
Gists default to publicにもチェックを入れておくことがおすすめ。
失敗したら、(5)からやり直す。
(9) Jupyter notebook の Files タブからノートをどれか開き、 Gist-it のボタンを押して、Gist への投稿をできるかどうかを確認する。
(10) https://gist.github.com の See all of your gists をクリックすれば、 保存したファイル達の一覧を見ることができる。
(11) Gistに保存したノートを変更した後に再度 Gist-it のボタンを押すと、 すでに投稿してあったファイルがそれに更新されることを確認する。
以上によって、Jupyter notebook で作成したノートをワンボタン+αの手間で GitHub Gist に保存して、 簡単なバージョン管理をできるようになりました。
Jupyter notebook を開き、Nbextensions タブで Select CodeMirror Keymap にチェックを入れる。
各ノートブックの Edit メニューの Keymaps で Emacs を選択する。
これでキーバインディングが Emacs 風になった。
しかし、デフォルトのキーバインディングの方が便利な部分もあるので使わないことにした。
代わりに Keyhac と fakeymacs を使うことにした。
(1) https://sites.google.com/site/craftware/keyhac-ja から Keyhac for Windows ver 1.76 をダウンロードして、展開して、適当なフォルダに配置し、 keyhac.exe を起動した。
(2) https://github.com/smzht/fakeymacs から config.py を取得し、
C:\Users\genkuroki\AppData\Roaming\Keyhac\config.py
を config-org.py にリネームし、このフォルダに移動した。 config.py の中身は適当にカスタマイズして使うことになる。
(3) Keyhac のタスクトレイアイコンを右クリックして設定をリロードした。
これであちこちで Emacs 風のキーバインディングを使えるようになった。
ただし、C-k の動作には注意が必要。 C-k で複数行を切り取るためにはマウスで指定すればよい。
(4) Google Chrome のショートカットの一部を Keyconfig 拡張を導入して無効にした。
https://chrome.google.com/webstore/detail/keyconfig/okneonigbfnolfkmfgjmaeniipdjkgkl
から Keyconfig をインストールし、 Keyconfig のオプションの設定で、 たとえば C-k をアクションなしで登録すれば、 Chrome内での C-k ショートカットを無効にできる。
追記(2017-07-08): 現在はEmacs風のキーバインディングを Jupyter notebook ではあまり使っていない。
2017年7月19日に追加
この節は Windows 限定の解説。
まず、
C:\Users\username\AppData\Roaming\jupyter\kernels
のような名前の自分のフォルダの中を見て下さい。私の場合には
C:\Users\genkuroki\AppData\Roaming\jupyter\kernels
です。そこには
julia-0.6
のような名前のフォルダがあるはずです。そのフォルダの中身の真似をして別のフォルダを作れば Jupyter notebook に新しいカーネルを追加できます。
例として、Julia をオプション -p auto
を付けて起動するカーネルを追加してみましょう。このオプションを追加して Julia を起動すると、CPUがマルチスレッドに対応しているとき、Julia から並列処理の機能を最初から使えるようになります。非常に便利です。
(1) フォルダ julia-0.6
をコピーして、julia-0.6-pauto
のような名前に変える。
(2) julia-0.6-pauto\kernel.json
の中身を次のように変更する。
{
"display_name": "Julia 0.6.0 procs auto",
"argv": [
"C:\\Julia-0.6.0\\bin\\julia.exe",
"-i",
"-p",
"auto",
"--startup-file=yes",
"--color=yes",
"C:\\JuliaPkg\\v0.6\\IJulia\\src\\kernel.jl",
"{connection_file}"
],
"language": "julia"
}
(3) このようにしてから、Jupyter を起動すると Julia 0.6.0 procs auto
という名のカーネルが使用可能になっている。
(4) そのカーネルを削除したい場合には作ったフォルダを削除すればよい。
2018年1月24日に追記
上のように julia -p auto
でJuliaを起動しておけば最初から並列処理を利用できるのですが, そうしなくても, addprocs()
を実行して -p auto
と同じようにプロセスを追加して並列処理を楽しむことができます. プロセスのリストを得るには procs()
、ワーカーのリストを得るには workers()
、 プロセスの個数を得るには nprocs()
、a
番からb
番までのプロセスをまとめて削除するには rmprocs(a:b)
を実行します。
2017年7月25日追記
Anaconda3に含まれるPythonパッケージのアップデートには
C:\Anaconda3\Scripts\conda.exe update --all
を実行し、アップデートされるパッケージの一覧が表示されるので、それで問題がないならば y と答える。
Anaconda の管理には conda コマンドを使用します。
https://www.google.co.jp/search?q=Anaconda+conda+%E4%BD%BF%E3%81%84%E6%96%B9
2017年7月27日追記
Jupyter notebook に RISE をインストールするためには以下をコマンドラインから実行する。
pip install RISE
jupyter-nbextension install rise --py --sys-prefix
jupyter-nbextension enable rise --py --sys-prefix
ただし、私の環境では C:\Anaconda3\Scripts
にPATHが通してあり、そこの pip とJupyter-nbextension が実行される。
RISE はプレゼンテーション用の Nbextension である。詳しくは次のリンク先を参照せよ。
http://qiita.com/cvusk/items/d425751ba663dc8c6517
そこに書いてある通りで、インストールには10秒かかりません。
2017年7月30日追記
(1) まだRをインストールしていない人は次のリンク先を参考にRをインストールする。
http://qiita.com/FukuharaYohei/items/8e0ddd0af11132031355
私はRStudioとRtoolsもインストールした。
他にもRの側でggplot2などのパッケージもインストールしておいた。
(2) Rのバイナリが置いてあるディレクトリにPATHを通しておく。
(3) Juliaの側で次を実行する:
Pkg.add("RCall")
これでRをJuliaから使う準備が完了した。
(4) ドキュメントを読む。
https://github.com/JuliaInterop/RCall.jl
http://juliainterop.github.io/RCall.jl/latest/
(5) 次のリンク先のノートブックの内容を実行できるかどうかを確認する。
https://gist.github.com/genkuroki/c72aa29f24156e46c7564852e4f36c9a
次のリンク先を参考にした。
https://irkernel.github.io/installation/
http://qiita.com/piruty_joy/items/498ee16de62879e5a949
https://github.com/IRkernel/IRkernel
https://teratail.com/questions/70234
RGuiで以下を実行する。
install.packages(c('repr', 'IRdisplay', 'evaluate', 'crayon', 'pbdZMQ', 'devtools', 'uuid', 'digest'))
devtools::install_github('IRkernel/IRkernel')
IRkernel::installspec()
どこからパッケージをインストールするかを聞かれたら、Japan (Tokyo)を選択しておけばよいでしょう。
これだけで、Jupyter notebook からカーネルとして R を選択できるようになりました。
適切にインストールされたかどうかの確認は、私の場合には以下のディレクトリを見ると分かりました。 上の作業を実行すると以下のフォルダにJupyter用の設定がインストールされた表示されます。
C:\Users\genkuroki\AppData\Roaming\jupyter\kernels\ir\
そこには
kernel.js
kernel.json
logo-64x64.png
の3つのファイルがあり、kernel.json
の中身は
{
"argv": ["C:/PROGRA~1/R/R-34~1.1/bin/x64/R", "--slave", "-e", "IRkernel::main()", "--args", "{connection_file}"],
"display_name": "R",
"language": "R"
}
kernel.js
の中身は結構長いです。
実際にRをJupyterで使ってみた例が次のリンク先にあります。
https://gist.github.com/genkuroki/6fdb22137cdd555ab63a6b9522e4b57a
2017年7月31日
以下のリンク先の情報を参考にした。
http://qiita.com/kozo2/items/4bfbc9524b302b06710b
http://qiita.com/mix_dvd/items/3e4305d31e7a6785fbb0
http://qiita.com/domitry/items/aa348caf993e876a7be5
正直、よくわからないことが多かったが、大体において、コマンドラインから gem コマンドで色々入れた後に
gem install specific_install
gem specific_install https://github.com/SciRuby/iruby.git
iruby register
を実行したら、JupyterからRubyが使用可能になった。
Jupyter で Ruby カーネルが死ぬ場合には Jupyter Notebook のコンソール画面に出ているエラーメッセージをよく見て、足りないパッケージを gem コマンドで入れるとうまく行くかもしれない。筆者の場合にもそれでうまく行った。手動で入れたのは
gem install czmq
gem install ffi-rzmq
だけだったと思う。
現時点での gem list --local
の結果は以下の通り。
bigdecimal (default: 1.3.0)
bond (0.5.1)
czmq (0.0.1)
czmq-ffi (0.0.2)
czmq-ffi-gen (0.13.0 x64-mingw32)
cztop (0.11.4)
data_uri (0.1.0)
did_you_mean (1.1.0)
ffi (1.9.18 x64-mingw32)
ffi-rzmq (2.0.5)
ffi-rzmq-core (1.0.6)
gist (4.6.1)
gisty (0.2.8)
io-console (default: 0.4.6)
iruby (0.3)
json (default: 2.0.2)
mimemagic (0.3.2)
minitest (5.10.1)
multi_json (1.12.1)
net-telnet (0.1.1)
openssl (default: 2.0.3)
power_assert (0.4.1)
psych (default: 2.2.2)
rake (12.0.0)
rdoc (default: 5.0.0)
specific_install (0.3.3)
test-unit (3.2.3)
xmlrpc (0.2.1)
しかも、Jupyter Notebook のコンソール画面に次の警告が出ているので正常なインストールに失敗している可能性がある。
WARNING: ::CZMQ::FFI is not available without libczmq.
2018-01-27の追記
まず、以下をじっくり閲覧する。YouTube にあるデモンストレーションの画面の中にも途中でエラーが出ている部分が見付かる。自分自身がやったときに驚かないようにそういうことにもチェックを入れておく。
https://www.youtube.com/watch?v=TxcPwyCVa8Y
https://vatlab.github.io/sos-docs/#runningsos
以下をコマンドラインから実行した.
pip install sos
pip install sos-pbs
pip install sos-notebook
pip install sos-python
pip install sos-r
pip install sos-julia
conda install -c conda-forge feather-format
これで Anaconda3 で SoS を使えるようになった。 SoS は Python 3.6 以上を要求するので注意すること。
Julia で SoS を利用する場合にはさらに
Pkg.add("Feather")
Pkg.add("DataFrames")
Pkg.add("NamedArrays")
も実行しておく。さらに R の方でも
install.packages('feather')
を実行しておいた。ただし、Julia も R も Jupyter で使えるようになっていることが前提である。
https://www.youtube.com/watch?v=_LSQr3DHBpU
https://vatlab.github.io/sos-docs/#introduction
私の場合には Julia v0.5.2 と Julia v0.6.2 を併用しているので、SoS ノートブックを起動時にどちらを選ぶかの選択のポップアップが常に出るようになってしまった。私はそれが嫌なので、
C:\Users\genkuroki\AppData\Roaming\jupyter\kernels\julia-0.5
を Julia-0.5-old
に書き換えて
C:\Users\genkuroki\AppData\Roaming\jupyter\kernels\julia-0.5-old
に移動した。これとは別に
C:\Users\genkuroki\AppData\Roaming\jupyter\kernels\julia-0.6
というディレクトリがあり、こちらの下で設定されている Julia を SoS が利用するようになった。
Julia のデータフレーム X を SoS で %get X --from Julia
しようとすると失敗した。
MethodError: no method matching nullcount(::DataArrays.PooledDataArray{String,UInt8,1})
Closest candidates are:
nullcount(::NullableArrays.NullableArray{T,1} where T) at C:\JuliaPkg\v0.6\Feather\src\Feather.jl:289
nullcount(::Array{T,1} where T) at C:\JuliaPkg\v0.6\Feather\src\Feather.jl:290
nullcount(::CategoricalArrays.CategoricalArray) at C:\JuliaPkg\v0.6\Feather\src\Feather.jl:291
...
そこで、Juliaで
import Feather: nullcount
nullcount(x::DataArrays.PooledDataArray) = count(isna.(x))
を実行して、nullcount函数を拡張したら、 %get X --from Julia がうまく行くようになった。
SoS の変数 X の Julia への転送 %put X --to Julia
は X がデータフレームの場合にはどうしてもうまく行かなかった。理由は不明。しかし、 X が単純な配列の場合には問題なく %put が実行できた。
データフレームが鬼門。
# 簡単な数式処理をできる
using SymPy
using PyPlot
ae()=PyPlot.axes()[:set_aspect]("equal") #プロットのアスペクト比を1:1にする函数
ae (generic function with 1 method)
# 楕円曲線暗号で有名なEdwards曲線をプロット
x, y = symbols("x y") # 数式処理用に変数 x,y を準備
edwards=x^2+y^2-1+20x^2*y^2 # Edwards 曲線の定義式
display(edwards) # display函数で綺麗に数式を表示
plot_implicit(edwards,(x,-1.5,1.5),(y,-1.5,1.5))
ae() # この行をコメントアウトするとプロットの縦横比が1:1でなくなる
# 変な曲線
x, y = symbols("x y")
n=5
m=n+2
f=x*prod([x^2-i^2 for i in 1:n])
f-=2*n*subs(f,x,y)
display(f)
plot_implicit(f,(x,-m,m),(y,-m,m))
ae()
# 不定積分
x, y = symbols("x y")
integrate(x^y,x)
# 不定積分
x = symbols("x")
integrate(1/sqrt(1-x^2),x)
# 定積分
x = symbols("x", real=true)
integrate(1/(1+x^2),(x,0,oo))
# ζ(12)
n = symbols("n", integer=true)
summation(1/n^12,(n,1,oo))
# 複素函数のベクトル場表示
using PyPlot
plotvf(z,w) = plt[:quiver](real(z),imag(z),real(w)./abs.(w),-imag(w)./abs.(w)) #複素函数z→wのベクトル場をプロット
plotstream(z,w) = plt[:streamplot](real(z),imag(z),real(w),-imag(w)) #複素函数z→wの流れをプロット
plotstream (generic function with 1 method)
x = [-2:0.2:2;]' # xは縦ベクトルでなければいけない
y = x' # yは横ベクトル
z = x .+ y.*im # imは虚数単位、このように足すと自動的に正方行列になる
w = (-1-im)./z # w=(-1-i)/z
plotvf(z,w) # ベクトル場の作図
plotstream(z,w) # 流れの作図
PyPlot.axes()[:set_aspect]("equal") # アスペクト比を1:1に
x = [-2.5:0.2:2.5;]' # xは縦ベクトルでなければいけない
y = [-1.5:0.2:1.5;] # yは横ベクトル
z = x .+ y.*im # imは虚数単位、このように足すと自動的に正方行列になる
w = @. 1/(z+1) - 1/(z-1) # z=-1に正の電荷、z=-1に負の電荷
plotvf(z,w) # ベクトル場の作図
plotstream(z,w) # 流れの作図
PyPlot.axes()[:set_aspect]("equal") # アスペクト比を1:1に
# 3D plot
using PyPlot
using Distributions
linspace(start, stop, length) = range(start, stop=stop, length=length)
a=[
2. -1.
-1. 2.
]
n=101
x=linspace(-5,5,n) # -5:0.1:5 と同じ
y=linspace(-5,5,n)
z=zeros(n,n)
for i in 1:n
for j in 1:n
z[i,j]=pdf(MvNormal(a),[x[i];y[j]])
end
end
surf(x, y, z, cmap=ColorMap("CMRmap_r"))
PyObject <mpl_toolkits.mplot3d.art3d.Poly3DCollection object at 0x000000003E6FF9B0>
# GIGアニメーションファイル test.gif の作成
# Imagemagickのconvertコマンドを使う
using PyCall
#@pyimport matplotlib.animation as anim
using PyPlot
using Base64
using Printf
function showgif(filename)
open(filename) do f
base64_video = base64encode(f)
display("text/html", """<img src="data:image/gif;base64,$base64_video">""")
end
end
fig = figure()
ax = PyPlot.axes()
x = [-1.5:0.05:1.0;]
y = [-1.0:0.05:1.0;]
z = x' .+ im*y
w0 = sqrt.(z.+1)./z
# plotw has period 1.
# plotw(t+1) == plotw(1)
function plotw(t)
clf()
title("\$t = $t\$")
xlim(-1.4,0.9)
ylim(-0.9,0.9)
w = exp(pi*im*t)*w0
streamplot(x,y,real(w),-imag(w))
PyPlot.axes()[:set_aspect]("equal")
end
n=10 # frame/loop
l=1 # loop
interval=200 # milli seconds
filename = "test" # filename
withfig(fig) do
for k in 1:n*l
plotw(k/n)
savefig(filename*@sprintf("_%04d",k), bbox_inches="tight")
end
end
run(`convert -delay $(interval/10) -loop 0 $(filename)_\*.png $filename.gif`)
#run(`magick -delay $(interval/10) -loop 0 $(filename)_\*.png $filename.gif`)
showgif("$filename.gif")
repmat(a, m, n) = repeat(a, inner=(m,n))
using PyPlot
pygui(false)
function meshgrid(vx::AbstractVector{T}, vy::AbstractVector{T}) where T
m, n = length(vy), length(vx)
vx = reshape(vx, 1, n)
vy = reshape(vy, m, 1)
(repmat(vx, m, 1), repmat(vy, 1, n))
end
r = 1
eps = 0.0001
h = 0.01
xx = [-r+eps:h:r+eps;]
yy = [-r+eps:h:r+eps;]
x, y = meshgrid(xx, yy)
z = @. x^2*y/(x^2+y^2)
# contour plot
figure(figsize=(6,5))
p1 = contour(x,y,z,[-0.5:0.05:0.5;])
title("Contour Plot")
xlabel("X")
ylabel("Y")
clabel(p1, inline=1, fontsize=6)
colorbar()
PyPlot.axes()[:set_aspect]("equal")
# 3D plot
figure(figsize=(6,6))
p2 = surf(xx,yy,z, cmap=ColorMap("rainbow"))
title("3D Plot")
xlabel("X")
ylabel("Y")
PyObject Text(0.0578211,-0.0745126,'Y')
# Open interactive window
pygui(true)
figure(figsize=(6,6))
surf(xx,yy,z, cmap=ColorMap("rainbow"))
PyObject <mpl_toolkits.mplot3d.art3d.Poly3DCollection object at 0x000000004814B278>
a,b,cの定義を変えれば様々なグラフを描けます。
linspace(start, stop, length) = range(start, stop=stop, length=length)
repmat(a, m, n) = repeat(a, inner=(m,n))
using PyPlot
function meshgrid(vx::AbstractVector{T}, vy::AbstractVector{T}) where T
m, n = length(vy), length(vx)
vx = reshape(vx, 1, n)
vy = reshape(vy, m, 1)
(repmat(vx, m, 1), repmat(vy, 1, n))
end
r = 5.0
xx = linspace(-r,r,100)
yy = linspace(-r,r,100)
x, y = meshgrid(xx, yy)
a = 1
b = -20
c = 2
z = a*x.^2 + 2*b*x.*y + c*y.^2
pygui(false)
#pygui(true)
figure(figsize=(8,6))
imshow(z, extent=(-r,r,-r,r), cmap=ColorMap("rainbow"))
p3 = contour(x, y, z, cmap=ColorMap("gray"))
title("\$z=ax^2+2bxy+cy^2\$, \$(a,b,c)=($a,$b,$c)\$")
clabel(p3, inline=1, fontsize=6)
colorbar()
PyPlot.axes()[:set_aspect]("equal")
figure(figsize=(8,7))
p1 = surf(x, y, z, cmap=ColorMap("rainbow"))
title("\$z=ax^2+2bxy+cy^2\$, \$(a,b,c)=($a,$b,$c)\$")
xlabel("x")
ylabel("y")
PyObject Text(0.0552464,-0.0711947,'y')