米国証券取引委員会(SEC)のエドガー(EDGAR)からXBRLを取得する方法です。
海外企業といえば、たいてい米国企業になると思います。
EDGARの情報を利用すると、海外上場企業の一覧を作ったり、海外上場企業の財務分析を行うことができます。そのためのファイルの入手方法や読み込み方法の解説です。
EDGARの使い方の場所
以下の場所に開示情報の取得方法が載っています。
データが欲しい時に、どのようなURLにアクセスすれば良いのか?
それが Accessing EDGAR Data のページに書かれています(とても重要なページです)。
「米国証券取引委員会 トップページ」→「FILINGS」→「Filings & Forms」→「Accessing EDGAR Data」
Accessing EDGAR Data
https://www.sec.gov/os/accessing-edgar-data
このページの下の方に「Documentation and Helpful Resources」という見出しがあるのですが、ここも重要です。参考資料へのリンク集です。10-K、10-Qといった、書類の種類を説明しているPDFもあります。「Descriptions of EDGAR Form Types」という名前です。
セントラル・インデックス・キー(CIK)の全リストもあります。
「Current list of all CIKs matched with entity name」という名前のリンクから、テキストファイルで取得できます。ただ、企業名とCIKだけのリストなので、あまり用途はないかもしれません。
他にも財務諸表のことや企業の調べ方とか、投資家がエドガーシステムをどのように使ったらいいのか?という解説がいろいろ載っているようです。
取得方法【EDGAR】
開示情報リストを取得する
Accessing EDGAR Data の説明によると、以下のディレクトリから開示情報リストを取得できるようです。リストの整理の仕方で、デイリーインデックスとフルインデックスの2タイプがあります。
https://www.sec.gov/Archives/edgar/daily-index/
https://www.sec.gov/Archives/edgar/full-index/
これらのディレクトリは、以下のURLでも参照できます。Using the EDGAR Index Files という節で、この機能について説明されています。
https://www.sec.gov/Archives/edgar/daily-index/index.html
https://www.sec.gov/Archives/edgar/daily-index/index.xml
https://www.sec.gov/Archives/edgar/daily-index/index.json
https://www.sec.gov/Archives/edgar/full-index/index.html
https://www.sec.gov/Archives/edgar/full-index/index.xml
https://www.sec.gov/Archives/edgar/full-index/index.json
説明によると、各ディレクトリの内容は3つの形式 (html, xml, json) で取得できるようにしているとのことです。クロールしやすくするためとのことです。
それで開示情報リストの取得ですが、フルインデックスのディレクトリから取得した方が少ないファイル数で済むので、こちらを使います。デイリーインデックスの方ですが、こちらは最新の開示情報を追加で取得していくときに良さそうです。
フルインデックスのURLを開くと、西暦4桁のフォルダが並んでいて、それらの中に四半期で区切ったフォルダが4つ入っています。それらの中に「idx」という拡張子のインデックスファイルが入っています。これが開示情報リストになります。(フォルダはディレクトリと同じ意味です)
ディレクトリを辿って全てのインデックスファイルを取得し、連結すれば、開示情報リストが完成します。それぞれのディレクトリで「index.xml」か「index.json」にアクセスしていけば、簡単に辿ることができます。
このインデックスファイル(idx)ですが、用途に応じて4種類あるようです。
xbrl.idx company.idx form.idx master.idx
とりあえず、XBRLを含む開示だけあれば良いので、xbrl.idxを選びます。zip圧縮されたものもありますので、そちらを取得するのも良いかもしれません。
zipを展開せずに直接読み込む方法【Python, XBRL】
西暦と四半期のディレクトリをすべて辿って取得します。
連結する
idxの中身はテキストです。CSVではありませんが、少し工夫すればPythonのcsvモジュールで読み込めます。Pythonのリストに変換してみましょう。
xbrl.idxのフォーマットですが、中身は以下のようになっています。
Description: XBRL Index of EDGAR Dissemination Feed
Last Data Received: April 12, 2018
Comments: webmaster@sec.gov
Anonymous FTP: ftp://ftp.sec.gov/edgar/CIK|Company Name|Form Type|Date Filed|Filename
——————————————————————————–
1001463|Acacia Diversified Holdings, Inc.|10-K|2018-04-02|edgar/data/1001463/0001185185-18-000573.txt
これを見るに、最初のほうは読み飛ばして良さそうです。そして、ハイフン行の前後でラベル行とデータ行に分かれています。ラベルもデータも、区切り文字は縦棒”|”です。
読み込み関数の例です。こうして読み込んだデータを、すべてのidxファイルについて連結すれば、開示情報リストの完成です。
import os
import re
import csv
def get_xbrl_idx(file):
"""xbrl.idxの内容を取得"""
labels = []
datas = []
# 区切り文字
delimiter = '|'
# ハイフン行を表す正規表現
re_line_match = re.compile('^-+$').match
with open(file, 'r', encoding='utf-8', newline='') as f:
# ヘッダ行
for c in csv.reader(f, delimiter=delimiter):
if len(c) == 5:
# ラベル行を取得
# CIK|Company Name|Form Type|Date Filed|Filename
labels.append(c)
if re_line_match(c[0]):
# ハイフン行に達したのでブレーク
break
# データ行
for c in csv.reader(f, delimiter=delimiter):
datas.append(c)
return (labels, datas)
XBRLを取得する
idxには、アスキーテキストバージョンというテキストファイルへのリンクが載っています。以下のようなURLです。
edgar/data/1001463/0001185185-18-000573.txt
実際には「https://www.sec.gov/Archives/」に連結して、以下のURLにします。
https://www.sec.gov/Archives/edgar/data/1001463/0001185185-18-000573.txt
このテキストファイルは、その開示のすべての提出物を1つにまとめたもの、とのことです。ですが、普通のファイルに分かれたものも用意されていますので、そちらを使います。
そのディレクトリの場所ですが、Directory Browsing という節に説明がありました。
ファイル名の「0001185185-18-000573」の部分をアクセッションナンバー(Accession Number)というのですが、これからダッシュ(つまりハイフンのこと)を除いた「000118518518000573」というディレクトリに、ファイル群を置いているとのことです。
具体的には、次の要領でアクセスできました。
「0001185185-18-000573.txt」からハイフン "-"
と拡張子 ".txt"
を削除します。
つまり、以下のURLにアクセスします。
https://www.sec.gov/Archives/edgar/data/1001463/000118518518000573
このディレクトリも、htmlとxmlとjsonの3種類で内容を取得できます。
https://www.sec.gov/Archives/edgar/data/1001463/000118518518000573/index.html
https://www.sec.gov/Archives/edgar/data/1001463/000118518518000573/index.xml
https://www.sec.gov/Archives/edgar/data/1001463/000118518518000573/index.json
このディレクトリの中にXBRLファイルがあります。「0001185185-18-000573-xbrl.zip」という名前です。これを取得します。すでにzipから展開済みのファイルも置かれているのですが、バラのファイルだと時間がかかってしまいますので、zipファイルの方を取得するのが良いと思います。
ところで、アスキーテキストバージョンという、開示情報を1つにまとめたテキストファイルですが、画像などのバイナリファイルも含まれています。文字列にエンコードされています。これに関しては一応パイソンの「uu.decode」というモジュールで取得できましたが、中には失敗するファイルもありました。ソフトを変えたらデコードできたりもしたのですが、あえてこのファイルから抽出する必要はないかなと思いました。
EDGARのサイトでXBRLの中身を見る
エドガーでは、決算書の体裁でXBRLを見られるページが用意されています。XBRLのあったディレクトリに「0001185185-18-000573-index.html」というリンクがありましたが、これがそのページです。具体的には以下のようなURLです。
https://www.sec.gov/Archives/edgar/data/1001463/000118518518000573/0001185185-18-000573-index.html
このページにある「Interactive Data」というボタンから、XBRLの内容が見られます。XBRLプログラムの答え合わせに良さそうです。ただし、内容に誤りのあるXBRLでは描画に失敗します。これは仕方ないですね。
また、XBRLの内容はエクセル形式(xls, xlsx)でも提供されています。同じディレクトリに置かれていました。XBRLなんて知らなくても、最初からエクセルで見れます。
xlsに関しては、普通のエクセルファイルのものと、Web Archiveファイルのものがありました。Web Archiveファイルの方は、開くときに拡張子が違う旨のエラーが出たりしましたが、見ることはできました(Excel 2007)。
以上です。