72
87

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

目的

私は、主に投資を定量的に分析することを生業としており、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/

まとめ

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

72
87
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
72
87

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?