Python カスタム関数§11:東証銘柄コード表をpandasのフレームデータ化して読み出す

Pythonをもっと便利にしよう!

東証の銘柄情報の入手

東証の銘柄情報を入手するには、日本取引所グループのサイトにアクセスすれば可能です。

このサイトに銘柄名、銘柄コードなど各種市場や分類などの情報が掲載されています。

以下のページからダウンロードができます。
ダウンロードはこちら

ここに、data_j.xlsというエクセルファイルがありますので、まずはこのデータをダウロードしてください。使用用途によっては、このエクセルファイルだけで十分という方もおられると思いますのご利用ください。

 

銘柄コード表をpandasのデータフレームに変換して保存する

銘柄コード表には、以下の10項目が掲載されています。

  1. 日付(ファイルの登録された情報の日付)
  2. コード
  3. 銘柄名
  4. 市場・商品区分
  5. 33業種コード
  6. 33業種区分
  7. 17業種コード
  8. 17業種区分
  9. 規模コード
  10. 規模区分

 

エクセルデータファイルからpandasのデータフレームに変換

まずは、エクセルからデータフレームに変換しましょう。

    import pandas as pd
    import time
    
    t0=time.time()
    filename = './data_j.xls'
    df = pd.read_excel(filename)

    print(df.info())
    t1=time.time()
    
    print(f'処理時間:{(t1-t0):6.3f}[sec]')

時間計測のためにtimeライブラリーをインポートしていますが、フレームデータにするにはpandasだけで十分です。pdとして使えるようにしています。

エクセルのファイル名を指定して(この場合は、pythonスクリプトと同じ場所にあると想定)pd.read_excelを実行するだけです。とても簡単です。

このあとにdfというデータフレーム変数を使っていろんなことをしてもよいのですが、pandasにはデータフレームをpickleデータ形式で保存できるのでその状態まで処理しておきましょう。

 

pandasのフレームデータをpickle形式で保存

    import pandas as pd
    import time
    
    t0=time.time()
    filename = './data_j.xls'
    df = pd.read_excel(filename)


    print(df.info())

    savename='./meigara.fd'
    df.to_pickle(savename)
    t1=time.time()
    
    print(f'処理時間:{(t1-t0):6.3f}[sec]')

 

あまり、処理時間には変化はありません。1秒以内で完了です。このようにフレームデータをpickle形式で保存しておくと、次から読み込むのがとても速くなるので、ここまでしておくことをお勧めします。

フレームデータ(pickleファイル)を読込む。(とても速いです)

次にフレームデータをpickleファイルとして保存しておいたものをフレームデータに復元します。

    import pandas as pd
    import time
    
    t0=time.time()
    filename = './meigara.fd'
    df = pd.read_pickle(filename)    


    print(df.info())

    t1=time.time()
    
    print(f'処理時間:{(t1-t0):6.3f}[sec]')

 

さきほどのエクセルファイルを読込む場合にくらべて、10分の1の時間で読み込むことができます。私のパソコンでは30msecほどでした。

フレームデータを読み出す処理を関数化

 

def meigara_data_read_pickle(filename='./meigara.fd'):
    import pandas as pd
    df = pd.read_pickle(filename)
    # 0   日付       
    # 1   コード     
    # 2   銘柄名      
    # 3   市場・商品区分
    # 4   33業種コード  
    # 5   33業種区分   
    # 6   17業種コード  
    # 7   17業種区分   
    # 8   規模コード    
    # 9   規模区分     
    
    #日付をdatetime型に変換する
    df['日付']=df['日付'].astype(str)
    df['日付']=pd.to_datetime(df['日付'])
    
    df.drop('日付',axis=1,inplace=True)
    
    return df

 

この関数化した例では、日付部分を最終的には、dropで削除していますが、もし使いたい場合は、この行をコメント化するとよいと思います。ただ、この日付データは、すべての銘柄に同じ日付がつけられているので、削除してもよいかと思います。

戻り値は、dfというフレームデータを返しているので、これを煮るなと焼くなと好きに料理すればよいことになります。

もしこの関数をエクセルデータからdfを返す関数にしたければ、df=pd_read_pickle の部分を

df = pd.read_excel(filename) に変更して、ファイル名をエクセルファイルに変更すればよいだけです。

銘柄コード表の使いみち

この銘柄コード表は、市場区分や業種分類が載っています。ということは、今後、株価のデータ分析をする場合に、どの業界が調子いいのか悪いのか、コロナの影響を大きく受けたのはどの業界で、どの業界が回復基調にあるのか、現在、もっとも勢いのある業界はどこなのかなどに応用できると思います。全銘柄のデータ取得方法は、>>こちらの記事でダウンロードできます

全銘柄のデータを最新のものと、その前日のデータを入手して結合すれば、終値比較で、上昇している業種を抽出することもできます。また、最新データとコロナ発生以前(例えば2月末)と比較すれば、戻っている業種と戻っていない業種もわかってくると思います。このあたりの解析方法は、別の記事で紹介していきたいと思います。

 

コメント