kessannote

JPX 東証上場銘柄一覧 (data_j) の性質

基準日は取得日と違い、証券コードは 4 桁数字とは限らない。配布ファイルは 2026-09-03 ごろ .xls から .xlsx に変わり、古い URL は 404 になった。

調べた対象

JPX が公開する東証上場銘柄一覧。

https://www.jpx.co.jp/markets/statistics-equities/misc/tvdivq0000001vg2-att/data_j.xlsx

初回 (2026-08-16) は 2 つの版を突き合わせた。

  • 2026-08-01 04:00 に取得された版。日付 列は 20260630
  • 2026-08-16 に取得した版。日付 列は 20260731

その後 2026-09-12 に、夜間バッチのログと stock_snapshots から 3 点目を足した。 日付 列が 20260831 の版で、取り込みの初出は 2026-09-06 07:53 になる。

数え方は pandas。pd.read_excel(path, dtype=str) で読んだ。dtype=str を付けないとコードが数値になる。以下の件数はすべて 2026-07-31 版の実測値。

列は 10 個。日付 コード 銘柄名 市場・商品区分 33業種コード 33業種区分 17業種コード 17業種区分 規模コード 規模区分。

基準日は取得日と違う

日付 列がデータの基準日を表す。ファイルを取得した日ではない。

取得日 日付 列の値
2026-08-01 20260630
2026-08-16 20260731

月末時点のデータが 1 か月ほど遅れて公開される。8/1 の時点ではまだ 6 月末版だった。8 月の途中で 7 月末版に切り替わっている。

更新が毎月何日に起きるかは、この 2 点では決められない。観測を続ける必要がある。月初に取りに行くと、常に 2 か月前のデータを掴み続けることになる。

過去分は取り直せない

URL には最新版 1 本しか置かれていない。過去の基準日のファイルは JPX から取得できない。取り逃した月は永久に欠ける。

6 月末版が手元に残っていたのは、以前のバッチが保存した 1 本が生きていたからである。そのバッチは同じファイル名で毎回上書きしていたため、5 月以前は失われている。

生ファイルを基準日ごとに残す運用が要る。ここが理由。

市場・商品区分の内訳

全 4444 行の内訳。

区分 件数
スタンダード(内国株式) 1559
プライム(内国株式) 1558
グロース(内国株式) 596
ETF・ETN 476
PRO Market 185
REIT・ベンチャーファンド・カントリーファンド・インフラファンド 63
スタンダード(外国株式) 2
グロース(外国株式) 2
出資証券 2
プライム(外国株式) 1

内国株 3 市場の合計は 3713 件。投資判断の対象はここになる。区分の文字列には全角括弧が入る。半角で書くと一致しない。

外国株は 5 件しかない。PRO Market は 185 件あり、一般の投資家は買えない。

証券コードは 4 桁数字とは限らない

内国株 3 市場 3713 件のうち、数字だけで構成されないコードが 171 件ある。130A のように末尾が英字になる。2024 年から英文字を含むコードの割り当てが始まったため。

桁数も 4 桁固定ではない。5 桁が 7 件ある。優先株と社債型種類株。

コード 銘柄名
25935 伊藤園第1種優先株式
50765 インフロニア・ホールディングス第1回社債型種類株式
75505 ゼンショーホールディングス第1回社債型種類株式
92015 日本航空株式会社第1回社債型種類株式
92025 ANAホールディングス第1回社債型種類株式
94345 ソフトバンク第1回社債型種類株式
94346 ソフトバンク第2回社債型種類株式

5 桁は普通株の 4 桁コードに枝番を付けた形になっている。伊藤園の普通株は 2593。ただし普通株との対応関係は JPX の一覧には入っていない。

「証券コードは 4 桁の数字」を前提にすると壊れる。

業種コードは先頭の 0 が落ちる

33 業種コードは本来 4 桁。1050 のような値が入る。しかし 3713 件のうち 12 件が 2 桁になっている。水産・農林業の 0050 が 50 として読める。

17 業種コードも同様。本来 2 桁のところ 1431 件が 1 桁になる。食品の 01 が 1 になる。

原因は Excel 側。数値セルとして保持しているため、先頭の 0 が保存されない。読み込み後に 0 埋めして揃える必要がある。33 業種は 4 桁、17 業種は 2 桁。

dtype=str を付けても解決しない。文字列化する前に 0 が失われている。

規模区分は過半が対象外

規模コード と 規模区分 は、内国株 3 市場 3713 件のうち 2076 件が - になる。TOPIX の規模区分に採用されていない銘柄。

値は 5 種類。

コード 区分
1 TOPIX Core30
2 TOPIX Large70
4 TOPIX Mid400
6 TOPIX Small 1
7 TOPIX Small 2

コード 3 と 5 は現れない。欠番なのか、この版にたまたま無いだけかは未確認。

- は「該当なし」を表す文字列であって、値ではない。そのまま保存すると後で数えるときに事故る。

その他の実測

銘柄名の最大長は 32 文字。全角。長い名前は社債型種類株が占める。

配布ファイルが .xls から .xlsx に変わった

2026-09-03 ごろ、JPX が拡張子を変えた。古い URL は 404 を返すようになった。

旧  .../tvdivq0000001vg2-att/data_j.xls
新  .../tvdivq0000001vg2-att/data_j.xlsx

夜間バッチのログ (journalctl -t kabu) で日が取れる。

日時 結果
2026-09-03 01:00 成功。基準日 2026-07-31
2026-09-04 01:00 失敗。3 秒で終了
2026-09-05 01:00 失敗
2026-09-06 01:00 失敗
2026-09-06 07:53 成功。基準日 2026-08-31。取得先を .xlsx に直した後
2026-09-07 01:00 成功。以降は毎晩

3 晩続けて落ちていた。 他の処理は走り続けるので、全体は「1 件失敗」で終わる。取得元が 黙って変わると、こういう落ち方をする。

ファイルの更新時刻は判断材料にならない。同じ基準日のあいだ毎晩上書きするため、 data_j_20260831.xlsx の mtime は最後に落とした日になる。初出を知りたいときは stock_snapshots の min(created_at) を見る。

未確定

  • JPX が毎月何日に更新するか。観測は 3 点に増えた。6 月末版が 2026-08-01 時点、7 月末版が 2026-08-16 時点、8 月末版が 2026-09-06 時点で見えている。ただし 8 月末版の初出は拡張子の 変更と重なっており、9 月 3 日から 6 日のどこで公開されたかを切り分けられない。取得が 毎晩通るようになったので、9 月末版で日が決まる
  • 規模コードの 3 と 5 が欠番かどうか
  • 5 桁コードと普通株コードの対応を JPX が別途公開しているか