Skip to content

Instantly share code, notes, and snippets.

@sawadyrr5
Created March 26, 2020 14:00
Show Gist options
  • Save sawadyrr5/8933663e9cd1232468ac37b8d02bed14 to your computer and use it in GitHub Desktop.
Save sawadyrr5/8933663e9cd1232468ac37b8d02bed14 to your computer and use it in GitHub Desktop.
UFOキャッチャーからXBRLをダウンロード&パースするクラスを作った

この記事について

Pythonでファンダメンタル投資のデータを集められないものかと思い, 調べてみたらUFOキャッチャーからXBRLをダウンロードしていろいろやっている記事がいくつか見つかりましたが, どれもスクラッチで面倒そうだなぁと思ったのでXBRLをサクッと取得&解析できるモジュールを作ってみました. 作ってみたばかりなのでおかしいところがあればご連絡いただけるとうれしいです.

1. インストール

Gitリポジトリからインストールします.

sawadyrr5/UfoDataReader

pip install git+https://github.com/sawadyrr5/UfoDataReader

2. XBRLの取得

XBRLの取得はDataReaderクラスを使います. symbol, start, endを指定すると合致する文書をすべて表示します. titleに「有価証券報告書」または「四半期報告書」と付くものはis_yuho=Trueとなっています. fetch_xbrl=Trueとすると, XBRLデータをダウンロードします.(概ね数MBあるので注意)

In [1]:
# 1. getting xbrl
from UfoDataReader.io.data import DataReader
from datetime import datetime

start = datetime(2017, 6, 23)
end = datetime(2017, 6, 23)
ufos = DataReader('7203', 'ufo', start, end, fetch_xbrl=False)  # if fetch_xbrl=True, download xbrl files.
ufos
Out[1]:
[{'docid': 'S100AKEX',
  'id': 'ED2017062301177',
  'is_yuho': True,
  'title': '【E02144】トヨタ自動車株式会社 有価証券報告書-第113期(平成28年4月1日-平成29年3月31日)',
  'updated': datetime.datetime(2017, 6, 23, 0, 0),
  'url': 'http://resource.ufocatch.com/data/edinet/ED2017062301177'},
 {'docid': 'S100AI3I',
  'id': 'ED2017062301247',
  'is_yuho': False,
  'title': '【E02144】トヨタ自動車株式会社 内部統制報告書-第113期(平成28年4月1日-平成29年3月31日)',
  'updated': datetime.datetime(2017, 6, 23, 0, 0),
  'url': 'http://resource.ufocatch.com/data/edinet/ED2017062301247'}]

3. XBRLのパース

XBRLのパースはUfoXBRLParserクラスを使います. parse()メソッドにXBRLファイルを渡すと, パース済みのXBRLドキュメントが返ってきます. XBRLドキュメントをparseDEI()に渡すと, ドキュメントの基本情報を取得することができます.

In [2]:
# 2.1 parse xbrl (US GAAP)
from UfoDataReader.util.parser import UfoXBRLParser
ufoparser = UfoXBRLParser()

toyota = 'jpcrp030000-asr-001_E02144-000_2015-03-31_01_2015-06-24.xbrl'     # US GAAP

xbrl = ufoparser.parse(toyota)
dei = ufoparser.parseDEI(xbrl)
dei.__dict__
Out[2]:
{'accounting_standards': 'US GAAP',
 'company_name': 'トヨタ自動車株式会社',
 'current_fy_end': '2015-03-31',
 'current_fy_start': '2014-04-01',
 'edinet_code': 'E02144',
 'trading_symbol': '72030'}

XBRLドキュメントをparseGAAP()に渡すと, 基本的な財務指標などを取得することができます. なお, 有価証券報告書の作成にあたっては会計基準はUS GAAP, IFRS, Japan GAAPの3種類があり, それぞれパースするための要素名などが微妙に違いますが, とりあえずparseGAAP()に突っ込んだら内部でUS GAAPとJapan GAAPを判別してパースするようにしています. IFRSには未対応です. (要素名など詳しくは金融庁公開の以下ファイル参照)

(e)タクソノミ要素リスト(EXCEL:6,281KB)

トヨタ自動車の場合はUS GAAP基準で作成されています.

In [3]:
gaap = ufoparser.parseGAAP(xbrl)
gaap.__dict__
Out[3]:
{'assets': '15128623000000',
 'basic_eps': '688.02',
 'cashflow_from_financing': '306045000000',
 'cashflow_from_investing': '-3813490000000',
 'cashflow_from_operation': '3685753000000',
 'comprehensive_income': '3294275000000',
 'current_assets': '6000524000000',
 'current_liabilities': '3571917000000',
 'diluted_eps': '687.66',
 'liabilities': '4944351000000',
 'net_assets': '10184271000000',
 'net_income_loss': '2173338000000',
 'non_current_assets': '9128099000000',
 'non_current_liabilities': '1372433000000',
 'operating_income_loss': 0,
 'per': '12.2',
 'profit_loss_before_tax': '2892828000000',
 'revenues': '27234521000000',
 'shares_outstanding': '3417997000'}

国内基準のJapan GAAPで作成されている会社の場合はこのようになります.

In [4]:
# 2.2 parse xbrl (Japan GAAP)
amiyaki = 'jpcrp030000-asr-001_E03398-000_2017-03-31_01_2017-06-23.xbrl'    # Japan GAAP

xbrl = ufoparser.parse(amiyaki)
dei = ufoparser.parseDEI(xbrl)
dei.__dict__
Out[4]:
{'accounting_standards': 'Japan GAAP',
 'company_name': '株式会社あみやき亭',
 'current_fy_end': '2017-03-31',
 'current_fy_start': '2016-04-01',
 'edinet_code': 'E03398',
 'trading_symbol': '27530'}
In [5]:
gaap = ufoparser.parseGAAP(xbrl)
gaap.__dict__
Out[5]:
{'assets': '23304000000',
 'basic_eps': '315.96',
 'bps': '2769.14',
 'cashflow_from_financing': '-744000000',
 'cashflow_from_investing': '-1339000000',
 'cashflow_from_operation': '3100000000',
 'comprehensive_income': '2163000000',
 'current_assets': '11004000000',
 'current_liabilities': '3538000000',
 'diluted_eps': '',
 'equity_to_asset_ratio': '0.814',
 'liabilities': '4339000000',
 'net_assets': '18965000000',
 'netsales': '30564000000',
 'non_current_assets': '12299000000',
 'non_current_liabilities': '800000000',
 'ordinary_income_loss': '3053000000',
 'per': '13.1',
 'profit_loss': '2163000000',
 'roe': '0.119',
 'shares_outstanding': '6848800',
 'total_assets': '23304000000'}

参考

投資するための財務分析step1「財務情報XBRLを取得する」 投資するための財務分析step2「XBRLファイルをDBに取り込む」 有報のXBRLの項目メモ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment