EDINETコードリストは、パイソンのパンダス(pandas)で読むのが簡単です。
EDINETコードリストは複数企業のXBRL取得に使用します。
PythonのpandasでEDINETコードリストを読み込む
pandas.read_csv()で読み込みます。
エディネットコードリストの文字エンコーディングは「cp932」のようです。「shift-jis」だとエラーが出ました。
データは文字列(str)として読み込むのが簡単です。おまかせだと桁数の多い法人番号がfloat型になって、末尾に「.0」が生成されちゃいました。
最初の行は要らない行だったので、1行分だけスキップ。
スキップしてから最初の行(0行目)がラベル行。
import pandas as pd
def get_edinet_codes_df(file):
"""EDINETコードリストのデータフレーム取得"""
# データフレーム生成
df = pd.read_csv(
file,
encoding='cp932',
dtype='str',
skiprows=1, # 最初の行をスキップ
header=0,
)
return df
ここから、上場企業の情報だけを抽出したりします。
抽出例です。データフレームはリストに変換することもできます。デバッグで良く使ってます。
# 上場企業だけを抽出
df = df[df['上場区分']=='上場']
# 必要な列だけ抽出
df = df.loc[:, [
'EDINETコード', '上場区分',
'提出者名', '提出者名(ヨミ)', '提出者名(英字)',
'提出者業種', '証券コード', '提出者法人番号',
]]
# データフレームをリストに変換
datas = df.values.tolist()
作ったデータフレームの保存と読み込み
ピックル(pickle) 形式
ピックルで保存しておくと高速で読み込めます。データベースを保存するのにも適しています。基本的に内容を正しく保存し、正しく読み込むことができます。
pickle 保存:pandas.DataFrame.to_pickle()
pickle 読み込み:pandas.read_pickle()
# データフレームをpickleで保存
df.to_pickle(file)
# pickleから読み込み
df = pd.read_pickle(file)
エクセル(xlsx)形式
エクセルは中身を見たいときに便利です。デバッグで良く使っています。
インデックス列も保存したいときは「index=None」を削除します。
Excel 保存:pandas.DataFrame.to_excel()
Excel 読み込み:pandas.read_excel()
# データフレームをExcelで保存
df.to_excel(file, index=None)
# Excelから読み込み
df = pd.read_excel(file)
シー・エス・ブイ(csv)形式
CSVも中身を見たい時に便利です。差分が取り易いのが良いですね。汎用性があるので、データベースの保存にも使っています。エクセルでも開くには、utf-8-sig を指定します(後述)。
インデックス列も保存したいときは「index=None」を削除します。
CSV 保存:pandas.DataFrame.to_csv()
CSV 読み込み:pandas.read_csv()
# データフレームをCSVで保存
df.to_csv(symbols_csv, encoding='utf-8', index=None)
# CSVから読み込み
df = pd.read_csv(symbols_csv, encoding='utf-8')
また、BOM付きのUTF-8 (utf-8-sig) で保存すると、そのままエクセルで開けるCSVになります。ダブルクリックで開いても文字化けしないので便利です。特にデメリットもないので、自分の作っているシステムでは積極的に使っています。
# データフレームをCSVで保存 (エクセルでも文字化けしない)
df.to_csv(symbols_csv, encoding='utf-8-sig', index=None)
# CSVから読み込み
df = pd.read_csv(symbols_csv, encoding='utf-8-sig')