pagetakaBlog

最近リフォームと鳥取県日南町の記事多め。写真、PC、ネット等の話題も

最近のPython修行…。

前説:Pythonなどのブログ記事11月中旬から書いてない。

PythonからMySQLに接続し、株価データを保存・利用してたんですが、11月中旬以降、関連の記事を書いていませんでした。

pagetaka.hatenablog.jp

1か月間何もしてなかったわけではありませぬ。この間、書籍を購入するなどして、Python利用のパワーアップをしていました。エラーとわずかな前進の繰り返しでした…が、多少の手ごたえもありました。

Excel形式に保存するのに時間かかっていた。

3月からの株価データ約190日分は、MySQL上で約62万行、50MBほどになります。

市場日毎にデータが増加します。そのせいか、Pythonスクリプト稼働時間が徐々に長くなっていました。MySQL全日データから必要分を抽出・分析したのち(ここまではあまり時間かかってない、その後)、xls形式で保存するのに時間がかかっていたように思います。

午前8時半過ぎに東証サイトに前市場日データがPDFで公開されてから、急いでDL→CSV化→MySQLへ追加→解析→Excel保存、などやっているうちに、午前9時の開場・寄付時間に間に合わない…という事態…。これでは、何のためにやってるのかわかりません。

どこに時間がかかっているのか調べてみると、各銘柄コード毎にExcel形式でシートをつくり、100シートで1Excelファイル保存の繰り返し作業でした。書き込まれるのはSSD上ですが、4,000銘柄近くあると時間もかかる…という状態でした。

100シートごとにExcel形式で保存する作業以前に、当日購入する候補だけ手早く表示する方法を模索しました。

CSV保存、pandas利用で早くなった。

第一の改善は、Excel形式からCSV形式に使用するファイル形式を変えることにしました。Excel形式だと、何行目・何列目に何それのデータ、という、データとセル位置がセットになり、情報も多くなります(openpyxl利用)。これをCSVにして面倒な位置情報を付加せず保存することにしました。Python配列またはpandasのDetaFrameからCSV保存すると「Excel計算式」などを乗っけることはできませんが、結構早目に作業が済んだように思います。

第二の改善は、データを効率的に処理する道具「pandas」の利用でした。データは、前日値と当日値の差分を計算する必要があります。これまでは、計算式をつくりPyhton配列でやってました。調べていったら、pandasに「shift」メソッドがあるそうで、「こりゃ便利」と思い、使わせてもらうことにしました。苦労したのは、Python配列と多少なりともスライスの仕方が異なる部分でした。

第三の改善は、Pythonスクリプト順を変更することでした。これまでは、Excelファイル全部が保存されてから、購入検討候補銘柄を抽出する作業、という手順でした。これを、購入検討候補銘柄を抽出する作業をpandas「DataFrame」上で実行し、Excel保存はそのあとに…。ひとまず急ぐのは寄値です。

これらの結果、余裕をもって購入検討候補銘柄を知り、証券会社サイトのより詳しい情報を得ることができるようになりました。とはいえ、15分程度しかありませんけどね(開場時間に間に合ってなかったことに比べると長足の進歩)。

pandas の本。

ネットで情報、部分的にヒットするのですが、Pandasの全体像が見えない…ということで本を購入しました(十分勉強できたかどうかは不明)。

書店に行って、「shift」のことを書いてある本を購入しました。「現場で使える!pandasデータ前処理入門 機械学習・データサイエンスで役立つ前処理手法」がその本です。読んでいくうちに、Python配列のスライスと似た機能はあるものの、書き方がチョット異なったりしています。これは、結構な戸惑いでした。

あわせて大切だったのが、現在自分が処理対象にしているのが、Pyhtonの配列(リスト)等か、pandasのDataFrame/Seriesか、ハッキリつかんでおくことです。type関数などで確認しないまま、Pythonリストの前提でスライスなどしても、エラー続き、ということが結構ありました。

このあとは numpy の利用かな~。

なんとか株価データを効率的に処理したいとさらなるスキルアップを考えています。pandasには、「移動平均」算出に使える「rolling関数」もあり魅力的です。「単純平均」以上に株価には使えそうです。

また、「numpy」には「加重平均」を使うこともできそうです。
www.sejuku.net

過去株価のうち、10日前と昨日では、当日に与える影響は重みが違うだろう、というのはぼけ老人の爺にもなんとなくわかります。そのうち使えるようになろうと妄想しています。

逆時計曲線(逆クロックチャート)

これまでと異なる着眼点で株価を見ています。まだ、結果をチェックできるような状況ではありません。なので、内容をブログ記事に載せるのははばかられる、というわけで1カ月ばかりPythonスクリプトで株データを処理する記事がありませんでした。この記事も、具体的な内容以前の状態です。

ま、たいていのことは先人が試していて、爺は空回りしている可能性も十分あります。寄値に注目しているうちに、一定の規則性のような線があるのではないかと妄想し、ネット徘徊した結果、「逆時計曲線」に近いものを見ているのがわかりました。

逆時計曲線には、株価だけでなく、約定株式数が必要です。日ごとのデータはありますが、時間・分ごととなると、なかなか入手困難です。WEBスクレイピングを一日中やり続けたら得られそうですが、どうも色々な意味でハードな作業になりそうです。爺が使っている証券会社が提供するチャートに「逆時計曲線」がありましたので、これを使わせていただこうかと…。