企業分析サイト「バフェット・コード」開発者が語る、データ整形の「苦労」と「価値」
ogp
企業分析サイト「バフェット・コード」開発者が語る、データ整形の「苦労」と「価値」
岡部 匡志
2020.05.04

企業分析に必要になるデータを、誰でも簡単に参照できるサイト「バフェット・コード

しかし、そのキレイなUIの背景には、開発者の様々な「苦労」が存在するとか…?

今回は、バフェット・コードの開発者に、データ整形の苦労や、「バフェット・コード」が達成したい「データ整形の価値」について伺いました!

buffet-code

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

岡部 匡志

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

buffet-code
バフェット・コードでは、企業の財務データや株価データを経年で参照できる。
バフェット・コード

ありがとうございます。

岡部 匡志

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

バフェット・コード

大変なところね(笑)。 たくさんありますよ(笑)。

「XBRL」を「RDB」の世界に落とし込む

バフェット・コード

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

岡部 匡志

えっと…、EDINETですよね?

edinet
金融庁が運営するサイト「EDINET」。
バフェット・コード

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

岡部 匡志

というと…?

バフェット・コード

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

xbrl
XBRLファイルの例。
岡部 匡志

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

バフェット・コード

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

「データが確定しない」ことの難しさ

バフェット・コード

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

岡部 匡志

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

バフェット・コード

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

buffet
岡部 匡志

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

バフェット・コード

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

どうしても残ってしまう「手オペ」

バフェット・コード

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

岡部 匡志

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

バフェット・コード

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

バフェット・コード

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

複雑なデータ処理のジョブ管理

バフェット・コード

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

workflow
バフェットコードで使っているジョブのワークフロー図(一部モザイク処理)。
岡部 匡志

オッ…。

バフェット・コード

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

岡部 匡志

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

バフェット・コード

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

「人間が使いやすい財務データ」を整備する

岡部 匡志

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

バフェット・コード

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

buffet
バフェットコードのAPIドキュメント。Swaggerで作成されている。
岡部 匡志

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

バフェット・コード

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

岡部 匡志

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

バフェット・コード

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

buffet
岡部 匡志

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

バフェット・コード

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

ライター

岡部 匡志
東京大学経済学部卒業後、東京大学大学院情報理工学部で機械学習の研究に携わり、中退。「シゴトーク」シリーズや「アンドエンジニア」を手掛ける株式会社Tenxiaを創業。サウナが好き。ベンチャーなのでサーバもフロントもネイティブアプリも書きます。最近はFlutterに熱心でLTを喋ったりQiitaを書いたりしている。
岡部 匡志の記事一覧を見る
気になる人のTwitterをフォローしよう!
アンドエンジニア公式LINEでは
新着記事やエンジニアに役立つ情報をお届け!
日々のキャッチアップをお手伝いします!
この記事をシェア
マイナビITエージェント

編集部オススメコンテンツ

はじめて転職される方へ
IT・Webエンジニアの「よくある転職活動のお悩み」や「転職活動の流れ」とは?
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供
エンジニア求人

編集部おすすめコンテンツ

はじめて転職される方へ
IT・Webエンジニアの「よくある転職活動のお悩み」や「転職活動の流れ」とは?
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

Powered by マイナビ AGENT