
企業分析サイト「バフェット・コード」開発者が語る、データ整形の「苦労」と「価値」
企業分析に必要になるデータを、誰でも簡単に参照できるサイト「バフェット・コード」。
しかし、そのキレイなUIの背景には、開発者の様々な「苦労」が存在するとか…?
今回は、バフェット・コードの開発者に、データ整形の苦労や、「バフェット・コード」が達成したい「データ整形の価値」について伺いました!

便利な「バフェット・コード」とその裏

バフェット・コード、便利ですよね。 僕も企業に関するデータを調べなきゃいけないことが結構あって、よく使っています。 経年でまとまっていて、かつ見やすいサイトっていうのがほとんどなくて。


ありがとうございます。

世の中の役に立っているサービスだと思います。 ただ、今回は開発、特にデータまわりのお話を聞きたくて。 想像するに、レガシーな分野だし、結構大変なところがあるんじゃないかな、と思っている訳ですが…。

大変なところね(笑)。 たくさんありますよ(笑)。
「XBRL」を「RDB」の世界に落とし込む

まず、こういった財務に関するデータって、どこから取ってくるかって分かります?

えっと…、EDINETですよね?


そうです。 EDINETが公開しているAPIがあって、有報(有価証券報告書)やIPO、株式分割などのリリースはここから取ってきています。 ただ、データが、ウェブサービスが期待するデータ構造をしていないんですよね。

というと…?

EDINETでのファイルは、「XBRL」という財務諸表を表現するための「XML」で来るんです。


本当だ。 よく見ると <?xml version="1.0" encoding="UTF-8"?>と書かれていますね。

XBRLはただのファイルなので、このままだとウェブサービスにとって嬉しくないですよね。 ウェブアプリケーションから扱いやすいのは、「RDB(リレーショナル・データベース)」や「KVS(キーバリューストア)」ですが、元データはネストしたデータ構造を表現しやすいXMLなので、それぞれのストレージやウェブアプリケーションからのユースケースに応じて、適切にデータを加工して保存する必要があります。 ここのtransform、変換の作業がそもそも大変です。
「データが確定しない」ことの難しさ

あと、「不定期に出るデータ」をマージするのが難しくて…。 例えば「株式分割」ってあるじゃないですか。

1株を100株に分割するやつですね。 その場合、株数が100倍になるという。

はい。 その株数の変化があった場合、過去の1株あたりのデータ…、例えば「配当」が使い物にならなくなってしまいます。 こういった数値を再計算しないといけない。


確かに、そのままだと「配当」のグラフはぶっ壊れてしまいますね。 100分割だと、過去の配当が実際より100倍高いように見えてしまうのか…。 それに「PER」も「株価×株数/当期純利益」なので、同じく壊れてしまいますね…。

そう、「1株あたり」の指標って結構多くて、再計算処理はたくさん走っています。 過去のデータでも本質的に「データが確定しないこと」がある。 一方で、業績や配当の予想値も、「業績予想の修正」や「配当予想の修正」などで不定期で修正が入るので、大変ですね。
どうしても残ってしまう「手オペ」

どうしても例外的な処理が残ってしまう、ということもあって。 例えば、「IPO(新規上場)」や「上場廃止」とかですよね。

どの辺りの処理が例外的なんですか?

IPOだと、まず「有価証券届出書」(有価証券「報告書」ではない!)がEDINETに掲載されます。 ただ、「届出書」に載っている情報というのが、有報などの定期・定型な報告書とは違って、会社ごとにまちまちな部分があるんですよ…。 数値が足りなかったりするので、手打ちが必要になるケースも出てくる。

開発コストを沢山かければ、自動化できなくもないでしょうが…。 現状は数が少ないこともあって、ある程度は「手オペ(手動オペレーション)」でやってますね。
複雑なデータ処理のジョブ管理

日々走らせているジョブの管理も大変です。 これがバフェット・コードの日次batch処理の「DAG(有向非巡回グラフ)」になるんですが。


オッ…。

データ処理の依存関係が複雑で、扱っているデータ量が多いということに加えて…。 新しい有報が提出されたときや、特定のデータのパースにバグがあったときなどに、それらのデータソースの変更が影響するデータを、すべて再計算して更新する必要があるんですよ。 弊社では、Apache AirFlowというワークフロー管理ツールを使っています。

AirFlowは何が嬉しいんですか?

データ処理の依存関係をコードで記述できることですね。 あと、エラーが起こったとき、web UIからボタン1つで失敗した部分だけリトライできることや、日次処理の履歴(成功・失敗とか処理時間)が可視化されるのもメンテナンスに嬉しいです。
「人間が使いやすい財務データ」を整備する

財務データを取り扱う「苦労」について話してもらいましたが、ぶっちゃけ、ここまで大変なことを出来ているモチベーションって何なんでしょうか?

今って、残念ながら、人間が使いやすい、エンジニア/リサーチャーにフレンドリー「財務データ」が世の中にあるとは言い難いんですよね。 誰かがやらなきゃいけないのに、誰もやっていない。 そこを「自分たちが整備している」という意識はありますね。 なので、バフェット・コードのデータを参照できるWeb APIも公開しています。


自分も学部の頃経済学部だったので、株価に関する研究もやったことがあるんですが、めちゃくちゃ分かります…! 「xx年にIPOした企業の初値データの一覧」を集めるだけで死ぬほど大変だったりする…! こういう財務データって、相場的に言うとかなり値段が高いと思うんですけど、どうですか? 学生でも使えそう?

現在、月額1万円で提供しております。

めっちゃ安いやん! これなら経済学部の学生が卒論のために全然使える範疇ですね! 僕が学生のときにあってくれれば…!

非エンジニアの方にも使っていただきたいので、Google Spreadsheetから簡単に扱えるアドオンも開発しています。


至れり尽くせりやん…! 経済学部でも、学部だとRやPythonを扱える学生って少ないですもんね…。 ちょっと学生時代の苦労が思い起こされて、素で興奮してしまうわ…!

なので、経済学部の方には是非APIを使ってみていただきたいですね。 我々がデータを整備することで、研究者や学生のお役に立てれば、エンジニア冥利に尽きます(笑)。
ライター

編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから