SlideShare ist ein Scribd-Unternehmen logo
1 von 45
Pythonではじめる
finance hack入門
driller@patraqushe
PyConJP 2016
September 22, 2016
About me
driller
@patraqushe
トレーダーです
Python歴1年半くらいです
2
Agenda
まだExcelで消耗しているの?
時系列データは怖くない
Jupyter Notebookを使い倒す
3
Why Python for Finance?
簡潔なコードでデータ分析が可能
ライブラリが充実している(特にDeep learning系)
pandasが使える
Jupyter Notebookが使える
データ分析の他に様々なことが連携してできる
スクレイピング、クローリング
Webフレームワーク
インフラ系
4
Why Python in my case
Excelでトレード用のツールを作っていた
フリーで公開して、割りとたくさんのユーザがいた
機能追加や取引所のルール変更にだんだん耐えられなくなって
きた
Excelだとシートのレイアウトを根本的に変更しないと対応できない
ケースがある
色々試してみたが、Pythonなら簡単に覚えることができた
※ 個人の感想です
pandasがExcelの操作に似ていた
Jupyterを使うことで体裁を整えるコストが大幅に削減できた
5
まだExcelで消耗しているの?
~ExcelからPythonに移行して生産性を高めよう~
6@patraqushe 疲れたろう。
僕も疲れたんだ。
株価をモンテカルロ・シミュレー
ション
株価 1,000円
期間(n日後の株価) 30日
金利 0.1%
ボラティリティ(変動率) 20%
試行回数 10,000回→50,000回
7
Case1-1: モンテカルロ・シミュレー
ションをExcelの関数で実装
1. 幾何ブラウン運動(下記の確率微分方程式)に従う乱数を作成す
る数式をセルに入力する
𝑑𝑆𝑡 = 𝜇𝑆𝑡 𝑑𝑡 + 𝜎𝑆𝑡 𝐵𝑡
2. 上記の数式を試行回数分コピーする
3. 上記の計算結果を階級に分ける
4. 階級毎の値をカウントする
5. 4をグラフ化する
8
Sample:
Case1-1_1-2.xlsm
数式だけでもモンテカルロ・シミュ
レーションは実装できるが・・・
試行回数を増やしたい時に、セルを増やす必要がある
関連したセルを増やしたセルに対応させる必要がある
シートの再計算がどんどん重くなって、シートがまともに使え
なくなる
9
Case1-2: モンテカルロ・シミュレー
ションをVBAで実装
とにかくコードが長くなる(特にヒストグラムのところ)
シートのレイアウトを変更したくなった時に、対応しているセ
ルのアドレスを全て変更する必要がある(名前の定義である程度
は対処可能)
とにかく遅い
10
Sample:
Case1-1_1-2.xlsm
Case1-3: モンテカルロ・シミュレー
ションをPythonで実装
とにかくコードが短い(特にヒストグラムのところ)
データの置き場所を一々考えなくていい
VBAより速い
11
Sample:
Case1-3.ipynb
Excel vs. Python
Lines of Code: 105
Wall Time: 7.89s
More complex
Lines of Code: 10
Wall Time: 0.83s
More simple
12
とはいえExcelの方がいいときもある
よね
入力し易い
帳票等のフォーマットを作りやすい
ものすごくたくさんの人が使っている(データの互換性が高い)
13
ExcelとPythonのいいとこ取りをしよ
う
PythonからExcelを使うためのパッケージ
xlrd
xlwt
XlsxWriter
xlutils
openpyxl
xlwings
ExcelPython
14
色々なパッケージがあるけどpandas
で十分
pandas.read_excel()でなんとかなることが多い
pandasではできないことを他のパッケージで補うやり方が効率
的
pandasではできないこと
オープンしているファイルに対しての書き込み
セルの操作
グラフの描画やセルの結合等の細かい処理
15
Case1-4: 経済指標と為替、株価の関係
を見てみる
日経新聞のサイトから経済指標と株価のExcelファイルをpandas
で開く
経済指標
実質GDP
景気動向指数(先行)
為替 : ドル円
株価 : 日経平均株価
seabornで可視化
16
Sample:
Case1-4.ipynb
Case 1-5: 日銀のREIT, ETF買い入れと
REIT, 株価指数の関係を見てみる
BOJのサイトからExcelファイルをpandasで開く
k-dbから東証REIT指数、株価を取得
株価指数
TOPIX
JPX400
日経平均
seabornで可視化
17
Sample:
Case1-5.ipynb
xlwingsを使ってみる
openしているExcelファイルに対して読み込み/書き込みができ
る
Numpy, pandasのデータ型が扱える
ExcelからPythonのスクリプトを呼び出すことができる
Excelのユーザ定義関数(UDF)をPythonで作ることができる
セルの結合やグラフの処理等はopenpyxlの方が向いている
18
Call Python script from Excel
19
module
function
User Defined Functions (UDF)
20
You can use custom functions
written in Python!
UDF returns multiple values to each cells
21
Using array formula
(Ctrl + Shift + Enter)
Case1-6:pandasで株価を取得してExcel
のセルに表示する
xlwingsを使うと
ExcelからPythonのコードを実行することができる
PandasのDataFrameをExcelのセルにそのまま適用できる
ExcelのマクロのようにPythonコードが使える
株価はpandas_datareaderで取得できる
22
Sample:
Case1-6.xlsm
Case 1-7:ユーザ定義関数をPythonで
作ってExcelの関数として使う
Windowsのみ(Macはできないらしい)
アドインをインストールする
Pythonで作成した関数をExcelの関数として、ワークシートのセ
ル上から使えるようになる
セルの範囲を引数にして、NumpyのarrayやpandasのDataFrame
として処理できる
複数の戻り値を複数のセルに渡すことができる
23
Sample:
Case1-7.xlsm
時系列データは怖くない
~pandasと仲良くなろう~
24
Why pandas?
pandas はWes McKinney氏がAQR Capital Management(クオンツ運
用をしている投資会社)在籍中に作り始められた
Pythonから下記の要件を一つのツールで実装すべくpandasが開
発された
ラベル付されたデータ構造
時系列データを扱う機能が統合
算術演算と集約演算にメタデータの情報を指定できる
欠損値を柔軟に扱うことができる
SQLベースのデータベースで使用可能な関係演算を扱うことができる
金融の専門家が作ったツールなので、金融データに向いていな
い訳がない
25
Case2-1: DatetimeIndexを使ってみる
連続データの作成はpandas.date_rangeが非常に便利
DatetimeIndexの利点
参照時に様々な型を指定できる
datetime.date型, datetime.datetime型, datetime.time型, str型, int型, etc…
曖昧な表記でも受け付けてくれる(dateutil.parserのパースのように動作
する)
年や月指定でスライスができる
欠損値を扱うことができる
26
Sample:
Case2-1_2.ipynb
Case2-2: 四本値を作成、範囲を変換
四本値を作るのは意外と大変・・・
.resample()メソッドで指定の頻度に変換してくれる
日足、週足、月足、年足、30分足、1時間足、etc
四本値から四本値へresampleする場合にはコツがいる
27
Sample:
Case2-1_2.ipynb
Resampling image 1/4
100
99
102
105
102
103
105
106
104
102
Daily
Open High Low Close
100 105 99 102
Weekly
28
Resampling image 2/4
100
99
102
105
102
103
105
106
104
102
Daily
Open High Low Close
100 105 99 102
103 106 102 102
Weekly
29
Resampling image 3/4
100
99
102
105
102
103
105
106
104
102
Daily
Open High Low Close
100 105 99 102
103 106 102 102
101 102 97 98
98 100 107 105
106 110 106 108
109 115 107 112
110 120 110 115
113 117 110 115
110 111 102 103
100 101 94 96
Weekly
30
Open High Low Close
100 106 97 105
Monthly
Resampling image 4/4
100
99
102
105
102
103
105
106
104
102
Daily
Open High Low Close
100 105 99 102
103 106 102 102
101 102 97 98
98 100 107 105
106 110 106 108
109 115 107 112
110 120 110 115
113 117 110 115
110 111 102 103
100 101 94 96
Weekly
31
Open High Low Close
100 110 97 108
106 120 106 115
Monthly
デリバティブの満期日を扱う
取引所 JPX
商品 株価指数先物オプション
満期日 毎月第二金曜日
該当日が祝日の場合はその前日
http://www.jpx.co.jp/derivatives/r
ules/last-trading-day/
32
満期日の例(2017/05 – 2017/08)
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
May 1 2 3 4 5 6 Jul 7/1
7 8 9 19 11 12 13 2 3 4 5 6 7 8
14 15 16 17 18 19 20 9 10 11 12 13 14 15
21 22 23 24 25 26 27 16 17 18 19 20 21 22
28 29 30 31 23 24 25 26 27 28 29
Jun 6/1 2 3 30 31
4 5 6 7 8 9 10 Aug 1 2 3 4 5
11 12 13 14 15 16 17 6 7 8 9 10 11 12
18 19 20 21 22 23 24 13 14 15 16 17 18 19
25 26 27 28 29 30 20 21 22 23 24 25 26
27 28 29 30 31
33
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
May 1 2 3 4 5 6 Jul 7/1
7 8 9 19 11 12 13 2 3 4 5 6 7 8
14 15 16 17 18 19 20 9 10 11 12 13 14 15
21 22 23 24 25 26 27 16 17 18 19 20 21 22
28 29 30 31 23 24 25 26 27 28 29
Jun 6/1 2 3 30 31
4 5 6 7 8 9 10 Aug 1 2 3 4 5
11 12 13 14 15 16 17 6 7 8 9 10 11 12
18 19 20 21 22 23 24 13 14 15 16 17 18 19
25 26 27 28 29 30 20 21 22 23 24 25 26
27 28 29 30 31
満期日の例(2017/05 – 2017/08)
34
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
May 1 2 3 4 5 6 Jul 7/1
7 8 9 19 11 12 13 2 3 4 5 6 7 8
14 15 16 17 18 19 20 9 10 11 12 13 14 15
21 22 23 24 25 26 27 16 17 18 19 20 21 22
28 29 30 31 23 24 25 26 27 28 29
Jun 6/1 2 3 30 31
4 5 6 7 8 9 10 Aug 1 2 3 4 5
11 12 13 14 15 16 17 6 7 8 9 10 11 12
18 19 20 21 22 23 24 13 14 15 16 17 18 19
25 26 27 28 29 30 20 21 22 23 24 25 26
27 28 29 30 31
満期日までの営業日数例
(2017/05/01 - 2017年5月限)
35
課題
祝日をどうするか
第二金曜日をどうやって判定するか
36
日本の祝日に対応するには・・・
米国の場合はpandas.tseries.holiday.USFederalHolidayCalendarが用
意されているが日本の祝日には対応していない(2016/09/22現
在)
AbstractHolidayCalendarクラスを継承して、祝日のルールを作成
することができるが、色々と大変・・・
年によって祝日が異なる
CustomBusinessDayで個別の休日を実装できる
既にあるカレンダーデータを利用してpandasに実装してみる
37
Case2-3: CustomBusinessDayで満期日
とそれまでの日数を計算してみる
yaml形式で提供されている祝日データを取り込む
第二金曜日はpandas.date_range(freq=‘WOM-2FRI‘)で作成できる
CustomBusinessDayで時間を演算した際には休日がスキップさ
れる
38
Sample:
Case2-3.ipynb
Jupyter Notebookを使い倒す
~便利な機能を見逃すな~
39
Case3-1: マジックコマンドを自作して
みる
line magicで株価を検索し、IPython.display.IFrameに出力してみ
る
cell magicで様々な形式のデータをnotebookのセルに貼り付けて
pandasのDataFrameに変換してみる
よく使うコマンドは.py形式に保存して%load_extで呼び出すこ
とができる
40
Sample:
Case3-1.ipynb
Case3-2: ipywidgetsを使って超かんた
んにUIを作る
ipywidgets.interactを関数にデコレートするだけで簡単にUIを実
装できる
ipywidgets.interactの引数の型によってUIが決まる
bool型: チェックボックス
int型: スライダー
株価の移動平均とボリンジャーバンドの範囲を動的に変化させ
るグラフを作ってみる
41
Sample:
Case3-2.ipynb
便利なNbextensions
Nbextentionは個別にインストールすることも可能だが、
jupyter_contrib_nbextensionsからまとめてインストールをするの
が便利
https://github.com/ipython-contrib/jupyter_contrib_nbextensions
Nbextensions edit menu itemで個々のextentionのEnable/Disableが
簡単にできる
Javascriptでextentionを自作することもできる
42
今回のまとめ
Python >>> 越えられない壁 >>> Excel
時系列データに便利
簡単にコマンドやUIを作れる
43
サンプルコード等について
今回使用したサンプルコード、Excel
ファイルはGithubに置いてあります
https://github.com/drillan/pyconjp2016
下記の対応をしたため、冗長な部分が
あります
Python2, Python3の両方に対応
インターネット未接続時はオフラインの
ファイルを参照
ライセンス制限は特に設けていません。
ご自由にお使いください
44
ご清聴
ありがとうございました
See you next year?
45

