アラフィフ宣言したTakayamaです。
ゼロからPythonのプログラミングを始めて一か月近くになります。成長を感じる機会の少ないオッサンには、充実した一か月でしたので一か月を振り返ってみました!
プログラムを始めたきっかけ
ゴールデンウィークにコロナ影響で「Stay Home」企画として始めました。また息子が大学生になり「プログラムを勉強する」と言っていて「僕も一緒に何か作れたら良いな。」と思えたのがきっかけです。以前から投資でも様々なデータを見るので「集計等が自動化できれば楽しそう。」という動機付けでした。
僕はゲームを作りたい訳でなく、Webページ上に表示されるデータを解析するのに適した「Python」を学ぶ事にしました。米国の金融トレーダが利用したり、最近AI活用で話題の言語で憧れていたのですよね。
始めの3日:とりあえず動くものとを作る
GWの連休中に「何かプログラムを1つ作る」事を目標にし「投資信託のCSVファイルを自動でダウンロードし、Spreadhseet(Google版Excel)のデータを自動更新する!」というものを試行錯誤でサイトの情報をコピペしまくって作りました。正直「よくわからないけど動いた!」というレベルです。こちらは備忘録を記事にしてます。
思ったより結果も出たので、「少し続けてみよう!」という気になりました。
StayHome企画で、始めてのPythonプログラム。乱文だが記事。
セミリタイアしたらプログラムも楽しそう?始めてのPython https://t.co/sqcTvmkVVw
— たかやま@Takayama.O (@takayama70) May 4, 2020
1週目:ウェブスクレイピングとファイル操作を覚える
まず、今まで配当情報等の投資関連のサイトを定期的に見に行くのを自動化したいと思い、「Web上の表示データをExcel等のファイルに保存する」為の複数のパターンを学びました。
始めは、家のWindowsのパソコン上で動かしていましたが、「Pythonのプログラムをブラウザ上で書いて実行できるGoogle Colabo」というのがあるのを知りました。自分のPCの環境のメンテをしなくて良いですしタダで使えます。Stay Home週間の終わりにはGoogle ColaboでJavaScriptサイトからもデータが取れる様になりました。
Google ColabでのPythonが(オッサンでも)楽しいです。全部ブラウザ上で完結します。
・JavaScriptのサイトからもデータが取れる
・Google Drive上のSpreadsheetと連携できる。
(様になった。。。)BDCの情報取りが安定して動いてないので、
Colab上で更新プログラム書いてみました。 pic.twitter.com/iQJwqJmIdB— たかやま@Takayama.O (@takayama70) May 10, 2020
Google Colaboサンプル:VIGの配当をとあるサイトからCSVに落とす
2週目:機械学習を触ってみた。
Pythonはニューラルネットワークや機械学習に適した言語で、興味があったので書籍を一冊買いました。
GWが終わり仕事が始まったのでプログラムは控えようと思いましたが、娘は休校、息子はオンライン授業で、週末は皆自宅で過ごし、家全体が少しノンビリした感じの中、時間の確保が普段より容易で、本を片手PCに向かう事になりました。貴重な時間でした。
調子に乗って買ってしまった。
機械学習は僕に必要ないので読み物として pic.twitter.com/l0ObRcmYtO
— たかやま@Takayama.O (@takayama70) May 11, 2020
機械学習を利用する目標として
「J-REITの物件情報(NAV・物件数・LTV・時価総額)等から、企業格付けを予測する」
を作ってみる事にしました。結局、自分が作成したデータで予測精度は0.71(<=低い)でデータ数少なく妥当性も乏しく面白い結果でなかったです。
「とりあえず動かすだけであれば簡単です!」と色んなWebページに書いてありましたが、Python初心者には「適切な学習用のデータを準備して、整形して、機械学習エンジンに入力する」のにデータ操作方法がわからず一苦労でした。
機械学習自体は「活用するには、エンジン適正・特性の知識とデータ収集や妥当性検証に時間がかかる。」と言う印象を持ちました。
僕は現時点で「データ収集を実現するプログラムを習得する」ので十分と思い、本も半分程で中座しています。
下記はGoogle Colaboで動かした格付予測のプログラムのキャプチャの一部です。ビジュアル的に映えないですよね。
3週目:Twitter APIを使ってみて、定期起動のためにクラウドを勉強する
在宅勤務と外出制限が続く中、息子から「~のプログラムを作りたくて、TwitterのAPIを利用している」との話があり、真似して「Twitter Developer」に登録し動かしてみました。
始めに「設定したキーワード(例:米国株)を含むツイートをリアルタイムでどんどんExcelファイルに保存していく」プログラムを作りました。
「簡単にTwitterとかLINEでもPythonのプログラムが使えるんだな」というのがインパクトがありました。
3週目(その2):定期起動のためクラウドを勉強する
作ったプログラムはデータの更新のため自動で定期起動したいのですが、手元のWindowsは電源を落としますので、Windows上のプログラムもブラウザ上のプログラムも継続して動かせないという課題に直面しました。
WordPress用のレンタルサーバは独自のソフトの利用制限があり使えず、結局「クラウド化すれば良い!」という結論になりました。しかも「サーバレス・コンピューティング」なるものが流行っていて、個人で動かす程度ならタダでできる!という事がわかりました。
端的に言うと、「作ったプログラムをクラウドに入れて、”このプログラムをこの時刻に動かしてね。”設定をすれば良い。」と言うものです。Google Cloudの必要なところだけ勉強して、作ったプログラムはクラウド上に入れ込み、定期的に動く様にし始めました。
下記はGoogleクラウドスケジューラーのキャプチャです。設定は簡単です。
4週目:日銀BOTを作ってみた。
自動定期起動ができる様になり、TwitterのAPIとウェブスクレイピングの知識を使って、「日銀BOT」なるものを作成し、クラウド上に呟く内容のプログラムを置いていきました。
需要なさそうですが、個人的に「日銀の緩和政策の実施状況について数字を見に行くのが面倒」と感じていたのがきっかけです。
日銀のサイトや、証券取引所のサイトのデータを周期的に見て、「前場の終わりにETFの購入見込み」や「国債やETFの購入実績」を呟くものです。有用性は微妙ですが「自分の興味があるところ」でプログラムするのが手っ取り早いですよね。
初期の目標は達成したのですが、何か欲しい機能が思いつけば追加しよう思います。
1時間のスクレイピングが動いた!
この時のアイデアで「日銀の過去のバランスシート情報から、国債・ETFの保有額を取得する」プログラムを作りました。
保有額推移のグラフ表示したかったのですが、Pythonのグラフ表示がかっこ悪くボツにしました。ですが、過去10年分の10日毎のデータ、約360ページの情報を、1つのプログラムが1時間程動いてデータを出力するというのはなかなか感動的でした。
呟きませんでしたが、下記が「日銀のETFの所有額」の取得データから作成した金額推移です。現在は簿価ベースで32兆円程度ですね。10年前はゼロだったのですが。
この一か月で一番大きいプログラムですが、50行程度です。学んだ事が詰まったコードですね。
Pythonで、日銀のサイト過去10年分のバランスシートから国債保有額/ETF保有額をCSV化するプログラムを作成しました。
実行に一時間かかりますが。https://t.co/5EOEcdjtXS
— nichigin_bototto0 (@bototto0) May 29, 2020
まとめ 「コロナ影響でプログラム覚えたよ!」
外出制限も緩和され、6月から出社規制も緩和されます。
コロナの思い出の1つが「外出できないので家でプログラムを覚えた!」となりました。
久々に趣味から達成感を得る!ということを感じました。問題はオッサンなので「覚えてもすぐ忘れる」事ですね。多分止めたら三か月でほぼ忘れると思いますが。
プログラムを生活や趣味のツールとして使い続けられたら良いと思う
昨日、妻が「イオンのネットスーパーは5000円買うと配送料無料なので、まとめて買おうとするが、売り切れが多く、いつ申し込むのが良いのか難しい。。。」と話しをしていました。
そこで、定期的に買う商品が「売り切れ」か「在庫があるか?」を妻とのLINEグループに通知するというをデモを30分程で作り「こんなのどぅ~?」と見せました。ボツでしたが、、、
下記だとアカウントのトークン取って8分で動いてますね。
「プログラムという選択肢があると、世の中へのアプローチを変えるのだな」と思いました。一方で少し変態な感じもしますが、、、
今更プロのプログラマーに慣れる訳ではないので、今後は、投資等の集計や分析に、エクセルを使う延長の様に勉強と活用が継続できたら良いと思いました。
おまけ ゼロからPythonを習得するという点での感想
・求められる知識の種類が多く、幅も広過ぎて、広く浅くのバランスが難しい。小さい単位で「やりたい事」を決めてやるのが良い。
・ネットに大量の情報が落ちているので、簡単そうなのを見つけて「真似すれば動く」ところまでは頑張って勉強する。真似して動いたらカスタマイズする。
・ネットの情報も、環境もLinuxの知識が前提になっているのがキツイと思いました。問題が発生した時にココ関連が一番ツライです。(Windowsだけ文字コードが違うとか、ファイルのパーミッション管理が違うとか、大文字・小文字が区別されるとか)