XBRL을 읽고 실적 변화를 쉽게 시각화해보십시오.
개요
MarketHack에 게재 된 것과 같은 그래프 ↓를 간단하게 만들 수 있으면 좋겠다고 생각하고, 별도 작성한 유가 증권 보고서 XBRL 파서를 사용해 XBRL을 돌진하는 것만으로 실적 그래프를 토하는 스크립트를 써 보았습니다.
산업상품가격 견조로 테크리소시스가 호조 - Market Hack
코드
파서로 다음 자작 클래스를 사용합니다.
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는 설정이 풍부하기 때문에 여전히 기억할 곳이 많습니다.
Reference
이 문제에 관하여(XBRL을 읽고 실적 변화를 쉽게 시각화해보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sawadyrr5/items/c46f8aea2d0c890ea89e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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)
Reference
이 문제에 관하여(XBRL을 읽고 실적 변화를 쉽게 시각화해보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sawadyrr5/items/c46f8aea2d0c890ea89e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)