logologo
企業分析サイト「バフェット・コード」開発者が語る、データ整形の「苦労」と「価値」
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を書いたりしている。
岡部 匡志の記事一覧を見る
気になる人のXをフォローしよう!
公式LINE
公式YouTube
この記事をシェア
マイナビITエージェント

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

thumb_gptowten_01
ChatGPTの面白い使い方15選!ビジネスや遊び相手になる事例
アンドエンジニア編集部
2024.02.19

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

お問い合わせ・情報提供

カテゴリー

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

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

logologo
Powered by マイナビ AGENT