J'aimerais pouvoir facilement créer un graphique ↓ comme celui publié sur MarketHack, j'ai donc écrit un script qui crache un graphique de performance simplement en insérant XBRL à l'aide de l'analyseur XBRL de rapport sur les titres créé séparément.
[Les prix des produits de base industriels sont élevés et les ressources techniques se portent bien --Markethack.net/archives/52053665.html)
Utilisez la classe personnalisée suivante comme analyseur.
J'ai créé une classe pour télécharger et analyser XBRL depuis UFO catcher --Qiita
À titre d'exemple, utilisons le rapport sur les titres FY03 / 17 de Just System.
python
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)
Ce sera sorti comme ça. Il peut être préférable d'ajouter une info-bulle, etc. en utilisant le survol. Étant donné que le bokeh a beaucoup de paramètres, il y a encore beaucoup de choses à retenir.
Recommended Posts