Weitere ähnliche Inhalte

Andere mochten auch

WindowsでPython
WindowsでPythonWindowsでPython
WindowsでPythondrillan
 
GmailとPythonでイベント管理
GmailとPythonでイベント管理GmailとPythonでイベント管理
GmailとPythonでイベント管理drillan
 
ビックデータとPythonではじめる野球の統計分析 #pyconjp
ビックデータとPythonではじめる野球の統計分析 #pyconjpビックデータとPythonではじめる野球の統計分析 #pyconjp
ビックデータとPythonではじめる野球の統計分析 #pyconjpShinichi Nakagawa
 
Pynyumon#4lt
Pynyumon#4ltPynyumon#4lt
Pynyumon#4ltdrillan
 
データ分析スクリプトのツール化入門 - PyConJP 2016
データ分析スクリプトのツール化入門 - PyConJP 2016データ分析スクリプトのツール化入門 - PyConJP 2016
データ分析スクリプトのツール化入門 - PyConJP 2016Akinori Kohno
 
みんなのPython勉強会#21 澪標アナリティクス 井原様
みんなのPython勉強会#21 澪標アナリティクス 井原様みんなのPython勉強会#21 澪標アナリティクス 井原様
みんなのPython勉強会#21 澪標アナリティクス 井原様Takeshi Akutsu
 
Python学習奮闘記#07 webapp
Python学習奮闘記#07 webappPython学習奮闘記#07 webapp
Python学習奮闘記#07 webappTakeshi Akutsu
 
アジャイルってなにが美味しいの
アジャイルってなにが美味しいのアジャイルってなにが美味しいの
アジャイルってなにが美味しいのYasui Tsutomu
 
サンプリングと推定 Siとht推定量
サンプリングと推定 Siとht推定量サンプリングと推定 Siとht推定量
サンプリングと推定 Siとht推定量T T
 
みどりぼん9章前半
みどりぼん9章前半みどりぼん9章前半
みどりぼん9章前半Akifumi Eguchi
 
パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来Atsushi Odagiri
 
第10章後半「ブースティングと加法的木」
第10章後半「ブースティングと加法的木」第10章後半「ブースティングと加法的木」
第10章後半「ブースティングと加法的木」T T
 
続・わかりやすいパターン認識 第7章「マルコフモデル」
続・わかりやすいパターン認識 第7章「マルコフモデル」続・わかりやすいパターン認識 第7章「マルコフモデル」
続・わかりやすいパターン認識 第7章「マルコフモデル」T T
 
相関係数と決定係数~回帰係数とその不偏性も
相関係数と決定係数~回帰係数とその不偏性も相関係数と決定係数~回帰係数とその不偏性も
相関係数と決定係数~回帰係数とその不偏性もT T
 
