見出し画像

pythonで「PER算出ルーチン化」

アメリカやヨーロッパは景気の先行きが不安視されているのに・・・
日本は、バブル景気後32年と9ケ月ぶりに、日経平均株価が3万円台回復と活況を呈しています。
こんな時、個人は焦らず割安銘柄を見つけるため、PERの計算をpythonでルーチン化し、銘柄選定に励みたいと思います。


1.事前準備 データのダウンロード

上場企業の最新決算・財務データをダウンロードできるIR BANKから、B/S:貸借対照表 P/L:損益計算書 C/Fキャッシュフロー計算書をCSVデータにてダウンロードします。こちらのデータだけだと銘柄コードしか記載がなく、わかりづらいので東京証券取引所から『東証銘柄一覧』もダウンロードします。


2.P/Lデータの読込、データ内容の確認

import pandas as pd

# P/L読込
df1 = pd.read_csv("fy-profit-and-loss .csv",skiprows=1)


読込んだP/L

銘柄コードと損益計算書の情報と3指標が掲載されています。

掲載指標の確認を行います。
★EPS 一株当たり純利益
計算式 当期純利益 ÷ 発行済株式数
わかること:企業の稼ぐ力、収益力と成長性が分かる。
★ROE 自己資本利益率(株主資本利益率) 
計算式 当期純利益 ÷ 自己資本(返済する必要の無い資産) × 100
株主が出資したお金を元手に企業がどれくらい効率良くお金を稼いでいるかを示す
注意点:計算に負債が含まれていないためROEだけ比べると、負債額が大きい企業ほど効率良く見える。
★ROA 総資本利益率
計算式 当期純利益 ÷ 総資産 × 100
総資産=( 当期純利益 ÷ 売上高 )×( 売上高 ÷ 総資産 )
企業の総資産を利用してどれだけの利益をあげられたかを示す。
数値が高いと効率よく利益を上げている企業となる。
注意点:多額の負債を抱えていても利益を多く生み出していればROAは高くなる。
どの指標も企業の稼ぐ力を比べることができます。

3.P/Lと銘柄一覧を結合

# 銘柄コード読込
xlsx = pd.ExcelFile('code_data_j.xls')
df2 = pd.read_excel(xlsx, 'Sheet1')

# 2つのデータフレームを結合
df =pd.merge(df2,df1,on="コード")


2つのデータをmerge

銘柄名や市場種類、産業、業種が表示され見やすくなりました。

4.市場の絞り込み

のびしろが見込めるグロース市場の銘柄に絞り込みます。

# 市場をスライス
df_G = df[df["市場・商品区分"] == "グロース(内国株式)"]

# EPS列をソートして、最後の10行を取得する
Gtop_10 = df_G.sort_values(by=["EPS"]).tail(10)


グロース市場EPSトップ10

EPSトップ10を基に、株価抽出を行っていきます。

5.株価抽出

# 株価抽出の銘柄コードを特定
df_EPS_codes = Gtop_10["コード"].tolist()
df_EPS_codes = [str(code) + ".jp" for code in df_EPS_codes]
df_EPS_codes


株価抽出銘柄コードリスト

株価を抽出する銘柄コードのリストを取得しました。
次に、日本株のデータを取得できる金融ポータルサイトStooqでpandas_datareaderを使い株価を取得します。

import pandas_datareader.data as pdr
import datetime as dt

dfs = []
for code in df_EPS_codes:
    df = pdr.DataReader(code, "stooq")
    df = df[(df.index >= dt.datetime(2023, 3, 1)) & (df.index <= dt.datetime(2023, 3, 31))]
    dfs.append(df)


抽出した株価

6.平均株価算出

次はPER算出の為に、抽出した株価の平均を求めて行きます。

# 銘柄毎の株価終値の平均値算出
averages = []
for df, code in zip(dfs, df_EPS_codes):
    close_mean = df["Close"].mean()
    row = {"コード": code, "平均終値株価": close_mean}
    averages.append(row)

df_averages = pd.DataFrame(averages)
df_averages


平均終値株価

平均終値株価も計算できました。
続いて、P/Lデータに平均終値株価を表示しPERを計算したいので、下準備を行います。
結合させるキーワードを“銘柄コード”+”.jp”とし揃えます。

Gtop_10["コード"] = Gtop_10["コード"].astype(str) + ".jp"
Gtop_10


“銘柄コード”+”.jp”
#トップ10と平均終値株価のデータフレームを結合
df_PER = pd.merge(Gtop_10, df_averages, on="コード")
df_PER


平均終値株価merge

7.PER算出

最後に、算出した平均終値株価とEPSを使ってPER算出を行います。
★PER 株価収益率
計算式 株価 ÷ 一株当たり当期純利益(EPS) 単位:倍
株価が一株当たりの利益の何倍になっているかを示す。低い程、割安。

# PER算出
df_PER["PER"] = df_PER["平均終値株価"] / df_PER["EPS"]
df_PER = df_PER.sort_values(by=["PER"], ascending=True)
df_PER
PER算出

無事、算出できました。
今回の栄えある割安ナンバー1、銘柄コード「5834 SBIリーシングサービス」は、航空機・船舶などの実物資産を投資対象とした、日本型オペレーティングリース商品を組成し、提供している企業とのこと。オペレーティングリースもオンバラ!!なんて記事を最近見掛けて「仕訳めんどくさいやーん!!」なんて感じていた私は、この企業はどうやって儲けているのか気になりました。

8.おわりに

ほかの市場や業種毎に抽出して比較してみても、面白そうです。次はPBR算出にチャレンジして、雑誌などの情報ばかりに頼らず、少しでも自分の頭で理解して銘柄を選べるようになりたい!!そんな思いを胸に、株×pythonの修行に励みたいと思います。駆出者の、拙い内容にお付き合い下さり、ありがとうございました。

この記事が気に入ったらサポートをしてみませんか?