Jupyter Notebookの利用（基礎）

# Jupyter Notebookの利用（基礎）
Jupyter Notebookをはじめて利用する方向けの、基礎的な説明です。

## Jupyter Notebook画面の概要
###Jupyter Notebook画面 1
Jupyter Notebook起動・ログイン直後の画面
![jupyternotebook001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/12c6308f-9ce9-703d-b0e1-60913c51f22c.jpeg)

1. Filesタブ　保存されているフォルダやファイルを表示します
2. Runningタブ　実行中のプロセス等を表示します
3. Clustersタブ　本資料では利用しませんので説明を割愛します
4. Quit　（権限がある場合のみ表示される）Jupyter Notebookを停止します
5. Logout　Jupyter Notebookをログアウトします
6. Upload　分析データやノートブック(ファイル拡張子 .ipynb)をアップロードします
7. New　フォルダやノートブックを新規作成します　
8. 更新　リスト表示を更新します
9. (全体)　リスト全体を選択状態にします
10. ファイルやフォルダ作成後は個別に選択できます

## Jupyter Notebook画面 2
リストからファイルを選択したときの画面
![jupyternotebook002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/f7611082-1829-a1de-28ad-d03da61f34e8.jpeg)
選択した対象により、表示されるボタンは変わります
1. Duplicate　選択したフォルダやファイルを複製（コピー）します
2. View　選択したフォルダやファイルを開く、もしくはダウンロードします
3. Edit　選択したフォルダやファイルを編集します
4. ゴミ箱　選択したフォルダやファイルを削除します

Newボタンを押したときのメニュー
・Notebook（ノートブック：プログラムを実行し、結果を保存可能なファイル）
5. Python3 Python3で実行するノートブックを新規に作成します
・Other
6.Text File　テキストファイルを新規に作成します
　Folder　フォルダを新規に作成します
　Terminal ターミナル（端末）画面を開きます

## ノートブックの作成
### ノートブックの新規作成
1. カレントディレクトリ（今居る場所）を移動
　　ノートブックを作成したいディレクトリ・フォルダへ移動します
2. 新しいノートブックを作成
右上のNewボタンをクリックし、Python 3（またはPython 2）を選択してください。
![jupyternotebook003.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/8866f717-8d0b-066e-9fc5-c16b38ccd6d7.jpeg)
新しいノートブックがWebブラウザの新しい画面として作成され、開きます。    
ノートブックのファイル拡張子は .ipynb で作成されます。

### ノートブックのファイル名（タイトル）を変更
画面上部のUntitledをクリックすると、変更画面が表示されます。
変更後にRenameボタンを押して下さい。
![jupyternotebook004.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/fe2cbbec-8e1e-4697-0fa2-f99c629f6195.jpeg)
名前が変更されました。

### コードセル
表示されているIn[ ]:の入力欄はコードセルと呼ばれます。
![jupyternotebook005.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/1f4980e3-0295-4ca1-11a9-a1358887e057.jpeg)

## ノートブックでのプログラム実行
### プログラムの記載と実行
コードセルに Python3 のプログラムを記載し、実行します。

~~~
print ("test")
~~~

実行するには以下の方法があります。
1. Runボタンを押す
2. Ctr + Enterを押す

testと表示されました。
![jupyternotebook006.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/812a084b-6484-cd0e-17d2-e060bfcda583.jpeg)

## ノートブックの保存(チェックポイント作成)
ノートブックは、通常は自動保存される設定となっていますが、作業の状態を任意のタイミングで保存するため、チェックポイントを作成することができます。  
1. Save and Checkpointボタンを押す
2. 右上に一瞬Checkpoint created と表示される
![jupyternotebook007.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/ae578b51-64dc-753c-f84b-c0a3e411edd7.jpeg)
1. Fileメニューに保存したCheckpointが表示されるようになります。
![jupyternotebook008.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/b2151d11-6e62-2603-dc12-4431eebd2b00.jpeg)

Checkpointを選択すると、そのCheckpointを作成した時点の状態にノートブックを戻すことができます。

## ノートブックのツールバー
![jupyternotebook009.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/8d53fe68-ff00-03f5-316d-c93354d473aa.jpeg)
1. save and Checkpoint　保存とチェックポイントを作成します
2. incert cell below　(12)で選択した種類のセルを下に追加します
3. cut selected cells　選択したコードセルを切り取ります
4. copy selected cells　選択したコードセルをコピーします
5. pasete cells below　選択したコードセルの下に貼り付けます
6. move selected cells up　選択したコードセルを上に移動します。
7. move selected cells down　選択したコードセルを下に移動します。
8. Run　選択したコードセルを実行します
9. Stop　コードセルの実行を停止します
10. interrupt the kernel　実行に割り込み（中断、再実行）します
11. restart the kernel　再実行します（全てのコードセルを実行したいときに利用）

## ノートブックを閉じる
ノートブックを閉じるにはWebブラウザのタブやウインドウを終了させると保存されず強制終了してしまいますので、FileメニューのClose and Haltを選択して下さい。
ノートブックが保存された後に、正しく閉じられます。
![jupyternotebook010.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/ce5dac62-6bd2-87e7-7d41-1bba50542398.jpeg)

