- 11月下旬から、MySQL上の株価データをPythonであれこれしてました。
- 18万行をscikit_learnに投げたら、待ち時間が…。
- MySQL:これまで全行読み出ししてた…。
- 銘柄コードをインデックス化したらすごく時短になった…気がする。
11月下旬から、MySQL上の株価データをPythonであれこれしてました。
「東京証券取引所日報」(pdf)をダウンロードし、解析後CSVにしたのちMySQLに蓄積してきました。現在280万行くらいになりました。
鳥取県日南町でのリフォーム作業に通うのが寒さなどの関係で、およそ翌春まで中断となった11月下旬からは岡山市西大寺でPythonをほぼ毎日いじってました。
蓄積した株価データを利用し「大儲け」を妄想したものの、発想の貧弱さ、プログラム構築の非力さ、加齢による物忘れ、などなどありとあらゆる困難(≒現実)に阻止され、昨日までに「機械学習」での妄想は粉砕されました(もともと「粉砕」される対象物でもなかったのか…砂でつくった「よくできたスクリプト」(個人の感想)です。
しかし、学びは多かったです。身に着いたかどうかは不明…。
18万行をscikit_learnに投げたら、待ち時間が…。
Pythonで機械学習となったら、scikit_learn(=sklearn)ですよね。ということで、過去データを18万行放り込んで、閾値を超えるかどうかで学習、テストしてみました。これならある程度の可能性があるのではないかと妄想しました。
テストの結果、0.67~0.85くらいの結果でした。結果が変わるのは設定するランダム数のモトの違いによるものです。
ということで、学習してない新しいデータを放り込んで試したら…ダメでした。期待したほどの「見た目」にはならないのです。
それも、毎回、240万行のMySQLから18万行ほどを読み出し、学習させる…ということで二つのボトル・ネックがありました。ひとつは、MySQLの読み出し、もうひとつは学習を都度実行する、のに要する時間です。
いよいよ、本題です…。
MySQL:これまで全行読み出ししてた…。
Python+MySQLで扱う行数も増えたけど、表計算ソフトよりはかなり早いので「こんなものかな~」と思ってました。しかし、さすがに毎回全行から選び出しの作業に多少の時間ロスを感じるようになりました。
これまでMySQLのindexについてほぼ考えることもなく、indexはAUTO_INCREMEN+Primaryを指定している逐次番号だけでした。何も知らないというのはある意味恐ろしいもので、表計算ソフトより速い(と信じ込む)ことで達成感を味わってしまってました。indexをつくれば速度がえらく違うということを知らなかったのです。
検索で番号を使うことはほぼありません。一方、ある列をindex指定すればデータが膨らむ、という漠然としたことはわかってましたので、非力なPCに負担をかけまいという結論だったのかと、今になってみれば思います。
銘柄コードをインデックス化したらすごく時短になった…気がする。
銘柄コードをインデックス化するのに、phpMyAdmin上で操作しました。爺の環境だと、XAMPP起動→MySQL:Start→Apache:Start→MySQL:Admin→小窓が変わり:パスワードなど入力→phpMyAdmin画面→目的のデータベース→目的のテーブルと選択し、表示されているであろう「構造」→インデックス表示の下の方にある「カラムにインデックスを作成する」に注目。左側にインデックス作成対象候補となる数字が表示されてますので、自分がインデックスしたい項目の左に表示されている番号(テーブル構造の左端に表示されている)を入力します。以降、覚えてないので、各自、自力にて…。もちろん、SQL文を書いてやるのもあります。
これからあと「実行」するとindexができるはずです。自己責任にて。
銘柄コードのindexがないときは4/100秒、index作ってから4/10000~8/10000秒程度に速くなりました。50~100倍の差になったみたいです。
かかった秒数に大した違いはない…という声も聞こえてきますが、まあ、その辺は…(ゴニョゴニョとごまかす)。検索、抽出などに使う項目であれば躊躇なくindex作るのがいいと、爺は確信(≒妄信)しました。もっとも、何でもかんでもすればよいものではないというのは、PCの負担を考えバランスも大事かと…ええ。
今回、銘柄コードをインデックス化したことで、sklearn以外でも使用するMySQLへ蓄積しているデータの抽出が早くなりました。独学というのは、ずいぶんな回り道をするものだと…シミジミ。
爺の場合、より問題なのは、18万行を学習するsklearnの消費時間です。学習を都度させるより蓄積し、時間短縮を目指す方が非力なPCの場合より大切ではないかと想像(≒妄想)している今日この頃です。しかし、株価予測の学習効果が芳しくないため、このまま学習蓄積を進めても意味があまりなさそうでは、ということでだらけている爺の今日この頃でした。