【高配当株投資】Pythonで優良な高配当銘柄をスクリーニング

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

高配当株投資とは、配当金を得るために配当利回りの高い株式に投資をする手法です。

配当金は完全な不労所得なので、安定的なキャッシュフローを得たい人に高配当株投資はおすすめです。

しかし、高配当株に投資する際の最大の注意点は、「高い配当金がずっと続くとは限らない」ということです。企業の業績が悪化すれば、配当金も減少したり、無配になる可能性があります。つまり、安定的に配当金を出し続ける企業を選定する必要があります。

時間と労力のかかる高配当株のスクリーニングは、プログラミングで効率的に行うことが可能です。

本記事では、Pythonで高配当株をスクリーニングする方法について解説します。

優良な高配当銘柄の条件

減配や無配になる可能性をできる限り下げるためには丁寧に銘柄を選定する必要があります。

優良な高配当銘柄を見分けるために重要な項目は以下の7つです。

  • 配当利回り
  • 1株当たりの配当金
  • 売上高
  • EPS
  • 営業利益率
  • 自己資本比率
  • 営業活動によるキャッシュフロー
  • ROE

それぞれ詳しく解説します。

配当利回り

高配当銘柄の基準となる配当利回りです。

配当金に対する税率は、20.315%(所得税・復興特別所得税15.315%、住民税5%)となります。当ブログでは、税引き後の配当利回りが3%以上となる3.9%を高配当銘柄とします。

1株当たりの配当金

「1株当たり配当金」とは、 株主に還元される1株当たりの年間の配当額のことで、高配当株投資における最も重要な指標です。

過去5年以上で減配や無配になっておらず、安定的に成長している銘柄を選定する必要があります。

売上高

「売上高」は言葉の通り、企業の売上の金額を表しています。

高配当銘柄の理想は、少しずつ右肩上がりで伸びているのが理想です。

しかし、2020年は新型コロナウイルスの影響で多くの企業が売上を落としていことが考えられます。今回は、過去3年の売上高が右肩上がりの銘柄をスクリーニングします。

EPS

「EPS」とは、「1株当たりの利益」のことであり、株式投資において最も重要な指標です。

売上高と同様に右肩上がりであることが理想です。

EPSも新型コロナウイルスの影響を考慮して、過去3年の値が右肩上がりの銘柄をスクリーニングします。

営業利益率

「営業利益率」は「売上のうち、営業利益が占める割合」のことです。企業の収益性を分析する財務指標のひとつで、本業の収益力や経営効率を把握するのに適した指標です。

10%以上が優良水準ですが、平均的な営業利益率は7%前後なので、7%でスクリーニングします。

自己資本比率

「自己資本比率」は、企業の安全性をはかる指標の1つです。一般的に、自己資本比率が高いほど財務健全性は高く、倒産のリスクは低くなります。

自己資本比率が60%を超えていれば倒産のリスクは著しく低いですが、40%以上でスクリーニングします。

営業活動によるキャッシュフロー

「営業活動によるキャッシュフロー」とは、本業でどれだけのお金を得られたのかを示しており、この数値が大きければ大きいほど、本業で稼ぐ力がある言えます。

逆に、営業CFがマイナスの場合は、事業をすればするほど、お金が社外に流出する状態(赤字運転資金が必要)になっていることを意味します。

過去3年間で毎年きっちり黒字の銘柄をスクリーニングします。

ROE

ROEは自己資本利益率という意味で、企業が自己資本に対してどれだけの利益を生み出したのかを表す指標です。

基本的に、ROEが高いほど資本をうまく使って、効率良く稼いでいる会社だといえ、反対にROEが低いほど経営効率の悪い会社だといえます。

優良企業と言われる10%以上でスクリーニングします。

高配当銘柄をスクリーニングする方法

証券コードのリストの用意

まずは、証券コードのリストを用意します。

おすすめの方法は、SBI証券の銘柄スクリーニングでCSVをダウンロードする方法です。下記の項目にチェックをして、詳細条件を設定してください。

  • 東証P
  • 東証S
  • 東証G
  • 配当利回り(3.9%以上)
  • 売上高営業利益率(10%以上)
  • 自己資本比率(40%以上)
  • ROE(10%以上)

