狠狠撸

狠狠撸Share a Scribd company logo
8
Most read
10
Most read
12
Most read
バフェットコードのデータ処理
-XBRLのデータ構造とparserの話-
@shoe116
0. 今日話すこと
1. 自己紹介的な
2. バフェットコードについて
○ バフェットコードって何?
○ バフェットコードが生まれたわけ
3. バフェットコードの日次データ処理
4. XBRLデータ構造とparserの話
○ XBRLとは
○ XBRLのデータ構造
○ データ処理におけるparserの考え方
5. まとめ
1. 自己紹介的な
なまえ:しゅう (@shoe116)
お仕事:広告系エンジニア→データ分析基盤屋さん
推し事:ももくろ→でんぱ組→BiSH→CY8ER、オサカナ
関連語:Hadoop, Kafka, Storm, Tez, Beam, Cloud Dataflow
開発言語:Java or Scala, Python, Go
バフェットコードはデータ処理を中心にwebアプリ以外を担当
2.1 バフェットコードって何?
オープンデータを用いた、効率的な企業分析を行うためのwebサイト
使い方は、https://www.buffett-code.com/ にアクセスするだけ
主な機能は以下の3つ
1. 財務?株価データの参照
2. スクリーニング
3. 企業比較
最近、ようやく有料機能出した
機能①. 企業別財務数値?株価指標の参照
● 国内の上場企業データベースを可視化して提供
○ 検索窓に企業名or銘柄コードを入力
○ 業種から銘柄を探すことも可能
○ 例:任天堂の企業詳細ページ
● 企業ごとに以下のデータを提供
○ 基本的な財務数値と株価指標
○ 株価推移とヒストリカルマルチプル
○ 大株主情報
○ 四半期毎の業績と業績予想
○ 開示資料へのリンク集
機能②. スクリーニング(条件検索)
投資基準に当てはまる企業を検索する
https://www.buffett-code.com/screening
● 多彩な検索条件を指定可能
○ P/L、B/S、C/S
○ 収益性と成長性、財務健全性
○ 財務数値
○ キャッシュフロー
○ 研究開発費や上場年数
機能③. 企業比較
複数企業の財務データ?株価指数を、指定した科目で一覧比較
https://www.buffett-code.com/comps
● 柔軟な科目指定
● 見やすい表示
○ 最大?最小を色付け
○ 代表値の自動表示
● 同一銘柄の新旧比較も可能
○ 3年前のデータの表示
2.2 バフェットコードが生まれたわけ
We created
Buffet-Code
3. バフェットコードの日次データ加工処理
1. OPENデータ(XBRL file)を取得、保存
○ EDINETから、該当日発行分の有価証券報告書(有報)を取得
○ TDNETから、該当日発行分の決算短信を取得
○ Edgarから、該当日発行分の10-K, 10-Qを取得
○ それぞれをオブジェクトストレージに保存
2. 取得したXBRL fileをparseし、RDBに格納
3. 格納されたデータと、当日の株価を元に財務数値を計算、RDBに格納
4. RDB上のスクリーニング、比較用のデータセットを更新
4.1 XBRLとは
● eXtensible Business Reporting Language
● Edinet, Tdnet, Edgar 等から結構いい感じにDLできるXML
○ Edinet http://disclosure.edinet-fsa.go.jp
○ Tdnet https://www.jpx.co.jp/equities/listing/tdnet/index.html
○ Edgar https://www.sec.gov/edgar.shtml
● XMLのタグごとに、データが入っている
$ grep ‘jppfs_cor:NetSales’ test.xbrl
<jppfs_cor:NetSales contextRef="Prior1YearDuration" unitRef="JPY" decimals="-3">41275187000</jppfs_cor:NetSales>
<jppfs_cor:NetSales contextRef="CurrentYearDuration" unitRef="JPY" decimals="-3">45089432000</jppfs_cor:NetSales>
4.2 XBRLのデータ構造
Tag
- contextRef
- unitRef
- decimals
- value
- XBRLには、簡単に言うと ↓ の配列が入っている
- 使うときはTag と contextRefでvalueを特定しdecimalsでオフセット
- ライブラリ書いたよ! https://github.com/BuffetCode/edinet_xbrl
<jppfs_cor:NetSales contextRef="Prior1YearDuration" unitRef="JPY" decimals="-3">41275187000</jppfs_cor:NetSales>
4.3 データ処理におけるparserの考え方
● 死ぬほど当たり前だけど、parse := Inv format
● 感覚的にはserializerとdeserializerを実装するときと似ている
○ 論理的なデータ構造は変えず、物理的なAlignmentだけ変換する
● 論理的なデータ構造から設計するべき
  1. 論理的な財務データを考える (FinancialsObject)
  2. def XBRL.formatter(financials: FinancialsObject) : XBRLFile を想像する
  3. def XBRL.parser(xbrl: XBRLFile): FinancialsObject が決まる
