目的
私は、主に投資を定量的に分析することを生業としており、jupyter notebookも愛用しています。
そこで、今回は私なりにカスタマイズしたnotebookを紹介したいと思います!
皆さんのnotebookに少しでも役に立つ情報があれば幸いです!
次の画像はカスタマイズした後の私のnotebookです。
Jupyter notebookのインストール
Anacondaのダウンロードがまだって方は、こちら(Individual Edition - Anaconda)からダウンロード出来ます!
ダウンロードに関しては、英語ですが、ダウンロードして指示に従うだけなので、次へ進みたいと思います!
カスタマイズ
今回カスタマイズする内容は、次の通りになります。
- コードの命名規則に自動修正
- noteboookのテーマの変更
- テンプレート化する
- 横幅変更←横画面使ってる人に推奨
- グラフのフォーマット
- 最後に少し時系列データで遊ぶ
基本的には上から順番にやっていけば、私と同じようなnotebookを作成することが出来ます。
コードの命名規則に自動修正(Black)
こちらは、コードを書き過ぎて文法が良く分からなくなった時に、ワンクリックで綺麗にしてくれます。
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
次に、以下のコマンドを実行してみてください。
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なので、触ることも出来ます。
参考: https://github.com/santosjorge/cufflinks
参考: https://plotly.com/python/
まとめ
いかがだったでしょうか?
もっとカッコいいテーマもあると思いますので、そこはお好みに仕上げてくれると幸いです!
良かったら是非試してみてください!!