[自在]DataFrameのindexデータはiterrows()で取得すると便利。機械学習のトレーニングデータ作成に向けて

最近、MetaTraderで遊んでいるのだが、FXをやっているわけではなく、為替データを株価データで上書きして、株価分析ツールとして使って遊んでいる。

現状、市販の株価分析ツールはWindows版しかない。MetaTraderもWindows版だが、Wineで動かせるので、Macでも十分使える。Macで株価分析、バックテストを行うにはこれでいいのではないか。

ただ、MetaTraderを株価分析ツールとして使うときは、株価データをオンラインでは持って来れないので、自分で準備しなければならない。

Pythonを使って株価を取得しCSVファイルに書き出して、MetaTraderで吸い上げる形にしているのだが、pandasのデータ処理で困ったことがあった。そういえば、以前もpandasで時系列データを扱っていたときに困って、pandasを使うのを止めたのを思い出した。

それは「時系列データフレームの日付データがインデックスになっているため、配列として扱うことが出来ない。」という問題だ。CSV形式に書き出すため、時系列のDataFrameを単純なリストの配列に置き換えたいのだが、意外とこれが難しい。

DataFrameにdata=「Date,Open,High,Low,Close」とデータが入っていた場合、data.Dateで日付データが取得できればいいのだが、それが出来ない。
data.indexで取得したDateの列データを、data.valuesで取得した行列データに列結合させれば、リスト化することは可能(以前はこの手法で逃げてみた)なのだが、明らかに無駄が多いし、データの欠落があったときに正しく結合されるのか不安だ。

それで色々と調べてみて、やっと分かったのが、この手法。

for key, items in data.iterrows(): 

これで、keyにインデックスの日付データ、itemsに株価データが取得できるので、items.Openなどで個別のデータを扱うことが可能になる。これで、DataFrameのリスト化も、CSV書き出しも自由に出来るようになる。
なぜか、この方法は『Pythonによるデータ分析入門』でもみつけられなかった。

次は、pandasでトレーニングデータを作って、TensorFlowでディープラーニングさせてみよう。

『TensorFlowで学ぶディープラーニング入門』は、ディープラーニングの入門書の決定版だと思う。式展開も高校数学レベルで書いてあるので、大学で数学を学ばなかった人でも読めると思う。ちなみにサンプルソースに使っているPythonは2.7だけど、printコマンドを()付きにするだけで、Python3でも問題なし。

ただ、株価のような時系列データだと畳み込みニューラルネットワークではなく、RNN(RecurrentNN)の方が有効なので、『Chainerによる実践深層学習』も良いかも。

それにしても最近は機械学習の入門書の選択肢が増えて嬉しい限り、4,5年前はビショップのPRMLぐらいしかなかったからなぁ。

TensorFlowで学ぶディープラーニング入門 ~畳み込みニューラルネットワーク徹底解説~
中井 悦司
マイナビ出版 (2016-09-27)
売り上げランキング: 1,276

Chainerによる実践深層学習
新納浩幸
オーム社
売り上げランキング: 1,048