Jupyterはプログラムの実験に便利

# インストール

1. Anacondaを入れる
2. 適当なディレクトリでコマンドプロンプトとかで「jupyter notebook」

インストールというインストールはいらなかった。
Anacondaマジ便利。
ついでに管理者権限で以下のコマンドを実行しておく。

condaから拡張機能のライブラリをインストール

```bat
conda install -y -c conda-forge jupyter_nbextensions_configurator jupyter_contrib_nbextensions
```

Javascript用のカーネル

```bat
npm install -g ijavascript
```

rubyやc++11向けのもある。

IDE的なJupyter Labというのもあるが、
まだ開発中で安定しないのでしばらくはnotebookでいいかな。

```bat
pip install jupyterlab
jupyter serverextension enable --py jupyterlab --sys-prefix
jupyter lab
```

# 起動と実行テスト

jupyter notebookするとブラウザで開始画面が開かれる。
「New」をクリックして「Javascript (Node.js)」と「Python3」があればインストールは成功している。
Python3を選択して新規ドキュメントを作成する。

```py3
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline # 画像をインラインで表示
import seaborn as sns
sns.set(font='Kozuka Gothic Pro', style="whitegrid") # フォントは環境に合わせて…
sns.distplot(np.random.rand(10000) * 256, kde=False, rug=False, bins=32)
```

In [1]: と表示される入力欄におもむろにPythonコードを貼り付けて
Run Cell(Alt + Enterのショートカット)するだけでグラフが出力される。

![mat.png](https://qiita-image-store.s3.amazonaws.com/0/133885/d57402f3-06a8-8cb6-0301-97c8d3da3a64.png)

Anacondaは最初から標準的なライブラリがインストールされているので
何もせずとも使えてしまう。
パッケージインストールでエラーが出て発狂することもない。
至れり尽くせりではないか。

#数式

コンボボックスを「Code」から「Markdown」にするとテキストの入力になる。
ここでは普通にMarkdownの記法が使える。

これが…

```text
本文中の数式は$E = mc^2$です。
$$\sum_{k=1}^{\infty}\frac{1}{k^2}=\frac{\pi^2}{6}$$
```

こうなる。

![suu.png](https://qiita-image-store.s3.amazonaws.com/0/133885/704ef6d5-e5cf-15e7-4263-c28620aca3c8.png)

地味にメモとるのに便利。

# コピペができるターミナルとしての利用

Jupyterでは最終行の結果が出力として表示される。

```py3
x = np.random.rand(100) * 256
x
```
```text
array([  57.16269453,  173.52147856,  175.73999752,  197.03351494,
        191.90229057,   56.22117899,  222.23990173,  111.78970374,
         65.32640908,  223.66937955,  251.12137359,  154.80405154,
         20.06424932,  177.75248286,  218.21348661,  160.13820081,
         40.86074505,  117.83298074,  128.01976948,  151.76557561,
         53.67760328,  138.31802274,   27.9917731 ,    5.056024  ,
         15.11568687,   10.43714852,  161.24466713,  224.34820859,
        217.25158559,  206.86659415,  117.60971695,    9.22591763,
         89.8796563 ,   67.89282587,  248.77000789,  125.85296265,
        112.90104209,   12.9988741 ,  249.47178391,  217.76013419,
        213.65555396,  179.0598829 ,  176.59850712,   10.39062046,
        123.2150208 ,  216.36122343,  207.84097208,  150.28184883,
        182.37658399,   30.30863801,   11.24046353,  215.92988276,
        163.20994467,  199.82598128,   93.92821475,   66.79511017,
         66.23161549,   29.821778  ,  232.67160614,  238.12155737,
         33.26933263,  230.47469069,  162.70467466,   95.05107874,
        120.96468895,  250.75551959,   60.11908842,  163.21828435,
        121.4580693 ,   13.92458022,   92.39763579,   47.09220457,
        163.74857965,  216.48002571,  237.89115426,    2.72784433,
        209.78716492,  149.94296103,    0.53356501,   14.5028572 ,
        189.64603384,  133.35334654,  203.46146596,  202.9736626 ,
        224.63979533,    4.41760385,  142.43388688,   67.12034513,
         58.07451611,   94.26549529,  226.21585411,  103.69880617,
        150.68305271,  167.56179674,  102.5735206 ,   44.83089461,
         62.31203524,  181.73172609,  165.70634355,  147.30576083])
```

図の赤線で囲まれた領域をメモ帳にコピーするという作業をやってみる。

![mat2.png](https://qiita-image-store.s3.amazonaws.com/0/133885/f6f6f95e-1850-b68e-079a-822f69551feb.png)

改めて説明するまでもありませんが、
ここで行うことは0と6の間をクリックし、.と5の間までドラッグして離すという
ブラウザ含め一般的なWindowsアプリケーションで行われるドラッグによる選択という操作です。

![mat3.png](https://qiita-image-store.s3.amazonaws.com/0/133885/17fe61c3-9c07-4e00-fc69-ba0e3ba6df39.png)

ちゃんと。6から.までが正しく選択されています。
正しく0と6の間をクリックしたのになぜか前の20も一緒に選択されるということはありません。
素晴らしい。
しかも選択しただけではクリップボードに内容がコピーされることはありません。
うん。行儀がいいアプリケーションなんだね。

![mat4.png](https://qiita-image-store.s3.amazonaws.com/0/133885/27d4f62e-e492-6003-2155-4bc285c517c3.png)

Ctrl + C → Ctrl + V でコピー完了。
Wordのファイルからメモ帳にコピーしたかのごとくコピー結果も完璧だ！

コマンドプロンプトとかPowershell、Linuxのターミナル全般もそうだけど
標準入出力でまともな「選択」ができるアプリを見たことがない。
どのアプリも必ずといっていいほど矩形選択なんだよね。
俺は矩形なんて選択したくないんだよ。
それにコピー＆ペーストの機能がWindowsのメモ帳以下。
だからChromeなんかでググってきたコマンドを適時実行してその出力の一部を
Wordとかに貼り付けてレポートにするといった処理が不可能だった。
(一旦ファイル出力したり、逐一awkやsedのコード書くのはねーよ)
Jupyterは矩形じゃない選択ができるというだけで価値がある。

# 他言語との連携

PythonからC++で作ったdllをインポートして…といった使い方はもちろん問題ない。
しかしブラウザで動かしてるんだからPythonとJavascriptで変数をゴニョゴニョしてというのはやめた方がいい。
もちろんできなくはないが、あれは触れてはいけないものだと察してそっ閉じした。
Notebookは1言語で閉じるのがシンプルで良い。