取得できる情報と加工¶
一覧の中身は以下のとおり。
- コード : code
- 銘柄名 : name
- 市場・商品区分 : market
- 33業種コード : type33
- 17業種コード : type17
- 規模コード : scale
区分やコードの意味をメモしておく。
市場・商品区分 : market¶
- P:プライム
- S:スタンダード
- G:グロース
17業種コードと33業種コード¶
銘柄数はプライム、スタンダード、グロースの合計。
17業種 | 33業種 | 銘柄数 |
---|---|---|
1 : 食品 | 50 : 水産・農林業 | 12 |
1 : 食品 | 3050 : 食料品 | 125 |
2 : エネルギー資源 | 1050 : 鉱業 | 6 |
2 : エネルギー資源 | 3300 : 石油・石炭製品 | 11 |
3 : 建設・資材 | 2050 : 建設業 | 161 |
3 : 建設・資材 | 3400 : ガラス・土石製品 | 54 |
3 : 建設・資材 | 3550 : 金属製品 | 89 |
4 : 素材・化学 | 3100 : 繊維製品 | 49 |
4 : 素材・化学 | 3150 : パルプ・紙 | 24 |
4 : 素材・化学 | 3200 : 化学 | 209 |
5 : 医薬品 | 3250 : 医薬品 | 79 |
6 : 自動車・輸送機 | 3350 : ゴム製品 | 18 |
6 : 自動車・輸送機 | 3700 : 輸送用機器 | 88 |
7 : 鉄鋼・非鉄 | 3450 : 鉄鋼 | 42 |
7 : 鉄鋼・非鉄 | 3500 : 非鉄金属 | 34 |
8 : 機械 | 3600 : 機械 | 223 |
9 : 電機・精密 | 3650 : 電気機器 | 242 |
9 : 電機・精密 | 3750 : 精密機器 | 49 |
10 : 情報通信・サービスその他 | 3800 : その他製品 | 107 |
10 : 情報通信・サービスその他 | 5250 : 情報・通信業 | 624 |
10 : 情報通信・サービスその他 | 9050 : サービス業 | 560 |
11 : 電力・ガス | 4050 : 電気・ガス業 | 27 |
12 : 運輸・物流 | 5050 : 陸運業 | 63 |
12 : 運輸・物流 | 5100 : 海運業 | 11 |
12 : 運輸・物流 | 5150 : 空運業 | 6 |
12 : 運輸・物流 | 5200 : 倉庫・運輸関連業 | 37 |
13 : 商社・卸売 | 6050 : 卸売業 | 310 |
14 : 小売 | 6100 : 小売業 | 354 |
15 : 銀行 | 7050 : 銀行業 | 79 |
16 : 金融(除く銀行) | 7100 : 証券、商品先物取引業 | 41 |
16 : 金融(除く銀行) | 7150 : 保険業 | 15 |
16 : 金融(除く銀行) | 7200 : その他金融業 | 40 |
17 : 不動産 | 8050 : 不動産業 | 158 |
規模コード¶
- 1 : TOPIX Core30
- 2 : TOPIX Large70
- 4 : TOPIX Mid400
- 6 : TOPIX Small 1
- 7 : TOPIX Small 2
Excelをダウンロードして保存¶
In [1]:
Copied!
import requests
data_j_url = "https://www.jpx.co.jp/markets/statistics-equities/misc/tvdivq0000001vg2-att/data_j.xls"
data_j_path = "./data_j.xls"
with open(data_j_path, "wb") as f:
f.write(requests.get(data_j_url).content)
import requests
data_j_url = "https://www.jpx.co.jp/markets/statistics-equities/misc/tvdivq0000001vg2-att/data_j.xls"
data_j_path = "./data_j.xls"
with open(data_j_path, "wb") as f:
f.write(requests.get(data_j_url).content)
読み込んでみる¶
In [4]:
Copied!
import pandas as pd
import numpy as np
df = pd.read_excel("data_j.xls")
df
import pandas as pd
import numpy as np
df = pd.read_excel("data_j.xls")
df
Out[4]:
日付 | コード | 銘柄名 | 市場・商品区分 | 33業種コード | 33業種区分 | 17業種コード | 17業種区分 | 規模コード | 規模区分 | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 20240628 | 1301 | 極洋 | プライム(内国株式) | 50 | 水産・農林業 | 1 | 食品 | 7 | TOPIX Small 2 |
1 | 20240628 | 1305 | iFreeETF TOPIX(年1回決算型) | ETF・ETN | - | - | - | - | - | - |
2 | 20240628 | 1306 | NEXT FUNDS TOPIX連動型上場投信 | ETF・ETN | - | - | - | - | - | - |
3 | 20240628 | 1308 | 上場インデックスファンドTOPIX | ETF・ETN | - | - | - | - | - | - |
4 | 20240628 | 1309 | NEXT FUNDS ChinaAMC・中国株式・上証50連動型上場投信 | ETF・ETN | - | - | - | - | - | - |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
4366 | 20240628 | 9991 | ジェコス | プライム(内国株式) | 6050 | 卸売業 | 13 | 商社・卸売 | 7 | TOPIX Small 2 |
4367 | 20240628 | 9993 | ヤマザワ | スタンダード(内国株式) | 6100 | 小売業 | 14 | 小売 | 7 | TOPIX Small 2 |
4368 | 20240628 | 9994 | やまや | スタンダード(内国株式) | 6100 | 小売業 | 14 | 小売 | 7 | TOPIX Small 2 |
4369 | 20240628 | 9996 | サトー商会 | スタンダード(内国株式) | 6050 | 卸売業 | 13 | 商社・卸売 | - | - |
4370 | 20240628 | 9997 | ベルーナ | プライム(内国株式) | 6100 | 小売業 | 14 | 小売 | 6 | TOPIX Small 1 |
4371 rows × 10 columns
不要な列削除と列名変更¶
In [5]:
Copied!
df = df.drop(["日付", "33業種区分", "17業種区分", "規模区分"], axis=1, errors="ignore")
df = df.rename(columns={"コード":"code", "銘柄名": "name", "市場・商品区分": "market", "33業種コード": "type33", "17業種コード":"type17", "規模コード":"scale"})
df
df = df.drop(["日付", "33業種区分", "17業種区分", "規模区分"], axis=1, errors="ignore")
df = df.rename(columns={"コード":"code", "銘柄名": "name", "市場・商品区分": "market", "33業種コード": "type33", "17業種コード":"type17", "規模コード":"scale"})
df
Out[5]:
code | name | market | type33 | type17 | scale | |
---|---|---|---|---|---|---|
0 | 1301 | 極洋 | プライム(内国株式) | 50 | 1 | 7 |
1 | 1305 | iFreeETF TOPIX(年1回決算型) | ETF・ETN | - | - | - |
2 | 1306 | NEXT FUNDS TOPIX連動型上場投信 | ETF・ETN | - | - | - |
3 | 1308 | 上場インデックスファンドTOPIX | ETF・ETN | - | - | - |
4 | 1309 | NEXT FUNDS ChinaAMC・中国株式・上証50連動型上場投信 | ETF・ETN | - | - | - |
... | ... | ... | ... | ... | ... | ... |
4366 | 9991 | ジェコス | プライム(内国株式) | 6050 | 13 | 7 |
4367 | 9993 | ヤマザワ | スタンダード(内国株式) | 6100 | 14 | 7 |
4368 | 9994 | やまや | スタンダード(内国株式) | 6100 | 14 | 7 |
4369 | 9996 | サトー商会 | スタンダード(内国株式) | 6050 | 13 | - |
4370 | 9997 | ベルーナ | プライム(内国株式) | 6100 | 14 | 6 |
4371 rows × 6 columns
ETFなどは除外¶
In [6]:
Copied!
# 市場
df = df[df["market"] != "ETF・ETN"]
df = df[df["market"] != "REIT・ベンチャーファンド・カントリーファンド・インフラファンド"]
df = df[df["market"] != "出資証券"]
df = df[df["market"] != "PRO Market"]
df = df[df["market"] != "プライム(外国株式)"]
df = df[df["market"] != "スタンダード(外国株式)"]
df = df[df["market"] != "グロース(外国株式)"]
len(df)
# 市場
df = df[df["market"] != "ETF・ETN"]
df = df[df["market"] != "REIT・ベンチャーファンド・カントリーファンド・インフラファンド"]
df = df[df["market"] != "出資証券"]
df = df[df["market"] != "PRO Market"]
df = df[df["market"] != "プライム(外国株式)"]
df = df[df["market"] != "スタンダード(外国株式)"]
df = df[df["market"] != "グロース(外国株式)"]
len(df)
Out[6]:
3832
値を正規化¶
In [7]:
Copied!
# 市場・商品区分
df["market"] = df["market"].replace({"プライム(内国株式)" : "P", "スタンダード(内国株式)": "S", "グロース(内国株式)": "G"})
# 規模コード
df["scale"] = df["scale"].replace({"-" : "0"})
# 市場・商品区分
df["market"] = df["market"].replace({"プライム(内国株式)" : "P", "スタンダード(内国株式)": "S", "グロース(内国株式)": "G"})
# 規模コード
df["scale"] = df["scale"].replace({"-" : "0"})
変換後¶
In [8]:
Copied!
df
df
Out[8]:
code | name | market | type33 | type17 | scale | |
---|---|---|---|---|---|---|
0 | 1301 | 極洋 | P | 50 | 1 | 7 |
5 | 130A | Veritas In Silico | G | 3250 | 5 | 0 |
19 | 1332 | ニッスイ | P | 50 | 1 | 4 |
20 | 1333 | マルハニチロ | P | 50 | 1 | 4 |
31 | 135A | VRAIN Solution | G | 5250 | 10 | 0 |
... | ... | ... | ... | ... | ... | ... |
4366 | 9991 | ジェコス | P | 6050 | 13 | 7 |
4367 | 9993 | ヤマザワ | S | 6100 | 14 | 7 |
4368 | 9994 | やまや | S | 6100 | 14 | 7 |
4369 | 9996 | サトー商会 | S | 6050 | 13 | 0 |
4370 | 9997 | ベルーナ | P | 6100 | 14 | 6 |
3832 rows × 6 columns
値を見てみる¶
In [9]:
Copied!
# コード
df["code"] = df["code"].astype(str)
np.unique(df["code"].values)
# コード
df["code"] = df["code"].astype(str)
np.unique(df["code"].values)
Out[9]:
array(['1301', '130A', '1332', ..., '9994', '9996', '9997'], dtype=object)
In [10]:
Copied!
# 市場・商品区分
df["market"] = df["market"].astype(str)
np.unique(df["market"].values)
# 市場・商品区分
df["market"] = df["market"].astype(str)
np.unique(df["market"].values)
Out[10]:
array(['G', 'P', 'S'], dtype=object)
In [11]:
Copied!
# 33業種区分
df["type33"] = df["type33"].astype(int)
np.unique(df["type33"].values)
# 33業種区分
df["type33"] = df["type33"].astype(int)
np.unique(df["type33"].values)
Out[11]:
array([ 50, 1050, 2050, 3050, 3100, 3150, 3200, 3250, 3300, 3350, 3400, 3450, 3500, 3550, 3600, 3650, 3700, 3750, 3800, 4050, 5050, 5100, 5150, 5200, 5250, 6050, 6100, 7050, 7100, 7150, 7200, 8050, 9050])
In [12]:
Copied!
# 17業種コード
df["type17"] = df["type17"].astype(int)
np.unique(df["type17"].values)
# 17業種コード
df["type17"] = df["type17"].astype(int)
np.unique(df["type17"].values)
Out[12]:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17])
In [13]:
Copied!
# 規模コード
df["scale"] = df["scale"].astype(int)
np.unique(df["scale"].values)
# 規模コード
df["scale"] = df["scale"].astype(int)
np.unique(df["scale"].values)
Out[13]:
array([0, 1, 2, 4, 6, 7])