私の改造しまくったnotebookを紹介　～5分でこのnotebookが作れます！～

## 目的

私は、主に投資を定量的に分析することを生業としており、jupyter notebookも愛用しています。
そこで、今回は私なりにカスタマイズしたnotebookを紹介したいと思います！
皆さんのnotebookに少しでも役に立つ情報があれば幸いです！

次の画像はカスタマイズした後の私のnotebookです。

![notebook_sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/729216/07f3f8af-b4ad-23bf-4964-8da94badffce.png)


## Jupyter notebookのインストール

Anacondaのダウンロードがまだって方は、[こちら(Individual Edition - Anaconda)](https://www.anaconda.com/products/individual)からダウンロード出来ます！

ダウンロードに関しては、英語ですが、ダウンロードして指示に従うだけなので、次へ進みたいと思います！

## カスタマイズ

今回カスタマイズする内容は、次の通りになります。

- コードの命名規則に自動修正
- noteboookのテーマの変更
- テンプレート化する
- 横幅変更←横画面使ってる人に推奨
- グラフのフォーマット
- 最後に少し時系列データで遊ぶ

基本的には上から順番にやっていけば、私と同じようなnotebookを作成することが出来ます。

## コードの命名規則に自動修正(Black)

こちらは、コードを書き過ぎて文法が良く分からなくなった時に、ワンクリックで綺麗にしてくれます。

![demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/729216/ae43b939-be5a-70c6-340d-5c67ada381f2.gif)


```code
jupyter nbextension install https://github.com/drillan/jupyter-black/archive/master.zip --user
jupyter nbextension enable jupyter-black-master/jupyter-black
```
こちらをインストールすれば、jupyter notebookのツールバーに**Black**というボタンが作られるので、それをクリックするだけでセル内のコードがPEP8に従って規則正しくなります。

*参考*: https://github.com/drillan/jupyter-black

## notebookのテーマの変更

こちらでは、notebookのテーマを変更します。私が使っているテーマは**onedork**というテーマです。

```code
# install jupyterthemes
pip install jupyterthemes

jt -t onedork -T -N -kl
```

オプションは、ツールバー、名前、ロゴ等を表示するためです。オプションを付けなかった場合、ツールバー等が表示されなくなります。
また、コードを実行しても、既に開いているnotebookには反映されず、反映されたnotebookを見たい場合は、新規でnotebookを立ち上げてください。

*参考*:https://github.com/dunovank/jupyter-themes

## テンプレート化する

```python
pip install jupyter_contrib_nbextensions

jupyter contrib nbextension install --user

pip install jupytemplate

jupyter nbextension install --py jupytemplate --sys-prefix

jupyter nbextension enable jupytemplate/main --sys-prefix
```

これでテンプレート化の準備は出来ました。
次に、テンプレートの編集です。
テンプレートの場所は、次のコードを実行していただいて、notebookファイルを直接弄ります。

```python
import jupytemplate
print(jupytemplate.get_template_path())
```

notebookファイルを弄り終わったら次のコマンドを入力してテンプレートを反映させてください。

```code
jupyter nbextension install --py jupytemplate --sys-prefix
jupyter nbextension enable jupytemplate/main --sys-prefix
```

*参考*: https://github.com/xtreamsrl/jupytemplate

## 横幅変更

前の章で作ったテンプレートの画面に次のコマンドを貼り付けてください。

これは、横画面使っている人がよく直面する問題ですが、横の余白が無駄に多く、コードやテーブル、グラフが見えなくなることが良くあります。
これの対処をしたい方は、横幅を広くすることをお勧めいたします。

```python
%%HTML
<style>
    div#notebook-container    { width: 95%; }
    div#menubar-container     { width: 65%; }
    div#maintoolbar-container { width: 99%; }
</style>
```

## グラフのフォーマット等

次に綺麗なグラフを作るために、デフォルトで色々と設定すると便利です。
次のコマンドをテンプレートに貼り付けてください。
ただし、横幅変更と書いたコマンドとは別のセルに貼り付けてください。理由は、%%HTMLと書いてあるので、そのセルでは、HTMLを実行してしまうため、pythonコマンドが実行できないからです。

```python
# Data manipulation
import pandas as pd
import numpy as np

# Options for pandas
pd.options.display.max_columns = 50
pd.options.display.max_rows = 30

# Visualizations
# import jtplot module in notebook
from jupyterthemes import jtplot

# choose which theme to inherit plotting style from
# onedork | grade3 | oceans16 | chesterish | monokai | solarizedl | solarizedd
jtplot.style(theme='onedork')

# set "context" (paper, notebook, talk, poster)
# scale font-size of ticklabels, legend, etc.
# remove spines from x and y axes and make grid dashed
jtplot.style(context='talk', fscale=1.4, spines=False, gridlines='--')

# turn on X- and Y-axis tick marks (default=False)
# turn off the axis grid lines (default=True)
# and set the default figure size
jtplot.style(ticks=True, grid=False, figsize=(6, 4.5))

import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
import cufflinks as cf
cf.set_config_file(offline=True, theme="space", offline_show_link=False)

# Autoreload extension
if 'autoreload' not in get_ipython().extension_manager.loaded:
    %load_ext autoreload

%autoreload 2
```

## 最後に遊ぶ

上で実行したコードで足りないライブラリは*pip install*で適宜補ってください。

日経平均株価を少し見てみましょう。

```python
from datetime import datetime
import pandas_datareader.data as web

start = datetime(2000, 1, 1)
end = datetime(2020, 12, 3)
symbol = "^N225"
df = web.DataReader(symbol, 'yahoo', start, end)
df
```

次のようになります。
![get_data.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/729216/dbabebfb-dcbf-ddd6-a27e-d307683a6eae.png)

次に、以下のコマンドを実行してみてください。

```python
qf = cf.QuantFig(df, title="Nikkei 225", legend='top', name="N225")
qf.add_bollinger_bands()
qf.add_sma([10,20],width=2,color=['green','lightgreen'],legendgroup=True)
qf.add_rsi(periods=20,color='java')
qf.add_bollinger_bands(periods=20,boll_std=2,colors=['magenta','grey'],fill=True)
qf.add_volume()
qf.add_macd()
qf.iplot()
```

次のようなグラフが出ます。しかも、グラフはplotlyなので、触ることも出来ます。

![plot_data.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/729216/8047f7a7-da14-c38b-4bfe-9e0d16e7853f.png)


参考: https://github.com/santosjorge/cufflinks
参考: https://plotly.com/python/

## まとめ

いかがだったでしょうか？
もっとカッコいいテーマもあると思いますので、そこはお好みに仕上げてくれると幸いです！
良かったら是非試してみてください！！