XBRL을 읽고 실적 변화를 쉽게 시각화해보십시오.

개요



MarketHack에 게재 된 것과 같은 그래프 ↓를 간단하게 만들 수 있으면 좋겠다고 생각하고, 별도 작성한 유가 증권 보고서 XBRL 파서를 사용해 XBRL을 돌진하는 것만으로 실적 그래프를 토하는 스크립트를 써 보았습니다.

산업상품가격 견조로 테크리소시스가 호조 - Market Hack
MarketHack テック・リソーシズの株価

코드



파서로 다음 자작 클래스를 사용합니다.

UFO 포수에서 XBRL을 다운로드하고 구문 분석하는 클래스를 만들었습니다 - Qiita

예를 들어 4686 : 저스트 시스템의 2017 년 3 월기 유가 증권 보고서를 사용해 보겠습니다.
import numpy as np
import pandas as pd
from UfoDataReader.util.parser import UfoXBRLParser
from bokeh.io import show
from bokeh.models import ColumnDataSource, FactorRange
from bokeh.palettes import Spectral5
from bokeh.plotting import figure
from bokeh.transform import factor_cmap

ufoparser = UfoXBRLParser()

# target XBRL file
file = 'jpcrp030000-asr-001_E04996-000_2017-03-31_01_2017-06-23.xbrl'

xbrl = ufoparser.parse(file)
dei = ufoparser.parseDEI(xbrl)

# getting each years GAAP objects
contexts = ['Prior4', 'Prior3', 'Prior2', 'Prior1', 'Current']
gaaps = [ufoparser.parseGAAP(xbrl, context=context) for context in contexts]

# getting factors
share = np.array([float(gaap.shares_outstanding) for gaap in gaaps])
sale = np.array([float(gaap.netsales) for gaap in gaaps])
cf = np.array([float(gaap.cf_from_operating) +
               float(gaap.cf_from_financing) +
               float(gaap.cf_from_financing) for gaap in gaaps])

df = pd.DataFrame(
    dict(
        year=contexts,
        dps=np.array([float(gaap.dps) for gaap in gaaps]),
        eps=np.array([float(gaap.basic_eps) for gaap in gaaps]),
        cfps=cf / share,
        sps=sale / share
    )
)


# bokeh setting
years = contexts
factors = ['dps', 'eps', 'cfps', 'sps']

x = [(year, factor) for year in years for factor in factors]
amounts = sum(zip(df['dps'], df['eps'], df['cfps'], df['sps']), ())

source = ColumnDataSource(data=dict(x=x, counts=amounts))

p = figure(x_range=FactorRange(*x), plot_height=300, title=dei.company_name)

p.vbar(x='x', top='counts', width=1.0, source=source,
       fill_color=factor_cmap('x', palette=Spectral5, factors=factors, start=1, end=2))

p.y_range.start = 0
p.x_range.range_padding = 0.1
p.xaxis.major_label_orientation = 1
p.xgrid.grid_line_color = None

# open browser
show(p)

결과



이런 식으로 출력됩니다.
Hover를 사용하여 tooltip 등을 붙이면 더 좋을 수 있습니다.
bokeh는 설정이 풍부하기 때문에 여전히 기억할 곳이 많습니다.

좋은 웹페이지 즐겨찾기