はじめに
これまでの記事ではリンクベースファイルから有価証券報告書の構造を解析し、その後、各要素の値を取得していました。今回の記事では有価証券報告書の構造情報の解析することなく、要素の値を取得する方法を述べます。
というのも、会計基準などの一部の情報はリンクベースファイル上の構造データには表れないためです。こういったデータを取得するには要素の名称とコンテキストから値を取得する必要があります。
また、「沿革」や「事業の内容」といった値が細かにタグ付けされない文書データについてもこの方法を用いたほうが良いです。
データの要素名とコンテキストを決定する
要素名の調査方法
XBRLから値を取得するには要素名とコンテキストを決定しなければなりません。まず、要素名を知るためにタクソノミ要素リストのエクセルファイルをダウンロードし、要素名を調べる必要があります。
例えば2025年のタクソノミ要素リストであれば、このページの以下の図にあるリンクからエクセルファイルをダウンロードします。
EDINETから画面をキャプチャした
エクセルを開くとEDINETのXBRL中に存在する要素名やその属性が書かれています。適当な検索ワード(ここでは「会計基準」とした)で検索すると以下のように情報が見つかります(不要な情報は非表示にしてあります)。
2025年 EDINETのタクソノミ一覧エクセルから要素を抜粋して引用
上記から会計基準を表す要素名は「jpdei_cor_AccountingStandardsDEI」であるとわかりました。
コンテキストの調査方法
コンテキストはその要素がDEI*1かそれ以外かで決定のルールが異なります。DEIの場合はコンテキストは「FilingDateInstant」と決まっています。以下はDEIについての説明です。
EDINET 報告書インスタンス 作成ガイドライン p71~72より引用
DEI以外の要素のコンテキストは以下のルールで決定します。
EDINET 報告書インスタンス 作成ガイドライン p32~33より引用
例えば、「沿革」や「事業の内容」は経理の状況以外の包括タグに該当し、タクソノミ要素リストから調べたperiodTypeはinstantであるため、コンテキストはFilingDateInstantになります。コンテキストの命名規則は「EDINET 報告書インスタンス 作成ガイドラインのp31以降」に記載があるので一読することをお勧めします。
このようにXBRL中の要素名とコンテキストはEDINETのタクソノミ要素一覧と各種ドキュメントから決定可能です。
また、インラインXBRL上で表示されている要素であればhtmlタグを確認することで要素名とコンテキストを調べることが出来ます。例えば「沿革」のhtmlタグは
<ix:nonnumeric contextref="FilingDateInstant" name="jpcrp_cor:CompanyHistoryTextBlock" escape="true"> (略) </ix:nonnumeric>
となるため、要素名がjpcrp_cor_CompanyHistoryTextBlock、コンテキストがFilingDateInstantだとわかります。
今回値の取得に使用する要素名とコンテキスト
以下に今回の記事で値を取得するために用いる要素名とコンテキストをまとめました。
取得対象 | 要素名 | コンテキスト |
---|---|---|
会計基準 | jpdei_cor_AccountingStandardsDEI | FilingDateInstant |
連結の有無 | jpdei_cor_WhetherConsolidatedFinancialStatementsArePreparedDEI | FilingDateInstant |
沿革 | jpcrp_cor_CompanyHistoryTextBlock | FilingDateInstant |
事業の内容 | jpcrp_cor_DescriptionOfBusinessTextBlock | FilingDateInstant |
要素の値を取得する
値を取得するのは簡単です。XBRLインスタンスファイルやインラインXBRLを読み込み、読み込み結果を要素名とコンテキストで検索すればよいだけです。やり方については以下の記事を読めばわかりますので、是非ご覧になってください。
- PythonでEDINETのXBRLを分析する その8「XBRLインスタンスファイルから値を取得する」
- pythonで決算短信のXBRLを分析する その4「決算短信XBRLからのデータ取得 インラインXBRLの読み込み方」
値を取得するソース*2
#XBRLのパスを生成 xbrl_dir_path = 'C:\\Users\QUWE\\Desktop\\S1001J1V\XBRL\\PublicDoc' xbrl_path_data = JPXXbrlPath(xbrl_dir_path) ##インラインXBRLを読み込む xbrlInstanceFileData = XBRLInstanceFileAnalysis(xbrl_path_data) #インラインXBRLの読み込み結果から値を検索する print(xbrlInstanceFileData.get_data_from_instance_file('jpdei_cor_AccountingStandardsDEI', 'FilingDateInstant')) print(xbrlInstanceFileData.get_data_from_instance_file('jpdei_cor_WhetherConsolidatedFinancialStatementsArePreparedDEI', 'FilingDateInstant')) print(xbrlInstanceFileData.get_data_from_instance_file('jpcrp_cor_CompanyHistoryTextBlock', 'FilingDateInstant')) print(xbrlInstanceFileData.get_data_from_instance_file('jpcrp_cor_DescriptionOfBusinessTextBlock', 'FilingDateInstant'))
実行結果
Japan GAAP true (沿革のhtmlタグが表示されるが長いので略) (事業の内容のhtmlタグが表示されるが長いので略)
沿革や事業の内容はhtmlテキストであるため適当なブラウザで読み込むことが可能です。また、htmlテキストであるため外部ライブラリを用いて特定のデータを取得することも可能です。
pandasでhtmlテキストから表データをデータフレームで取得するソース
import pandas as pd import io #pandasでhtmlテキスト中のtableデータを取得する parseTargetStr = xbrlInstanceFileData.get_data_from_instance_file('jpcrp_cor_CompanyHistoryTextBlock', 'FilingDateInstant') dfs = pd.read_html(io.StringIO(parseTargetStr)) print(dfs[0])
実行結果
0 1 0 年月 事項 1 平成16年2月 「IT」と「人」をキーワードに店舗店頭に特化したマーケティング支援を目的とした、株式会社メデ... 2 平成16年10月 ASP事業を開始。 3 平成16年12月 本社を東京都渋谷区円山町に移転。 4 平成17年3月 営業支援事業、流通支援事業を開始。 5 平成17年4月 フィールドマーケティングシステム「Market Watcher」のリニューアル。 6 平成18年9月 本社を東京都渋谷区道玄坂に移転。 7 平成19年7月 株式会社ファミリーマートとファミリーマート・フランチャイズ契約を締結。ストア事業を開始。 8 平成19年12月 住友商事株式会社、株式会社博報堂DYホールディングスの資本参画。 9 平成20年8月 プライバシーマーク(JISQ15001:2006準拠)取得。 10 平成21年12月 本社を東京都渋谷区渋谷に移転。 11 平成23年4月 フィールドマーケティングシステム「Market Watcher」中国語版の販売開始。 12 平成23年5月 フィールドマーケティングシステム「Market Watcher」スマートフォン対応の開始。 13 平成24年9月 東京証券取引所マザーズ市場に株式を上場。 14 平成24年10月 株式会社メディアフラッグ沖縄(連結子会社)を設立。 15 NaN 梅地亜福(上海)管理咨詢有限公司(連結子会社)を設立。 16 平成25年2月 株式会社ラウンドパワー(連結子会社)を設立。 17 平成25年8月 キャビック株式会社(連結子会社)の第三者割当増資を引受。 18 平成25年10月 K9株式会社(連結子会社)を設立。 19 平成25年11月 O&H株式会社(連結子会社)を設立。 20 平成25年11月 株式会社十勝(連結子会社)の株式取得により、同社及び同社の子会社である株式会社たちばな(連結...
沿革の表をデータフレームで取得できました。このように手を加えればhtmlテキストから特定のデータだけを取得することが可能です。
おわりに
今回は有価証券報告書のXBRLの構造を取得するのではなく、要素名とコンテキストから直接値を取得しました。リンクベースファイルの解析が不要であり、とても簡単です。
「沿革」や「事業の内容」のように詳細なタグ付けがされていないデータ(EDINETでは包括タグと呼んでいる)はhtmlテキストデータなのでpandasやbeautifulsoupといった外部ライブラリや正規表現によってほしいデータを取得することが可能です。ただし、包括タグの書き方は提出会社によってかなり幅があると予想されるため、その幅を吸収するのは相当難しいでしょう。今後、チャレンジすることがあれば記事にしたいとは思っています。
今回はここまでです。