「東証上場銘柄」には10種類の「市場区分」情報。
「東証上場銘柄」(Excel、XLS)を閲覧してみたら、分割・整理すればRDBの負担軽くなるのでは、と思う箇所がいくつかありました。今回は「市場・商品区分」です。
Excel/XLSの表なので、Excelの機能で「重複削除」が簡単にできます。その結果を逆ソートしたら次の順になりました。
- 出資証券
- プライム(内国株式)
- プライム(外国株式)
- スタンダード(内国株式)
- スタンダード(外国株式)
- グロース(内国株式)
- グロース(外国株式)
- REIT・ベンチャーファンド・カントリーファンド・インフラファンド
- PRO Market
- ETF・ETN
10種類もあるんですね。しかし、区分コードは付定されていませんでした。ということは、自分で勝手につけて管理するしかないけど、市場変更銘柄があったときには「東証上場銘柄」DLしたとき常に文字ベースで差分を見つけ処理せんといかんのね……それって、面倒…。
「内国株式」だけを「東証上場銘柄」から選択する。
ETF、外国株式などを除外し「内国株式」銘柄コードのみ必要データを拾うことにしました。ひとまずの結果が先頭画像です。
Pythonスクリプトは次の通りです。
#東証公開xlsから、銘柄コード、銘柄名、市場区分、業種名など取得 import pandas as pd #東証サイト https://www.jpx.co.jp/markets/statistics-equities/misc/01.html にLINKがあるxlsが対象 url = 'https://www.jpx.co.jp/markets/statistics-equities/misc/tvdivq0000001vg2-att/data_j.xls' #pandasでURLにアクセス→取得→ターミナル表示 # df = pd.io.excel.read_excel(url, header = 0,index_col = 1) #0=1行目見出し、1=キー列は2列目(銘柄コード) df = pd.read_excel(url, header = 0,index_col = 1) #0=1行目見出し、1=キー列は2列目(銘柄コード) # print(df.index.values[0]) # 1301=index行(銘柄コード)のうち見出し行を除く最初の値 df_dmst_caps = df[df['市場・商品区分'].str.match(".*(内国株式)$")] print(df_dmst_caps)
あれ、と思ったのは「正規表現」のところです。エスケープする必要ないんですね、Pandasの時は…。
普通だと機能文字の時は「\」を直前においたりするのですがね…。
「".*(内国株式)$"」は、1文字以上あった後、(内国株式)で項目末尾に至る、という条件で正規表現を使っている、と爺は思っています。
東証から得たデータを抽出して選べた結果ですから、市場区分が変更されても影響を受けないことになりますので、コード管理せず、このまま使おうかと思います。
33業種、17業種、規模の3コードを使い、それぞれに紐づけられる具体名はそれぞれテーブルで参照するようにしようかと、妄想しています。さて、どうなりますか…。