Life is Like a Boat

忘備録や投資日記、プログラミングに関するメモやtipsなど

LambdaとSQSを使った自動化

決算発表が過ぎ、やっぱり進捗率を網羅的に把握しておく必要あるなと再認識するに至りました。よく株探で上方修正期待の高進捗率ランキングなどと記事が出ますが、幅広くみたい場合はやはり手元にデータセットを作るしかないのではないかと。こうした動機から、せっかくなので今まで触った機会が少なかったAWSを使って日次で進捗率を把握する仕組みを作ってみました。

処理の流れ

  1. PuppeteerスクリプトをHeroku Schedulerで毎日定期実行。
  2. 結果をCSVにしてAWS S3に保存。
  3. S3にCSVファイルが保存されたタイミングでAWS SQSを介してファイルが生成された旨のイベントを生成、AWS Lambdaを実行。
  4. LambdaはPythonのPandasで前処理しているイメージ。不用なカラムの除去、データ型の変更、カンマ区切りの除去、憎き全角スペースの除去などを行います。結果はHeroku Postgresにupsertする。

成果

こんな感じで進捗率が把握できます。18年分も取得して決算期変更等がなければ前年同期比の比較ができるようにしました。 f:id:nerimplo:20190826131031p:plain

ポイント

Pandasはdataframeをto_sqlする際に、PostgreSQLにupsertする仕組みがありません。 Dataframeを一度array of dictionaryに変換、sqlalchemy.dialects.postgresqlを使ってupsertのステートメントを作るようにしました。

python - Bulk Upsert with SQLAlchemy Postgres - Stack Overflow

コスト

AWS側は無料枠を使い切るまで残り98%くらいあり、このペースの日次の実行だと十分余裕がありそうです。 Heroku Postgres側は毎月$9のHobby Basicを使っています。

ゼロからわかるAmazon Web Services超入門 はじめてのクラウド (かんたんIT基礎講座)

ゼロからわかるAmazon Web Services超入門 はじめてのクラウド (かんたんIT基礎講座)

Amazon Web Services 業務システム設計・移行ガイド (Informatics&IDEA)

Amazon Web Services 業務システム設計・移行ガイド (Informatics&IDEA)