I wondered if it would be possible to collect fundamental investment data with Python, and when I looked it up, I found some articles that downloaded XBRL from the UFO catcher and did various things, but I thought that all of them would be scratchy and troublesome. I made a module that can get and analyze XBRL quickly. I just made it, so I'd be happy if you could contact me if there is something wrong with it.
Install from the Git repository.
python
pip install git+https://github.com/sawadyrr5/UfoDataReader
Use the DataReader class to get the XBRL. Specify symbol, start, end to display all matching documents. Those with "Securities Report" or "Quarterly Report" in the title are is_yuho = True. If fetch_xbrl = True, XBRL data will be downloaded. (Note that there are about several MB).
python
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] Toyota Motor Corporation Securities Report-113th Term(April 1, 2016-March 31, 2017)',
'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] Toyota Motor Corporation Internal Control Report-113th Term(April 1, 2016-March 31, 2017)',
'updated': datetime.datetime(2017, 6, 23, 0, 0),
'url': 'http://resource.ufocatch.com/data/edinet/ED2017062301247'}]
XBRL parsing uses the UfoXBRLParser class. Passing an XBRL file to the parse () method will return a parsed XBRL document. You can get the basic information of the document by passing the XBRL document to parseDEI ().
python
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__
python
Out[2]:
{'accounting_standards': 'US GAAP',
'company_name': 'Toyota Motor Corporation',
'current_fy_end': '2015-03-31',
'current_fy_start': '2014-04-01',
'edinet_code': 'E02144',
'trading_symbol': '72030'}
You can get basic financial indicators etc. by passing the XBRL document to parseGAAP (). There are three types of accounting standards for preparing securities reports: US GAAP, IFRS, and Japan GAAP. The element names for parsing each are slightly different, but for the time being, if you go into parseGAAP (), I try to distinguish between US GAAP and Japan GAAP and parse them. IFRS is not supported. (Refer to the following file published by the Financial Services Agency for details such as element names)
(e) Taxonomy element list (EXCEL: 6,281KB)
In the case of Toyota Motor, it is created based on US GAAP.
python
In [3]:
gaap = ufoparser.parseGAAP(xbrl)
gaap.__dict__
python
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'}
This is the case for companies created with the domestic standard Japan GAAP.
python
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__
python
Out[4]:
{'accounting_standards': 'Japan GAAP',
'company_name': 'Amiyaki Tei Co., Ltd.',
'current_fy_end': '2017-03-31',
'current_fy_start': '2016-04-01',
'edinet_code': 'E03398',
'trading_symbol': '27530'}
python
In [5]:
gaap = ufoparser.parseGAAP(xbrl)
gaap.__dict__
python
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'}
Financial analysis for investing step1 "Getting financial information XBRL" Financial analysis for investment step2 "Import XBRL file into DB" Reported XBRL item memo
Recommended Posts