目的

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

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

notebook_sample.png

Jupyter notebookのインストール

Anacondaのダウンロードがまだって方は、こちら(Individual Edition – Anaconda)からダウンロード出来ます!

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

カスタマイズ

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

    • コードの命名規則に自動修正

 

    • noteboookのテーマの変更

 

    • テンプレート化する

 

    • 横幅変更←横画面使ってる人に推奨

 

    • グラフのフォーマット

 

    最後に少し時系列データで遊ぶ

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

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

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

demo.gif
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というテーマです。

# install jupyterthemes
pip install jupyterthemes

jt -t onedork -T -N -kl

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

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

テンプレート化する

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ファイルを直接弄ります。

import jupytemplate
print(jupytemplate.get_template_path())

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

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

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

横幅変更

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

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

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

グラフのフォーマット等

次に綺麗なグラフを作るために、デフォルトで色々と設定すると便利です。
次のコマンドをテンプレートに貼り付けてください。
ただし、横幅変更と書いたコマンドとは別のセルに貼り付けてください。理由は、%%HTMLと書いてあるので、そのセルでは、HTMLを実行してしまうため、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で適宜補ってください。

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

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

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

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://github.com/santosjorge/cufflinks
参考: https://plotly.com/python/

まとめ

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