LoginSignup
2
3

More than 1 year has passed since last update.

【Python】東証上場銘柄の株価データを取得する(その1)

Posted at

はじめに

【Python】Pandas で株価データを取得する(その4)ではExcelファイルに書かれた銘柄の株価データを取得した

自分の保有銘柄だけを分析したい場合は自分の保有銘柄を書いたExcelファイルを用意すればよいが,
分析対象を幅広く東証上場銘柄に広げようと思うと,自分でExcelファイルを用意するのは面倒だ

日本取引所グループには,東証上場銘柄の一覧がExcelファイルで用意されている
これを使わない手はない

Excel を使って東証上場銘柄一覧ファイルの確認

さっそく,日本取引所グループから東証上場銘柄一覧ファイル(data_j.xls)をダウンロードして開いてみる
image.png
東証上場銘柄一覧ファイルは,次の10列からできており,
全部で,4133銘柄(2021年10月末)ある

  • 日付
  • コード
  • 銘柄名
  • 市場・商品区分
  • 33業種コード
  • 33業種区分
  • 17業種コード
  • 17業種区分
  • 規模コード
  • 規模区分

業種で絞るには「業種区分」列,株価指数で絞るには「規模区分」列がよさそうだ

「規模区分」は5つあり,次のようになっている

名称 構成銘柄
TOPIX Core30 時価総額と流動性の特に高い30銘柄
TOPIX Large70 Topix Core 30についで,時価総額と流動性の高い70銘柄
TOPIX Mid400 Topix Core30,Topix Large70 についで,時価総額と流動性の高い400銘柄
TOPIX Small 1 TOPIX Small の構成銘柄のうち TOPIX 1000 及び TOPIX Small500 の構成銘柄に該当する銘柄
TOPIX Small 2 TOPIX Small の構成銘柄のうち TOPIX 1000 及び TOPIX Small500 の構成銘柄には該当しない銘柄

Pandas を使って東証上場銘柄一覧ファイルの確認

まずは,Pandas で東証上場銘柄一覧ファイルを読み込む

>>> import pandas as pd
>>> df = pd.read_excel('data_j.xls', dtype = str)

どんな列があるか

>>> df.columns
Index(['日付', 'コード', '銘柄名', '市場・商品区分', '33業種コード', '33業種区分', '17業種コード', '17業種区分',
       '規模コード', '規模区分'],
      dtype='object')

銘柄数は

>>> len(df)
4133

規模区分とは,どんな区分か

>>> df['規模区分'].unique()
array(['TOPIX Small 2', '-', 'TOPIX Mid400', 'TOPIX Small 1',
       'TOPIX Large70', 'TOPIX Core30'], dtype=object)

17業種区分とは,どんな区分か

>>> df['17業種区分'].unique()
array(['食品 ', '-', '商社・卸売 ', '建設・資材 ', '鉄鋼・非鉄 ', 'エネルギー資源 ',
       '情報通信・サービスその他 ', '機械 ', '医薬品 ', '不動産 ', '運輸・物流 ', '金融(除く銀行) ',
       '小売 ', '素材・化学 ', '電機・精密 ', '自動車・輸送機 ', '銀行 ', '電力・ガス '],
      dtype=object)

Pandas を使って東証上場銘柄一覧ファイルの銘柄抽出

東証上場銘柄一覧ファイルが確認できたところで,銘柄の抽出を行ってみる

17業種区分が銀行の銘柄は

>>> df[(df['17業種区分']=='銀行')]
Empty DataFrame
Columns: [日付, コード, 銘柄名, 市場商品区分, 33業種コード, 33業種区分, 17業種コード, 17業種区分, 規模コード, 規模区分]
Index: []

あれ空だ

17業種区分の値をよく見ると,'銀行 'のように後ろに空白が入っているので

str.rstrip() を使って,末尾の空白を削除する必要があった

>>> df[(df['17業種区分'].str.rstrip()=='銀行')]

81行が抽出された

TOPIX Core30 の条件をつけると3メガ銀が抽出される

>>> df[(df['17業種区分'].str.rstrip()=='銀行') & (df['規模区分']=='TOPIX Core30')]['銘柄名']
3510    三菱UFJフィナンシャルグループ
3513      三井住友フィナンシャルグループ
3554       みずほフィナンシャルグループ
Name: 銘柄名, dtype: object

TOPIX Core30 または TOPIX Large70 の条件にすると5大銀が抽出される

>>> df[(df['17業種区分'].str.rstrip()=='銀行') & ((df['規模区分']=='TOPIX Core30') | (df['規模区分']=='TOPIX Large70'))]['銘柄名']
3510    三菱UFJフィナンシャルグループ
3511          りそなホールディングス
3512    三井住友トラストホールディングス
3513      三井住友フィナンシャルグループ
3554       みずほフィナンシャルグループ
Name: 銘柄名, dtype: object

おわりに

今回はここまでで次回は,【Python】Pandas で株価データを取得する(その4)で書いた
pandas_datareader を使って,直近の株価データを取得してみることにしよう

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3