## グラフを作成する
Pythonでグラフを描画するときなどに使われる標準的なライブラリであるmatplotlibを使って、グラフを作成することができます。
[matplotlib](https://matplotlib.org/)
また、以下の例では配列に使われる標準的なライブラリであるnumpyを使っています。
[numpy](http://www.numpy.org/)

コードセルに以下を入力し、Runボタンで実行して下さい。

~~~
import numpy as np
import matplotlib.pyplot as plt
bar = np.array([1, 2, 3, 4, 5])
height = np.array([10, 20, 30, 40, 50])
plt.bar(bar, height)
~~~

実行結果は以下になります。
![jupyternotebook011.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/e799adba-3e32-ee23-346a-f788c6690098.jpeg)

## 乱数（正規分布）をグラフで可視化
乱数を作成する関数randn()は正規分布に従います。
グラフで確認してみます。
コードセルに以下を入力し、Runボタンで実行して下さい。

~~~
import matplotlib.pyplot as plt
plt.hist(np.random.randn(100))
~~~

実行結果は以下になります。
![jupyternotebook012.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/d0354ceb-1d60-72df-b673-152aeea4375d.jpeg)
何回かRunボタンで実行したり、random()の()の中の値を変えてみて試してみて下さい。
毎回違う結果（乱数なので毎回違う値になるため）や、乱数が正規分布の形のグラフになることを確認できると思います。

## 散布図の作成
matplotlibでは散布図を作成することもできます。
コードセルに以下を入力し、Runボタンで実行して下さい。
sin(x)はsin xの値です。
最後の行の"."は半角のピリオドですので注意してください。

~~~
import numpy as np
import matplotlib.pyplot as plt
x = np.random.randn(10)
y = np.sin(x) + np.random.randn(10)
plt.plot(x, y, ".") 
~~~

実行結果は以下になります。
![jupyternotebook013.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/0dd51a16-db56-f9a2-fe2a-9e4eccfef53c.jpeg)

## Markdown記法でレポートを作成
Jupyter NotebookはMarkdown記法に対応しているため、プログラムの実行結果やプログラムを実行できる形で組み込んだレポートを作成することができます。
Markdownは、プレーンテキストに書式設定要素を追加するための軽量なマークアップ言語（単なるテキストに書式を加えて見やすい文書にできる）です。
1. 新しいコードセルを追加した後、コードセルを選択状態にし、Markdown用に変更します。
2. 変更後は以下のようになり、コードセル左端のIn[ ]:が消えたことを確認してください。
![jupyternotebook014.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/beb70e1e-89d6-29a4-4c0a-471063acb65b.jpeg)
コードセル(Markdown用）に以下を入力し、Runボタンで実行して下さい。

~~~
# My report
By [my name](mailto:my.name@xxx.com)<br>
[Qiita](https://qiita.com/)
## test
Markdownのテストです1
### test
Markdownのテストです2
~~~

Markdownの編集中にも、自動的に文字に色がついたり太字になります。
編集中は以下のようになります。
![jupyternotebook015.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/942ec94c-6861-2881-0cc5-b31f52088498.jpeg)

Runボタンを押すことで、Markdown記法に基づき表示されます。
実行結果は以下になります。
![jupyternotebook016.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/58134308-233b-7dbc-98a3-779839160630.jpeg)

再度編集したいときは、表示中のものをダブルクリックすれば、編集状態のコードセルになります。
Markdownの詳しい書式については、ドキュメントを参照してください。
[Markdown Guide](https://www.markdownguide.org/getting-started)

## 数式を入力する
Markdown用のセルには数式を入力することもできます。
コードセル(Markdown用に変更を忘れないこと）に以下を入力し、Runボタンで実行して下さい。

~~~
# Maxwell’s Equations
\begin{align}
\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & =
\frac{4\pi}{c}\vec{\mathbf{j}} \\ \nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\
\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & =
\vec{\mathbf{0}} \\
\nabla \cdot \vec{\mathbf{B}} & = 0
\end{align}
~~~

実行結果は以下になります。
![jupyternotebook017.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/ea623f6f-3147-978b-1563-ac28839bb07a.jpeg)
[Motivating Examples — Jupyter Notebook stable documentationより引用](https://jupyter-notebook.readthedocs.io/en/stable/examples/Notebook/Typesetting%20Equations.html)

## Jupyter Notebook上でコードの処理時間を計測
コードセルの先頭行に　%%timeit　を記載し、その後にプログラムを記述すれば、そのコードセルの処理時間が表示されます。
コードセルに以下を入力し、Runボタンで実行して下さい。

~~~
%%time
import matplotlib.pyplot as plt
plt.hist(np.random.randn(1000))
~~~

実行結果は以下になります。
![jupyternotebook018.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273559/46080413-49cb-1816-dd08-121313d05c4b.jpeg)
1. CPU times:の表示（処理時間）が追加されました。