はじめに
筆者はちょくちょく株の売買を行っていて、その参考データとして証券会社別の日経先物の売買状況を毎日集計しています。
このデータが毎日エクセルで公開されている訳なのですが、集計が非常に大変。
最初はエクセルでVBAを組んで収集していましたが、夜家に帰ってからパソコン立ち上げてVBA実行して、グラフ更新して結果見てtwitterでつぶやいて、、とか毎日毎日大変な作業でした。(最後のは趣味ですが…)
自動で集計してサイトにアップしてくれるシステムがあれば帰りの電車で確認出来て便利なのになぁと日々思ってました。
ってことで、自分で作成することに。
製作期間は半年…
毎日仕事終わってから1時間程度調べ物や作業をしてこつこつ。
でも一応なんとか形になって、想像通りなものができました。
作っていく段階で思ったのが、Pythonってホントに何でもできちゃうんだなと!ホントにすごい便利だなと!
調べれば調べるほど色々なものができる!…ってことで、私は半年間もかかってしまいましたが、この半年間で学んだPythonのすごいところ、ここはつまずいた、ってところを紹介していきたいと思います。
自分の備忘録的な面もありますが、これからシステムを作りたいという人の参考になれば嬉しいです。
サイトの仕組み
まずはサイトの仕組みを紹介します。
全体の概要はこんな感じ。
- スクレイピング
- データ蓄積&整形
- 可視化
◆スクレイピング
まずはデータ収集。
これはスクレイピングという技術を使っています。
私たちがいつも見るwebサイトは、HTMLというプログラムから作られています。右クリックしてソースを表示するとHTMLが表示されます。そのHTMLからデータを取得するのがスクレイピングです。
スクレイピングは、Pythonの「Beautifulsoup」「Requests」というライブラリを使用しています。具体的なやり方などは、後々紹介していこうと思います。
◆データ蓄積&整形
続いて、データ整形。
自身のPC内で取得したデータを整形する工程を踏んでいます。
取得したデータ形式は様々で、テキストのものもあればエクセル形式のものもあったりするので、Pythonの「Pandas」というライブラリを主に使用して、使いやすいように加工してます。
また、加工したデータはMySQLに保存して時系列のデータとして使えるように蓄積していってます。
データベースのMySQLについても、Pythonで操作することが可能で、「SQL Alchemy」というライブラリにより操作しています。
◆可視化①:matplotlib
続いて可視化です。
MySQLに溜め込んだデータやPandasで加工したデータをグラフ化します。
Pythonの可視化ライブラリは沢山あるのですが、私は「matplotlib」と「plotly」を使用しています。
matplotlibはオプションが多く、様々な種類のグラフが美しく描けるライブラリです。
サイト内の先物手口のグラフ(積み上げ棒グラフに折れ線グラフを重ねたグラフ)はmatplotlibで出力しており、少し慣れれば非常に使い勝手が良いライブラリです。
◆可視化②:plotly
可視化のライブラリの二つ目はplotly。
plotlyはインタラクティブなグラフが書けるライブラリです。
インタラクティブなグラフとは、サイト上で動かせるグラフの事です。
このサイトではオプション建玉のページのグラフをこのplotlyで作成していて、クリックすると数値が出たり拡大縮小することができます。
このグラフはjpgのような画像形式ではなく、javascriptsベースで作成されており、少し面倒な処理をしなくてはなりません。
面倒な処理を…そこは断念して、このサイトでは作成したグラフを「Chart studio」に登録して、サイトとリンクを繋ぐことで掲載しています。ここも追々紹介できればと思っています。
全体の概要はこんな感じです。
すべて一連のプログラムになっていて、ローカルのタスクマネージャーにより、時間になったらプログラムが起動されてWordPressが更新される仕組みになっています。