はじめに
【Python】Pandas で株価データを取得する(その4)ではExcelファイルに書かれた銘柄の株価データを取得した
自分の保有銘柄だけを分析したい場合は自分の保有銘柄を書いたExcelファイルを用意すればよいが,
分析対象を幅広く東証上場銘柄に広げようと思うと,自分でExcelファイルを用意するのは面倒だ
日本取引所グループには,東証上場銘柄の一覧がExcelファイルで用意されている
これを使わない手はない
Excel を使って東証上場銘柄一覧ファイルの確認
さっそく,日本取引所グループから東証上場銘柄一覧ファイル(data_j.xls)をダウンロードして開いてみる
東証上場銘柄一覧ファイルは,次の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 を使って,直近の株価データを取得してみることにしよう