On the Dynamics of Machine Learning Algorithms and Behavioral Game Theory
On the Dynamics of Machine Learning Algorithms and Behavioral Game TheoryOn the Dynamics of Machine Learning Algorithms and Behavioral Game Theory
On the Dynamics of Machine Learning Algorithms and Behavioral Game TheoryRikiya Takahashi
 
No55 tokyo r_presentation
No55 tokyo r_presentationNo55 tokyo r_presentation
No55 tokyo r_presentationfuuuumin
 
CAAD FUTURES 2015: Development of High-definition Virtual Reality for Histo...
CAAD FUTURES 2015: Development of  High-definition Virtual Reality for  Histo...CAAD FUTURES 2015: Development of  High-definition Virtual Reality for  Histo...
CAAD FUTURES 2015: Development of High-definition Virtual Reality for Histo...Tomohiro Fukuda
 
Mvvm is like born fraction
Mvvm is like born fractionMvvm is like born fraction
Mvvm is like born fractionKen Haneda
 
ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発Takakiyo Tanaka
 

Andere mochten auch (20)

WindowsでPython
WindowsでPythonWindowsでPython
WindowsでPython
 
GmailとPythonでイベント管理
GmailとPythonでイベント管理GmailとPythonでイベント管理
GmailとPythonでイベント管理
 