● 論理的な中間表現を介して変換のペアを書くときれいに作れる
○ XBRL => JSONならXBRL parserとJSON Formatter
○ XBRL => TableRowなら、XBRL parserとTableRow Formatter
4.4 「XBRLのparseは難しい」という人へ
● 難しいのparseじゃなくてformat
○ nestしているので、RDBのrowとかCSVにするのは難しい
○ XBRLってつまりXMLなので、難しいはずない
● Parserにparse以外のロジックを書いているコードはよく見る
○ 必要な情報だけ抽出する、内部の変数を上書きするetc
○ 戻り値をformatterに食わせて元に戻らないのはparserじゃない
● XX2YYConverterは↓って実装すると読みやすいしテストしやすい
def convert(input: XX): YY
obj = XXParser.parse(input)
YYFormatter.format(obj)
5. Appendix
Buffett-Codeの現状
1. Buffett-Codeと周辺サービス
○ メインのWebアプリケーション https://www.buffett-code.com/
○ フォロワー26.5K超のTwitter https://twitter.com/buffett_code
○ 企業分析に役立つBlog https://blog.buffett-code.com/
○ CampFire https://camp-fire.jp/projects/view/114594
2. Buffett-Codeの技術発信
○ OSSの公開 https://github.com/buffetcode
○ Python Packageの公開 https://pypi.org/project/edinet-xbrl/
○ Buffett-Codeの内部技術の紹介
■ https://qiita.com/shoe116/items/dd362ad880f2b6baa96f
■ https://qiita.com/shoe116/items/a7b688d05b699cf403a1
● Buffett-Code
○ WebApp https://www.buffett-code.com/
○ Usage https://blog.buffett-code.com/entry/18/02/01
○ Twitter https://twitter.com/buffett_code
○ Blog https://blog.buffett-code.com/
○ GitHub https://github.com/buffetcode
○ Dev Docs https://qiita.com/shoe116/items/dd362ad880f2b6baa96f
● Data Sources
○ Edinet, http://disclosure.edinet-fsa.go.jp
○ Tdnet, https://www.jpx.co.jp/equities/listing/tdnet/index.html
○ Edgar, https://www.sec.gov/edgar/searchedgar/companysearch.html
● XBRL Info
○ XBRL.org https://www.xbrl.org/
○ 有報キャッチャー https://ufocatch.com/
Ad

Recommended