そして、CSVダウンロードをクリックするとscreener_result.csvというファイル名のデータが手に入ります。

ダウンロードしたscreener_result.csvをPythonの作業ディレクトリに移動させておきます。

yfinanceをインストール

財務データを取得するためのPythonライブラリyfinanceをpipでインストールします。

Bash
pip install yfinance

または、PyCharmの画面下部のPythonパッケージをクリックして、yfinanceを検索、インストールをクリックして最新のバージョンを選択するとインストールできます。

高配当銘柄をスクリーニングするサンプルコード

Python
import datetime
import pandas as pd
import yfinance as yf


# 高配当銘柄のDataFrameを作成
df = pd.DataFrame(columns=['code'])
csv_df = pd.read_csv('screener_result.csv', header=None, skiprows=1, usecols=[0, 1])
df['code'] = csv_df[0]
# スクリーニングした高配当銘柄を入れるリストを作成
high_dividend_stocks = []

for i in range(len(df)):

    # 証券コードに「.T」を付けてyfinanceで情報を取得
    code = str(df.iat[i, 0]) + ".T"
    ticker_info = yf.Ticker(code)
    dividends = ticker_info.dividends

    if len(dividends) < 3:
        continue

    # 配当金の分配方法の違いを選別して、年間の配当金を計算
    dividends_index = dividends.index.values
    dividends_month_1 = int(datetime.datetime.fromtimestamp(dividends_index[-1].astype(datetime.datetime) * 1e-9).month)
    dividends_month_2 = int(datetime.datetime.fromtimestamp(dividends_index[-2].astype(datetime.datetime) * 1e-9).month)

    year_dividend = []
    if dividends_month_1 != dividends_month_2 and len(dividends) >= 10:
        if dividends_month_1 == 3 or dividends_month_1 == 5 or dividends_month_1 == 12:
            for j in range(1, 11, 2):
                year_dividend.append(dividends.iat[j * -1] + dividends.iat[(j + 1) * -1])

        elif dividends_month_1 == 6 or dividends_month_1 == 9 or dividends_month_1 == 11:
            for j in range(2, 12, 2):
                year_dividend.append(dividends.iat[j * -1] + dividends.iat[(j + 1) * -1])

    elif len(dividends) >= 5:
        for j in range(1, 6):
            year_dividend.append(dividends.iat[j * -1])

    else:
        continue

    # 各種指標を代入
    financials = ticker_info.financials
    total_revenue = financials.loc['Total Revenue']
    diluted_eps = financials.loc['Diluted EPS']
    cash_flow = ticker_info.cash_flow
    operating_cash_flow = cash_flow.loc['Operating Cash Flow']

    # 条件で選別
    if year_dividend[0] >= year_dividend[1] >= year_dividend[2] >= year_dividend[3] >= year_dividend[4]:
        if total_revenue.iat[0] >= total_revenue.iat[1] >= total_revenue.iat[2]:
            if diluted_eps.iat[0] >= diluted_eps.iat[1] >= diluted_eps.iat[2]:
                if operating_cash_flow.iat[0] > 0 and operating_cash_flow.iat[1] > 0 and operating_cash_flow.iat[2] > 0:
                    high_dividend_stocks.append(str(df.iat[i, 0]))

print(high_dividend_stocks)

上記を実行すると、次の2銘柄が出力されました。

TeX
['5105', '8908']

出力された銘柄を株探などで確認をして、実際に購入するかどうかの最終判断をしてください。

次にポイントなるところの解説です。

ポイントの解説

yfinanceで財務データを取得

Python
    # 証券コードに「.T」を付けてyfinanceで情報を取得
    code = str(df.iat[i, 0]) + ".T"
    ticker_info = yf.Ticker(code)
    dividends = ticker_info.dividends

yfinanceで財務データを取得します。

yfinanceで日本株の財務データを取得する場合は、末尾に「.T」を付ける必要があります。

