[PYTHON] Lesen Sie XBRL und visualisieren Sie auf einfache Weise Änderungen der Geschäftsleistung

Überblick

Ich wünschte, ich könnte einfach ein Diagramm ↓ wie das auf MarketHack veröffentlichte erstellen. Deshalb habe ich ein Skript geschrieben, das ein Leistungsdiagramm ausspuckt, indem ich XBRL mithilfe des separat erstellten XBRL-Parsers für Wertpapierberichte einfüge.

Die Preise für Industriegüter sind stark und Tech Resources geht es gut - Market Hack MarketHack テック・リソーシズの株価

Code

Verwenden Sie die folgende selbst erstellte Klasse als Parser.

Ich habe eine Klasse zum Herunterladen und Analysieren von XBRL vom UFO-Catcher - Qiita erstellt

Nehmen wir als Beispiel den Wertpapierbericht für das Geschäftsjahr 2003/17 von 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)

Ergebnis

Es wird so ausgegeben. Es ist möglicherweise besser, Tooltip usw. mit Hover hinzuzufügen. Da Bokeh viele Einstellungen hat, gibt es noch viele Dinge zu beachten.

bokeh_plot.png

Recommended Posts

Lesen Sie XBRL und visualisieren Sie auf einfache Weise Änderungen der Geschäftsleistung
Zuweisungen und Änderungen in Python-Objekten
Reihenfolge in PyYAML beibehalten und lesen
# Zeile ignorieren und mit Pandas lesen
Erstellen und lesen Sie Messagepacks in Python
Lesen und schreiben Sie JSON-Dateien mit Python
Zeichnen Sie Daten einfach in Shell und Python