Jupyter Notebookをより便利に使うために、色々まとめ

# 概要
Jupyter Notebookをより便利に使うため、整理してまとめてみました。


# テーマを変える
jupyterthemesを使うと、フォントや背景色、テーマを変えられます。
Jupyterを起動する前に、コマンドで変更します。

https://github.com/dunovank/jupyter-themes

```bash
# install
pip install jupyterthemes
```

◆ サンプル

* ブラック系

```bash
# dark
jt -t onedork -fs 95 -altp -tfs 11 -nfs 115 -cellw 88% -T
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/105335/5b1dbe39-b68a-82fd-6843-57fa480e44e5.png)

* ホワイト系

```bash
# light
jt -t grade3 -fs 95 -altp -tfs 11 -nfs 115 -cellw 88% -T
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/105335/484a395e-6823-3a44-f26d-1d5b417715ab.png)


元に戻す

```bash
jt -r
```

他にも見栄えを変えるライブラリがありますが、個人的にはこれが一番綺麗かなと思いました。


# モジュール自動リロード
importしている別ファイルモジュールを自動でリロードしてくれます。
モジュールを変更したときに、いちいちKernel再起動しなくてもOKです。

別ファイルからimportしたクラスの、生成済みのインスタンスに対しても、メソッド内の変更が自動で行われるので、とても便利です。

```py3
%reload_ext autoreload
%autoreload 2
```
参考
[Qiita: ipython を起動しながら自作モジュールを修正した場合](https://qiita.com/Accent/items/f6bb4d4b7adf268662f4)

# ショートカットキー

`Esc → h`でショートカットキーの一覧が見れます。

よく使うショートカットキー


|   Key  　　　　　 |       | 
|:-----------------|:------------------|
| Esc → m          | マークダウンモードに変更 |  
| Esc → y          | コードモードに変更 |
| Esc → a             |  上にセル追加|
| Esc → b             |   下にセル追加 |
| Esc → dd         |  セル削除 |  
| Esc → l         |  行数表示 |  
| Ctrl + Enter             |  セル実行   | 
| Alt + Enter            |  セル実行＋下にセル追加 |  



>追記：2017/9/27 
>コメントより、Jupyterのconfig.js内の記載を変更することで、デフォルトで行数表示できると教えていただきました！
>$(jupyter --config-dir)/config/config.js 

>```js
require('notebook/js/cell').Cell.options_default.cm_config.lineNumbers = true;
```

# バックグラウンドジョブで動かす
この方法でJupyter Notebookを起動させれば、実行結果が戻ってこなくても、ssh切断して放置しても大丈夫です。

```bash
nohup jupyter notebook >> jupyter.log 2>&1 &
```

# デバッグ

ソースの途中で以下のコードを挟むと、ブレークポイントになり、デバッグができます。

```py
from IPython.core.debugger import Pdb; Pdb().set_trace()
```

変数を入力して値を確認したり、ステップインなどができます。
(とはいえ、ちょっと使いにくいと思います)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/105335/9e1227b8-71f5-1452-c01f-a440001f5aad.png)

詳しくは
[Qiita: JupyterまたはiPython Notebookでデバッグをする方法](https://qiita.com/makopo/items/170c939c79dcc5c89e12)

# リモートマシン上で使う

リモートマシン上にJupyterをインストールして、以下のコマンドでconfigファイルを作成。
configファイルにポートを設定。
リモートのJupyterのポートをトネリングでつないで、ローカルのブラウザから操作できるようになります。

```bash
jupyter notebook --generate-config
```
詳しくは
[Jupyterを導入しよう -リモート編-](https://qiita.com/Miggy/items/5466a2c1e968602f3ebe)


```jupyter_notebook_config.py
c.NotebookApp.open_browser = False
c.NotebookApp.ip = '0.0.0.0'
```

# Pandas関連 - display()

処理の途中でDataFrameを表示させるにはprint()ではなく、display()を使うと罫線つきでいつも通りに表示できます。

```py
display(df)
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/105335/5ebccf2e-6d34-c4f8-0831-8b417e392470.png)


# Pandas関連 - set_option()
DataFrameの行や列が多いとデフォルトでは途中のデータが略されてしまいますが、set_optionで最大行数や列数を変更すると表示できます。

```py
import pandas as pd
pd.set_option('display.max_rows', 500)
```

参考
http://songhuiming.github.io/pages/2017/04/02/jupyter-and-pandas-display/

# Pandas関連 - tqdm

tqdmを使うとapplyの進捗を可視化して確認できます。もちろんfor文などでも使えます。
重い処理中、いつ終わるかそわそわしなくて済みます。

https://github.com/tqdm/tqdm

```bash
# install
pip install tqdm
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/105335/2ee818ce-76d9-0843-9baf-12bed30e581d.png)

参考
http://wonderwall.hatenablog.com/entry/2017/07/23/222856

>追記：2017/9/27 
>コメントより、tqdm_notebookというのがあると教えてもらいました！
>こちらの方がプログレスバーが綺麗で見やすいです。


```python

# pandasのapplyで使うとき
from tqdm._tqdm_notebook import tqdm_notebook
tqdm_notebook.pandas(desc="hoge progress: ")

df.progress_apply(lambda x: x*3+1, axis=1)
```



# HTML記載
マークダウンセルは、HTMLも書けます。
レポートを綺麗に書きたいときに使えます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/105335/56d85ea1-19cf-e81c-aa1d-e6e773790fea.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/105335/933f4ae1-5413-3f86-495d-6912ddf02329.png)


# スライド化
RISEを使うと、Jupyterのセルをスライド化できます。分析結果をプレゼントする時に便利です。

①　[View]-[Cell Toolbar]-[Slideshow]を選択
②　各セルの右上の[Slide Type]を選択
③　Slideshowボタンをクリック

https://github.com/damianavila/RISE

```bash
# install
pip install RISE
jupyter-nbextension install rise --py --sys-prefix
jupyter-nbextension enable rise --py --sys-prefix
```


![image.png](https://qiita-image-store.s3.amazonaws.com/0/105335/3f3536d8-f3c3-4485-dba6-2098405edec6.png)


参考
[Qiita: Jupyter Notebookでプレゼンをするとっても便利な方法](https://qiita.com/cvusk/items/d425751ba663dc8c6517)

# .pyファイル変換
「test.ipynb」（ノート）を「test.py」（Pythonファイル）に変換したい場合は、以下のコマンドをたたきます。

`# In [21]:`といったノートの記載がコメントアウトになったPythonファイルが出力されます。

```bash
jupyter nbconvert --to python test.ipynb
```

# おわり
他の方の記事のまとめになってしまいましたが、これからJupyter Notebookを使い始める方の参考になれたら嬉しいです。
もっと使いこなしていきたいです。