yf.Ticker(code)で銘柄のデータを取得できます。取得できる主なデータは次のものです。

  • actions( 配当金 / 株式分割 の確定日 )
  • balance sheet(貸借対照表)
  • quarterly_balance_sheet(四半期貸借対照表)
  • cash_flow(キャッシュフロー)
  • quarterly_cash_flow(四半期キャッシュフロー)
  • dividends(配当金)
  • earnings dates( 予想EPS、実績EPS )
  • financials( 財務諸表 )
  • quarterly_financials( 四半期財務諸表 )
  • holders( 株主保有割合 )
  • news( 企業の関連ニュース )

配当金の分配方法の違いを選別して年間の配当金を計算

Python
    # 配当金の分配方法の違いを選別して、年間の配当金を計算
    dividends_index = dividends.index.values
    dividends_month_1 = int(datetime.datetime.fromtimestamp(dividends_index[-1].astype(datetime.datetime) * 1e-9).month)
    dividends_month_2 = int(datetime.datetime.fromtimestamp(dividends_index[-2].astype(datetime.datetime) * 1e-9).month)

    year_dividend = []

    if dividends_month_1 != dividends_month_2 and len(dividends) >= 10:
        if dividends_month_1 == 3 or dividends_month_1 == 5 or dividends_month_1 == 12:
            for j in range(1, 11, 2):
                year_dividend.append(dividends.iat[j * -1] + dividends.iat[(j + 1) * -1])

        elif dividends_month_1 == 6 or dividends_month_1 == 9 or dividends_month_1 == 11:
            for j in range(2, 12, 2):
                year_dividend.append(dividends.iat[j * -1] + dividends.iat[(j + 1) * -1])

    elif len(dividends) >= 5:
        for j in range(1, 6):
            year_dividend.append(dividends.iat[j * -1])

    else:
        continue

yfinanceで取得できる配当金のデータはdividendsに格納されていますが、半年ごとであったり年間であったりします。また、配当月も違う場合もあるので、このあたりは工夫する必要があります。

まず、配当金が年に1回か2回かを配当月の違いで分けます。次に最後の配当金が今期のものか、前期のものかも配当月の違いで分けています。年間通してこの条件で正常に動作するかわからないところがあるので、不具合があった場合は修正します。

そして、年間の配当金をyear_dividendのリストに追加していきます。

各種指標を代入

Python
# 各種指標を代入
    financials = ticker_info.financials
    total_revenue = financials.loc['Total Revenue']
    diluted_eps = financials.loc['Diluted EPS']
    cash_flow = ticker_info.cash_flow
    operating_cash_flow = cash_flow.loc['Operating Cash Flow']

高配当銘柄の選別に必要な指標をそれぞれ代入します。

必要な指標は、売上高とEPS、営業活動によるキャッシュフローです。

条件で選別

Python
# 条件で選別
    if year_dividend[0] >= year_dividend[1] >= year_dividend[2] >= year_dividend[3] >= year_dividend[4]:
        if total_revenue.iat[0] >= total_revenue.iat[1] >= total_revenue.iat[2]:
            if diluted_eps.iat[0] >= diluted_eps.iat[1] >= diluted_eps.iat[2]:
                if operating_cash_flow.iat[0] > 0 and operating_cash_flow.iat[1] > 0 and operating_cash_flow.iat[2] > 0:
                    high_dividend_stocks.append(str(df.iat[i, 0]))

上記で用意した指標を元に高配当銘柄を選別します。

配当金は、過去5年で減配していないかを比較しています。

売上高とEPSは、過去3年で上昇しているかを比較しています。

営業活動によるキャッシュフローは、過去3年でマイナスになっていないかをチェックしています。

おわりに

高配当株投資は、安定した収入を求める投資家にとって非常に魅力的な選択肢ですが、適切な銘柄を選定する必要があります。

手間暇のかかる高配当銘柄のスクリーニングは、プログラミングの勉強をして効率的に行いましょう。

高配当株投資は分散も大切です。今回のスクリーニングで高配当銘柄に該当したのは2銘柄のみだったので、少し条件を緩めてもいいかもしれません。

以上、投資のリスクを十分に理解したうえで、慎重な投資判断を行うことで、高配当株投資のメリットを最大限に活用しましょう。