Apache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
Seiya Mizuno
?
颁别辫丑のベンチマークをしました
颁别辫丑のベンチマークをしました
翱厂厂ラボ株式会社
?
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
Apache Sparkに手を出してヤケドしないための基本 ~「Apache Spark入門より」~ (デブサミ 2016 講演資料)
NTT DATA OSS Professional Services
?
搁虫入门
搁虫入门
Takaaki Suzuki
?
230517_chatGPT_v01.pdf
230517_chatGPT_v01.pdf
Satoshi Kume
?
マーブル図で怖くない搁虫闯厂
マーブル図で怖くない搁虫闯厂
bitbank, Inc. Tokyo, Japan
?
Meet Spilo, Zalando’s HIGH-AVAILABLE POSTGRESQL CLUSTER - Feike Steenbergen
Meet Spilo, Zalando’s HIGH-AVAILABLE POSTGRESQL CLUSTER - Feike Steenbergen
distributed matters
?
Rds data lake @ Robinhood
Rds data lake @ Robinhood
BalajiVaradarajan13
?
はじめてのAmazon Aurora
はじめてのAmazon Aurora
Jun Okubo
?
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
Atsushi KOMIYA
?
何となく勉强した気分になれるパーサ入门
何となく勉强した気分になれるパーサ入门
masayoshi takahashi
?
Making Cassandra more capable, faster, and more reliable (at ApacheCon@Home 2...
Making Cassandra more capable, faster, and more reliable (at ApacheCon@Home 2...
Scalar, Inc.
?
厂辫补苍苍别谤移行について本気出して考えてみた
厂辫补苍苍别谤移行について本気出して考えてみた
techgamecollege
?
Ibis: すごい pandas ?規模データ分析もらっくらく #summerDS
Ibis: すごい pandas ?規模データ分析もらっくらく #summerDS
Cloudera Japan
?
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
NTT DATA Technology & Innovation
?
笔辞蝉迟驳谤别厂蚕尝のリカバリ超入门(もしくは奥础尝、颁贬贰颁碍笔翱滨狈罢、オンラインバックアップの仕组み)
笔辞蝉迟驳谤别厂蚕尝のリカバリ超入门(もしくは奥础尝、颁贬贰颁碍笔翱滨狈罢、オンラインバックアップの仕组み)
Hironobu Suzuki
?
ヤフー発のメッセージキュー「笔耻濒蝉补谤」のご绍介
ヤフー発のメッセージキュー「笔耻濒蝉补谤」のご绍介
驰补丑辞辞!デベロッパーネットワーク
?
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
NTT DATA OSS Professional Services
?
厂惭罢笔の厂罢础搁罢罢尝厂における罢尝厂バージョンについて
厂惭罢笔の厂罢础搁罢罢尝厂における罢尝厂バージョンについて
Sparx Systems Japan
?
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
?
贬补蝉丑颈颁辞谤辫の狈辞尘补诲を使ったコンテナのスケジューリング手法
贬补蝉丑颈颁辞谤辫の狈辞尘补诲を使ったコンテナのスケジューリング手法
Masahito Zembutsu
?
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
?
顿辞肠办别谤と笔辞诲尘补苍の比较
顿辞肠办别谤と笔辞诲尘补苍の比较
Akihiro Suda
?
Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門
Tatsuya Tojima
?
作る人から作りながら运用する人になっていく
作る人から作りながら运用する人になっていく
Ryo Mitoma
?
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
NTT DATA OSS Professional Services
?
Scalar DL Technical Overview
Scalar DL Technical Overview
Scalar, Inc.
?
骋颁笔で厂迟谤别补尘なデータパイプライン作った
骋颁笔で厂迟谤别补尘なデータパイプライン作った
Shu (shoe116)
?
オープンデータを利用した公司分析ツール&辩耻辞迟;叠耻蹿蹿别迟迟-颁辞诲别&辩耻辞迟;について
オープンデータを利用した公司分析ツール&辩耻辞迟;叠耻蹿蹿别迟迟-颁辞诲别&辩耻辞迟;について
Shu (shoe116)
?

More Related Content

What's hot (20)

はじめてのAmazon Aurora
はじめてのAmazon Aurora
Jun Okubo
?
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
Atsushi KOMIYA
?
何となく勉强した気分になれるパーサ入门
何となく勉强した気分になれるパーサ入门
masayoshi takahashi
?
Making Cassandra more capable, faster, and more reliable (at ApacheCon@Home 2...
Making Cassandra more capable, faster, and more reliable (at ApacheCon@Home 2...
Scalar, Inc.
?
厂辫补苍苍别谤移行について本気出して考えてみた
厂辫补苍苍别谤移行について本気出して考えてみた
techgamecollege
?
Ibis: すごい pandas ?規模データ分析もらっくらく #summerDS
Ibis: すごい pandas ?規模データ分析もらっくらく #summerDS
Cloudera Japan
?
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
NTT DATA Technology & Innovation
?
笔辞蝉迟驳谤别厂蚕尝のリカバリ超入门(もしくは奥础尝、颁贬贰颁碍笔翱滨狈罢、オンラインバックアップの仕组み)
笔辞蝉迟驳谤别厂蚕尝のリカバリ超入门(もしくは奥础尝、颁贬贰颁碍笔翱滨狈罢、オンラインバックアップの仕组み)
Hironobu Suzuki
?
ヤフー発のメッセージキュー「笔耻濒蝉补谤」のご绍介
ヤフー発のメッセージキュー「笔耻濒蝉补谤」のご绍介
驰补丑辞辞!デベロッパーネットワーク
?
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
NTT DATA OSS Professional Services
?
厂惭罢笔の厂罢础搁罢罢尝厂における罢尝厂バージョンについて
厂惭罢笔の厂罢础搁罢罢尝厂における罢尝厂バージョンについて
Sparx Systems Japan
?
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
?
贬补蝉丑颈颁辞谤辫の狈辞尘补诲を使ったコンテナのスケジューリング手法
贬补蝉丑颈颁辞谤辫の狈辞尘补诲を使ったコンテナのスケジューリング手法
Masahito Zembutsu
?
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
?
顿辞肠办别谤と笔辞诲尘补苍の比较
顿辞肠办别谤と笔辞诲尘补苍の比较
Akihiro Suda
?
Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門
Tatsuya Tojima
?
作る人から作りながら运用する人になっていく
作る人から作りながら运用する人になっていく
Ryo Mitoma
?
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
NTT DATA OSS Professional Services
?
Scalar DL Technical Overview
Scalar DL Technical Overview
Scalar, Inc.
?
はじめてのAmazon Aurora
はじめてのAmazon Aurora
Jun Okubo
?
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
Atsushi KOMIYA
?
何となく勉强した気分になれるパーサ入门
何となく勉强した気分になれるパーサ入门
masayoshi takahashi
?
Making Cassandra more capable, faster, and more reliable (at ApacheCon@Home 2...
Making Cassandra more capable, faster, and more reliable (at ApacheCon@Home 2...
Scalar, Inc.
?
厂辫补苍苍别谤移行について本気出して考えてみた
厂辫补苍苍别谤移行について本気出して考えてみた
techgamecollege
?
Ibis: すごい pandas ?規模データ分析もらっくらく #summerDS
Ibis: すごい pandas ?規模データ分析もらっくらく #summerDS
Cloudera Japan
?
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
NTT DATA Technology & Innovation
?
笔辞蝉迟驳谤别厂蚕尝のリカバリ超入门(もしくは奥础尝、颁贬贰颁碍笔翱滨狈罢、オンラインバックアップの仕组み)
笔辞蝉迟驳谤别厂蚕尝のリカバリ超入门(もしくは奥础尝、颁贬贰颁碍笔翱滨狈罢、オンラインバックアップの仕组み)
Hironobu Suzuki
?
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
NTT DATA OSS Professional Services
?
厂惭罢笔の厂罢础搁罢罢尝厂における罢尝厂バージョンについて
厂惭罢笔の厂罢础搁罢罢尝厂における罢尝厂バージョンについて
Sparx Systems Japan
?
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
?
贬补蝉丑颈颁辞谤辫の狈辞尘补诲を使ったコンテナのスケジューリング手法
贬补蝉丑颈颁辞谤辫の狈辞尘补诲を使ったコンテナのスケジューリング手法
Masahito Zembutsu
?
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
?
顿辞肠办别谤と笔辞诲尘补苍の比较
顿辞肠办别谤と笔辞诲尘补苍の比较
Akihiro Suda
?
Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門
Tatsuya Tojima
?
作る人から作りながら运用する人になっていく
作る人から作りながら运用する人になっていく
Ryo Mitoma
?
Scalar DL Technical Overview
Scalar DL Technical Overview
Scalar, Inc.
?

More from Shu (shoe116) (9)

骋颁笔で厂迟谤别补尘なデータパイプライン作った
骋颁笔で厂迟谤别补尘なデータパイプライン作った
Shu (shoe116)
?
オープンデータを利用した公司分析ツール&辩耻辞迟;叠耻蹿蹿别迟迟-颁辞诲别&辩耻辞迟;について
オープンデータを利用した公司分析ツール&辩耻辞迟;叠耻蹿蹿别迟迟-颁辞诲别&辩耻辞迟;について
Shu (shoe116)
?
データ分析基盘の忧鬱と退屈
データ分析基盘の忧鬱と退屈
Shu (shoe116)
?
analists_rating_by_lda_hackday_201702
analists_rating_by_lda_hackday_201702
Shu (shoe116)
?
データサイエンティストの忧鬱と退屈
データサイエンティストの忧鬱と退屈
Shu (shoe116)
?
idoling_approval_desire
idoling_approval_desire
Shu (shoe116)
?
tokyo_webmining_no51
tokyo_webmining_no51
Shu (shoe116)
?
Hadoop Ops & Fabric
Hadoop Ops & Fabric
Shu (shoe116)
?
エンジニアが日々何を考えているのか、ということ
エンジニアが日々何を考えているのか、ということ
Shu (shoe116)
?
骋颁笔で厂迟谤别补尘なデータパイプライン作った
骋颁笔で厂迟谤别补尘なデータパイプライン作った
Shu (shoe116)
?
オープンデータを利用した公司分析ツール&辩耻辞迟;叠耻蹿蹿别迟迟-颁辞诲别&辩耻辞迟;について
オープンデータを利用した公司分析ツール&辩耻辞迟;叠耻蹿蹿别迟迟-颁辞诲别&辩耻辞迟;について
Shu (shoe116)
?
データ分析基盘の忧鬱と退屈
データ分析基盘の忧鬱と退屈
Shu (shoe116)
?
analists_rating_by_lda_hackday_201702
analists_rating_by_lda_hackday_201702
Shu (shoe116)
?
データサイエンティストの忧鬱と退屈
データサイエンティストの忧鬱と退屈
Shu (shoe116)
?
idoling_approval_desire
idoling_approval_desire
Shu (shoe116)
?
エンジニアが日々何を考えているのか、ということ
エンジニアが日々何を考えているのか、ということ
Shu (shoe116)
?
Ad

DataProcessingInBuffettCode-20190213