四半期決算を分析するアプリをWordPressで作るの開発進捗の一回目です。
随分と時間が経ってしまいました。
手が進んでない訳でも、頓挫した訳でも無くて、なかなかまとまった時間が取れませんでした。
今は構成図の以下の赤枠部分を開発中です。EDINETから「①業績データ取得」して、その結果をデータベースに投入する「②決算データ更新」の2ステップです。
①業績データの取得
ここは完成しています。
Qiitaの方にとても素晴らしいコードの記事があったので殆ど苦労しませんでした。
こちらの記事では有価証券報告書を対象としておりますが、私が欲しいのは決算短信です。
その為、全くのコピペでは無いですが殆ど同じやり方で実現可能でした。
いくつか躓きやポイントがあったので、そのメモを残します。
有報キャッチャーの利用
企業情報を機械的に取得する為のAPIを提供しているサービスです。
先ほどの記事に解かり易い説明がなされているのでここでは省いてしまいます。
決算短信は「適時開示情報」
いや、そうだよ。って感じですが、企業の報告する文書の種別がちゃんと解っていないせいで、どこから決算短信を取得できるのか有報キャッチャー上を彷徨ってしまいました。
上記記事では「有価証券報告書」を対象としていたので、対象URLや一部の分岐の条件を変える必要がありました。
とは言え、ほぼ丸コピーに近いのでちょっとここはサンプルコードを載せるわけにはいかないです。
②決算データ更新
ここは進捗率50%くらいです。
上記①で取得してきた決算短信、というか企業の報告資料は「xbrl」という形式で提供されます。
「xbrl」は構造的にはhtmlと同じxmlです。
しかし、この「xbrl」が非常に難解で突破出来ていないです。
本読んでガッツリ学習が必要なところなのでしょうが、もっとラクにやりたいと思っています。
xbrl全体を理解するのは困難な道のりですが、四半期決算の業績を抜くくらいなら大した知識無くサクッと済ませられるでしょう。。たぶん。
ここでも躓きとポイントを載せます。
決算短信はxbrlではなくhtmlで提供される
さっき「xbrl」で提供されるって言ったばっかりですが、、、違いますw
決算短信は拡張子がhtml(正確にはhtm)として提供される模様です。
内部のタグの命名はxbrlの記述に即しています(たぶん)。
有価証券報告書とかはきちんと「.xbrl」の拡張子で提供されます。
この差異と、先ほどの決算短信は適時開示情報である件も合わさって、決算短信のxbrlがどこにも無いー!となり、更に有報キャッチャー上を彷徨いました。
XBRLの分析にBeautifulSoupを利用する
XBRLは複雑です。あまりxbrlの中身の解析までを対象とした記事も少ない気がします。
しかし難しいとは言え、所詮xmlです。
Pythonでxmlをパースする良い方法無いかなーと思って発見したのが、BeautifulSoupというPythonのパッケージです。
Webスクレイピングでhtmlの中身を解析するためによく使われるパッケージの様で、検索すると沢山の記事が出てきます。
これがトンデモ無いスグレモノで、xmlの任意の属性をまるでsqlの様に条件付けしてデータを取得することが出来ます。
ここはもうちょっと見せられる感じに仕上がったらサンプルコードを載せたいと思っています。
データ構造を考える
データ構造については以下の様に考えています。
レイヤー | 一般的な意味 | 今回の設計での役割 |
---|---|---|
ログ層 | 非加工の生データ(非正規化データ)を保持するレイヤー | xbrlのタグ1つ1つの要素と値をそのまま保持する。 キー値にファイル名を持たせる。 |
集約層 | ログ層のデータを正規化して保持するレイヤー | キー値は証券コードと決算期間。 売上高などの四半期決算業績データを持つ。 ここまで出来ると決算プロ並になる。 |
集計層 | 集約層のデータを加工、集計等行い、分析に使い易く保持するレイヤー | 累積でない四半期決算の情報など、加工データを持たせる。 |
「ログ層」「集約層」「集計層」という考え方はデータ分析分野で用いられるログデータの保持、分析手法です。
いきなり無理して正規化したデータをデータベースに突っ込むのではなく、必要最低限のキーとデータをデータベースに突っ込んでから、良い感じに加工していく考え方です。
出来ているのは”ログ層”の作成までです。ログ層⇒集約層への加工はデータベース上(PL/SQL)で行おうと思います。
ここまで出来て②が完了です。
集約層への加工はどんな分析をサービスとして公開するか次第なので後回しです。
若干反れますが、この手の技術本で最近すごく良い物を見つけました。
データ分析分野に踏み出そうとしている方には超オススメです。
私もかなりデータベース、SQL関連の書籍を読んできましたが、これほどの当たり本はかなり稀少です。
SQLを用いたデータ分析の具体的な手法(Window関数の使い方)や、データをどう評価すべきか、その評価方法をどうSQLで表現できるかを初心者から中級者に向けて書いてあります。
勿論、上級者でも学べるものが絶対あると言えるほど、情報が広く、そして深いです。
Webページの直帰率の計算方法など、Googleアナリティクスとか裏でこんな感じで動いているのだろうなー。というロジックの照会があったり、今すぐ現場で使えるテクが満載です。
SQLに少しでも携わった経験があるのならば、読むことをお勧めします。
この記事を記述している時点では、Amazonレビューが全部★5つでした! すげぇ・・・。ここでは紹介はこの辺にしておき、いずれこの本の記事も書こうと思います。
進捗報告締め
決算短信のデータベース化はうまくできそうです。
あと、ここまで出来ているのは開発環境(自分のPC上)なので、果たしてXServer上で何か制限に引っかからないかをちょっと心配しています。
特にPythonのバージョンの差異やパッケージのインストールが心配です。
最近はあまりまとまった時間が取れなくてモタモタやっていますが、楽しくやれてるのでまったり作っていきます。