東証上場企業の業種ごとのコード一覧を取得すべく、東京証券取引所のサイトにアクセスしました。
JPX:その他統計資料
https://www.jpx.co.jp/markets/statistics-equities/misc/01.html
上記のサイトには、直近月末の東証上場銘柄一覧がエクセルファイルで提供されています。ここから、ファイル(data_j.xls)をダウンロードし、Googleドライブの適当なフォルダ(’your_folder/data_j.xls’)にファイルとして保存しました。GoogleドライブをColabにマウントし、DataFrameとして読み込ませると、データの加工が楽になります。
import pandas as pd
# Excelファイルのパスを指定
excel_path = '/content/drive/My Drive/your_folder/data_j.xls'
# Excelファイルを読み込む
df_xls = pd.read_excel(excel_path )
# データフレームを表示
display(df_xls.head())
# 出力
"""
日付 コード 銘柄名 市場・商品区分 33業種コード 33業種区分 17業種コード 17業種区分 規模コード 規模区分
0 20230831 1301 極洋 プライム(内国株式) 50 水産・農林業 1 食品 7 TOPIX Small 2
1 20230831 1305 iFreeETF TOPIX(年1回決算型) ETF・ETN - - - - - -
2 20230831 1306 NEXT FUNDS TOPIX連動型上場投信 ETF・ETN - - - - - -
3 20230831 1308 上場インデックスファンドTOPIX ETF・ETN - - - - - -
4 20230831 1309 NEXT FUNDS ChinaAMC・中国株式・上証50連動型上場投信 ETF・ETN - - - - - -
"""
今回、業種ごとのコード一覧を取得したいので、まずは、DataFrameのカラム名を表示してみます。
df_xls.columns
# 出力
# Index(['日付', 'コード', '銘柄名', '市場・商品区分', '33業種コード', '33業種区分', '17業種コード', '17業種区分', '規模コード', '規模区分'], dtype='object')
‘日付’, ‘コード’, ‘銘柄名’以外のカラムで、一意の値(unique()メソッド使用)を取得して、カラム名をキー値とした業種などの辞書オブジェクトを作成しました。
# カラム名で辞書オブジェクトを作成
unique_subjects = {}
for i in range(3,9):
unique_subjects[df_xls.columns[i]] = df_xls[df_xls.columns[i]].unique()
print(unique_subjects)
# 出力
"""
{'市場・商品区分': array(['プライム(内国株式)', 'ETF・ETN', 'スタンダード(内国株式)', 'グロース(内国株式)',
'PRO Market', 'プライム(外国株式)', 'REIT・ベンチャーファンド・カントリーファンド・インフラファンド',
'スタンダード(外国株式)', 'グロース(外国株式)', '出資証券'], dtype=object),
'33業種コード': array([50, '-', 2050, 3500, 1050, 9050, 8050, 3600, 3550, 5250, 3050,
3250, 5050, 7200, 6100, 6050, 3800, 3200, 3100, 3650, 3400, 7100,
3700, 3300, 3150, 3750, 3350, 3450, 7050, 7150, 5200, 5100, 5150,
4050], dtype=object),
'33業種区分': array(['水産・農林業', '-', '建設業', '非鉄金属', '鉱業', 'サービス業', '不動産業', '機械', '金属製品',
'情報・通信業', '食料品', '医薬品', '陸運業', 'その他金融業', '小売業', '卸売業', 'その他製品',
'化学', '繊維製品', '電気機器', 'ガラス・土石製品', '証券、商品先物取引業', '輸送用機器', '石油・石炭製品',
'パルプ・紙', '精密機器', 'ゴム製品', '鉄鋼', '銀行業', '保険業', '倉庫・運輸関連業', '海運業',
'空運業', '電気・ガス業'], dtype=object),
'17業種コード': array([1, '-', 3, 7, 2, 10, 17, 8, 5, 12, 16, 14, 13, 4, 9, 6, 15, 11],
dtype=object),
'17業種区分': array(['食品 ', '-', '建設・資材 ', '鉄鋼・非鉄 ', 'エネルギー資源 ', '情報通信・サービスその他 ',
'不動産 ', '機械 ', '医薬品 ', '運輸・物流 ', '金融(除く銀行) ', '小売 ', '商社・卸売 ',
'素材・化学 ', '電機・精密 ', '自動車・輸送機 ', '銀行 ', '電力・ガス '], dtype=object),
'規模コード': array([7, '-', 4, 6, 2, 1], dtype=object)}
"""
以下のように、'33業種区分'
が'不動産業'
であるshape
属性を見ると、155銘柄あることがわかりました。これらの'市場・商品区分'
にどのようなものがあるかをunique()
メソッドで調べたところ、'プライム(内国株式)', 'スタンダード(内国株式)', 'PRO Market', 'グロース(内国株式)'
の4種類ありました。このうち、'PRO Market'
については、今回は関係ありません。
df_xls[df_xls['33業種区分']=='不動産業'].shape
# (155, 10)
df_xls[df_xls['33業種区分']=='不動産業']['市場・商品区分'].unique()
# array(['プライム(内国株式)', 'スタンダード(内国株式)', 'PRO Market', 'グロース(内国株式)'],
dtype=object)
そこで、以下のように'市場・商品区分'
から、'PRO Market'
を除外して、リストオブジェクトに変換し、'不動産業'
155銘柄のリストを得ました。
df_xls[(df_xls['33業種区分']=='情報・通信業')&(df_xls['市場・商品区分']!='PRO Market')]['コード'].to_list()
"""
[1878,2337,2353,2970,2975,2978,2980,2981,2982,2983,2984,2986,2987,2991,2993,2997,2998,2999,3003,3228,3231,3232,3236,3237,3238,3241,3242,3244,3245,3246,3248,3252,3254,3261,3264,3266,3271,3275,3276,3277,3280,3284,3286,3288,3289,3291,3293,3294,3297,3299,3300,3452,3454,3457,3458,3461,3464,3465,3467,3469,3474,3475,3477,3479,3480,3482,3484,3486,3489,3490,3491,3494,3495,3496,3497,3498,3772,4666,4809,5280,5527,5532,5533,6620,6625,8801,8802,8803,8804,8818,8830,8836,8841,8842,8844,8848,8850,8854,8860,8864,8869,8871,8877,8881,8886,8887,8889,8890,8891,8892,8893,8894,8897,8898,8903,8904,8905,8908,8912,8914,8917,8918,8919,8923,8925,8927,8928,8929,8931,8934,8935,8938,8940,8944,8945,8946,8995,8996,8999,9706,9816,9820]
"""