ビックデータとPythonではじめる野球の統計分析 #pyconjp
ビックデータとPythonではじめる野球の統計分析 #pyconjpビックデータとPythonではじめる野球の統計分析 #pyconjp
ビックデータとPythonではじめる野球の統計分析 #pyconjp
 
Pynyumon#4lt
Pynyumon#4ltPynyumon#4lt
Pynyumon#4lt
 
データ分析スクリプトのツール化入門 - PyConJP 2016
データ分析スクリプトのツール化入門 - PyConJP 2016データ分析スクリプトのツール化入門 - PyConJP 2016
データ分析スクリプトのツール化入門 - PyConJP 2016
 
Stapy#22 LT
Stapy#22 LTStapy#22 LT
Stapy#22 LT
 
みんなのPython勉強会#21 澪標アナリティクス 井原様
みんなのPython勉強会#21 澪標アナリティクス 井原様みんなのPython勉強会#21 澪標アナリティクス 井原様
みんなのPython勉強会#21 澪標アナリティクス 井原様
 
Python学習奮闘記#07 webapp
Python学習奮闘記#07 webappPython学習奮闘記#07 webapp
Python学習奮闘記#07 webapp
 
アジャイルってなにが美味しいの
アジャイルってなにが美味しいのアジャイルってなにが美味しいの
アジャイルってなにが美味しいの
 
サンプリングと推定 Siとht推定量
サンプリングと推定 Siとht推定量サンプリングと推定 Siとht推定量
サンプリングと推定 Siとht推定量
 
みどりぼん9章前半
みどりぼん9章前半みどりぼん9章前半
みどりぼん9章前半
 
パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来
 
第10章後半「ブースティングと加法的木」
第10章後半「ブースティングと加法的木」第10章後半「ブースティングと加法的木」
第10章後半「ブースティングと加法的木」
 
続・わかりやすいパターン認識 第7章「マルコフモデル」
続・わかりやすいパターン認識 第7章「マルコフモデル」続・わかりやすいパターン認識 第7章「マルコフモデル」
続・わかりやすいパターン認識 第7章「マルコフモデル」
 
相関係数と決定係数~回帰係数とその不偏性も
相関係数と決定係数~回帰係数とその不偏性も相関係数と決定係数~回帰係数とその不偏性も
相関係数と決定係数~回帰係数とその不偏性も
 
On the Dynamics of Machine Learning Algorithms and Behavioral Game Theory
On the Dynamics of Machine Learning Algorithms and Behavioral Game TheoryOn the Dynamics of Machine Learning Algorithms and Behavioral Game Theory
On the Dynamics of Machine Learning Algorithms and Behavioral Game Theory
 
No55 tokyo r_presentation
No55 tokyo r_presentationNo55 tokyo r_presentation
No55 tokyo r_presentation
 
CAAD FUTURES 2015: Development of High-definition Virtual Reality for Histo...
CAAD FUTURES 2015: Development of  High-definition Virtual Reality for  Histo...CAAD FUTURES 2015: Development of  High-definition Virtual Reality for  Histo...
CAAD FUTURES 2015: Development of High-definition Virtual Reality for Histo...
 
Mvvm is like born fraction
Mvvm is like born fractionMvvm is like born fraction
Mvvm is like born fraction
 
ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発
 

PyCon JP 2016 Talk#024 ja