【Python】株価の割安度を自動判定!バリュー投資を効率化する分析コードを紹介

  • URLをコピーしました!

「いい株を安く買いたい」と願う投資家にとって、数千もの銘柄からお宝を探し出す作業は気の遠くなるような時間が必要です。毎日仕事が終わったあとに、一社ずつ決算書を読み、指標を計算するのは現実的ではありません。

そんな時に味方につけたいのがPython(パイソン)です。プログラミングと聞くと身構えてしまうかもしれませんが、実は数行のコードを書くだけで、あなたの代わりにコンピューターが全銘柄をチェックしてくれます。この記事では、バリュー投資の判断を自動化し、効率的に割安株を見つけ出すための具体的なステップを解説します。

目次

なぜPythonで株の割安度を調べるのか?

株価の分析にPythonを導入する最大の理由は、圧倒的なスピードと客観性にあります。人間の手作業ではどうしても主観が入ったり、チェック漏れが発生したりしますが、プログラムはあらかじめ決めたルールに従って、淡々と正確に計算をこなしてくれます。

この章では、Pythonを活用することで投資のスタイルがどう変わるのか、その具体的なメリットについてお伝えします。単なる時短ツールとしてだけでなく、感情に左右されない投資判断を下すための強力な相棒になるはずです。以下の3つのポイントから、その必要性を探っていきましょう。

膨大な銘柄から一瞬で候補を絞り込める

日本国内だけでも上場企業は約3,800社以上存在します。これらすべてを毎日チェックして、割安なタイミングを見逃さないようにするのは不可能です。

Pythonを使えば、全銘柄のPER(株価収益率)やPBR(株価純資産倍率)といった指標を数秒から数分でスキャンできます。例えば、「PER10倍以下かつ配当利回り4%以上」という条件を指定するだけで、数千の中から数十銘柄へと即座に絞り込めます。

手作業では数日かかる作業が、カップラーメンができあがるよりも早く終わるのです。浮いた時間を企業のビジネスモデルを深掘りする時間や、ゆっくり休む時間に充てられるのは大きな強みです。

自分の投資基準を正確に反映できる

証券会社のスクリーニングツールも便利ですが、あらかじめ用意された項目しか選べないという不自由さがあります。Pythonなら、自分だけの「こだわりの条件」を自由に組み込めます。

例えば、「過去3年間の利益成長率が5%以上で、なおかつ今の株価が過去の平均PERよりも20%以上安いとき」といった複雑な条件も、コードを少し書き換えるだけで実現できます。

自分なりの勝ち筋をプログラムに落とし込むことで、他人の推奨銘柄に振り回されることなく、一貫性のある投資ができるようになります。ただし、条件を厳しくしすぎると候補がゼロになることもあるため、まずはゆるい条件から試して調整していくのがコツです。

分析作業を自動化して判断に集中できる

投資で一番大切なのは「買うか買わないか」の決断です。しかし、その前段階であるデータ収集や計算に疲れ切ってしまい、肝心の判断を誤ってしまっては本末転倒です。

Pythonによる自動化は、こうした「作業」をすべて肩代わりしてくれます。一度コードを書いてしまえば、翌日からはボタン一つで最新の割安銘柄リストが手に入ります。

以下の表に、手作業とPython分析の違いをまとめました。

項目手作業(ブラウザ等)Pythonによる自動判定
分析スピード1銘柄数分〜数千銘柄を数分で一括
客観性感情や疲れに左右されるルール通りで常に一定
カスタマイズ性既存ツールの範囲内無限に拡張可能
再現性同じ作業の繰り返しが必要コードを実行するだけ

このように、単純作業を卒業して「考える時間」を増やすことが、投資の成績を上げる近道になります。

株価の割安度を判定する4つの主要指標

割安株を探すといっても、何を基準に「安い」と判断すればいいのでしょうか。バリュー投資には、世界中の投資家が共通して使っている「物差し」がいくつかあります。

まずは、コードを書く前に知っておくべき4つの基本指標を整理しましょう。これらはプログラムで取得するデータの核となる部分です。それぞれの指標が何を表しているのか、そして目安となる数値はどれくらいなのかを把握することが、精度の高い分析ツールを作る第一歩となります。

PERで収益性から見た割安さを測る

PER(株価収益率)は、その企業が稼ぐ利益に対して、今の株価が何倍まで買われているかを示す指標です。一般的には15倍を下回ると割安と言われることが多いです。

例えば、利益が成長しているのに株価が変わっていない銘柄は、PERが下がっていきます。これは「本来の稼ぐ力に対して、市場の評価が追いついていないお買い得な状態」かもしれません。

一方で、将来の利益が減ると予想されている場合もPERは低く出ることがあります。数字だけを見て「低いから買いだ」と飛びつくのではなく、なぜ低いのかという背景までセットで考える癖をつけましょう。

PBRで資産価値から見た底値をチェックする

PBR(株価純資産倍率)は、会社が持っている純資産に対して株価が何倍かを表します。理論上、1倍を下回ると「会社を解散して資産を分けた方が、今の株価より価値が高い」という状態になります。

最近では東京証券取引所が「PBR1倍割れ」の企業に対して改善を求めているため、1倍を下回っている銘柄は株価対策が期待される熱い分野でもあります。

ただし、万年赤字の会社などは資産が目減りしていく心配があるため、単に1倍以下なら安心というわけではありません。後述するROEなどと組み合わせて、資産をしっかり活用できているかを確認するのが賢明なやり方です。

配当利回りで投資の還元効率を確かめる

配当利回りは、株価に対して年間でどれくらいの配当金がもらえるかを示す割合です。バリュー投資家にとって、株価が安い時に高い利回りを確保しておくことは、将来の強力な武器になります。

一般的には3.5%〜4%を超えてくると高配当とみなされます。株価が下がれば利回りは上がるため、優良企業が一時的なニュースで売られた時は、配当利回りが跳ね上がる絶好のチャンスとなります。

ただし、無理をして配当を出している(配当性向が高すぎる)企業は、将来減配するリスクもあります。安定して配当を出せる余裕があるか、利益の推移も合わせてチェックすることが欠かせません。

ROEで経営の効率性もセットで分析する

ROE(自己資本利益率)は、株主から預かったお金を使って、どれだけ効率よく利益を出したかを示す指標です。これが高いほど「稼ぐのが上手な会社」と言えます。

どれだけPERやPBRが低くても、ROEが極端に低い会社は「お金を寝かせているだけ」と判断され、いつまで経っても株価が上がらないことが多いです。目安としては8%〜10%以上あることが望ましいとされています。

バリュー投資のコツは、単に安い株を探すのではなく「安くて、かつ稼ぐ力もある株」を探すことです。

以下のリストに、理想的なバリュー株の条件をまとめました。

  • PERが15倍以下(または業界平均以下)
  • PBRが1倍を下回っている
  • 配当利回りが3.5%以上ある
  • ROEが8%以上で効率よく稼いでいる

これらすべてを満たす銘柄を見つけるのは簡単ではありませんが、Pythonを使えばその砂金探しが驚くほど楽になります。

Pythonで分析を始めるための準備

指標を理解したら、いよいよPythonを動かす準備に入ります。「パソコンに詳しい設定をしないといけないのでは?」と心配になるかもしれませんが、今の時代はブラウザひとつあれば十分です。

ここでは、環境構築のストレスなく、今日からコードを書き始めるための具体的な手順を説明します。難しい専門用語は使わずに進めるので、ひとつずつ設定を済ませていきましょう。

ライブラリ「yfinance」をインストールしよう

株価データを取得するために、世界中の開発者が利用している「yfinance(ワイファイナンス)」という道具を使います。これを使うだけで、Yahoo Financeにある膨大なデータを自由に引き出せるようになります。

使い方はとてもシンプルで、以下の1行をプログラムの最初の方に書くだけで準備が整います。

!pip install yfinance

このコマンドを実行すると、インターネット経由でデータ取得用のプログラムがあなたの環境に取り込まれます。これだけで、一社ずつの株価をメモする苦労から解放されるのです。

日本株(東証)を扱うためのコードの書き方

Pythonで日本株のデータを指定するときには、少しだけルールがあります。証券コードのあとに「.T」をつける必要があります。

例えば、トヨタ自動車なら「7203」ではなく「7203.T」と書きます。この「.T」は東京証券取引所(Tokyo)を意味しています。

  • ソフトバンクグループ:9984.T
  • 三菱UFJフィナンシャルG:8306.T
  • 任天堂:7974.T

このように、普段使っている4桁の数字を少し加工するだけで、すぐに日本株の分析をスタートできます。米国株の場合は「AAPL(アップル)」や「TSLA(テスラ)」のように、そのままのシンボルで大丈夫です。

Google Colabで実行環境を整える方法

自分のパソコンを汚さずにPythonを動かすなら、Googleが提供している「Google Colab(グーグル・コラボ)」が一番の選択肢です。Googleアカウントがあれば無料で使えます。

使い方は、ブラウザでGoogle Colabを検索して開き、「ノートブックを新規作成」をクリックするだけです。そこにコードを貼り付けて再生ボタンを押せば、すぐに結果が表示されます。

計算はすべてGoogleのサーバー上で行われるため、スマホやスペックの低いパソコンからでもサクサク動きます。設定に時間をかけるよりも、まずは動かして結果を見る喜びを味わってみてください。

1銘柄の割安度を自動判定するコード

準備ができたら、まずは特定の1銘柄が自分の基準を満たしているか判定するコードを書いてみましょう。最初から欲張らずに、ひとつの銘柄で成功体験を積むことが大切です。

ここでは、実際にデータを取得し、「割安かどうか」をプログラムに判断させる具体的な流れを解説します。

特定の銘柄から財務情報を取得しよう

まずは、yfinanceを使って企業の指標(PERやPBRなど)を抜き出してみましょう。以下のコードをコピーして実行してみてください。

import yfinance as yf

# 調査したい銘柄を指定(例:三菱UFJフィナンシャルG)
ticker_symbol = "8306.T"
stock = yf.Ticker(ticker_symbol)

# 財務データを一括取得
info = stock.info

# 必要な指標だけを取り出す
per = info.get('trailingPE')
pbr = info.get('priceToBook')
dividend_yield = info.get('dividendYield')

print(f"PER: {per}")
print(f"PBR: {pbr}")
print(f"配当利回り: {dividend_yield}")

これだけで、最新の財務数値が画面に表示されます。証券会社のサイトを何ページもクリックして探す手間が、一気に解消される瞬間です。

取得できない項目がある場合は「None」と表示されますが、これは企業がそのデータを開示していないか、特殊な状況にあることを意味します。そんな時は無理に追いかけず、次の銘柄へ進むのが自動化のコツです。

判定ロジックをコードに落とし込む

取得した数字を見て、人間が「えーっと、15倍以下かな?」と考えるのは非効率です。この判断もプログラムに任せてしまいましょう。

「もし(if)〜なら」という構文を使えば、自動で合格・不合格を判定してくれます。

# 割安判定の基準を設定
is_cheap_per = per is not None and per < 15
is_cheap_pbr = pbr is not None and pbr < 1.0

if is_cheap_per and is_cheap_pbr:
    result = "合格!割安な可能性があります"
else:
    result = "基準に達していません"

print(result)

こうすることで、感情に左右されずに「今の株価は自分のルールに合っているか」を突きつけられます。「好きな会社だから買いたい」というバイアスを、冷徹な数字がブロックしてくれるわけです。

ただし、このコードはあくまで「今の瞬間」を切り取ったものです。昨日の決算発表で状況が激変している場合もあるので、判定が出た後は最新のニュースもチェックするようにしましょう。

実際に判定結果を出力してみる

最後に、ここまでの流れをひとつにまとめて、誰が見ても分かりやすい形式で出力しましょう。投資仲間と結果を共有する際にも便利です。

以下のリストは、判定結果を確認する際に見落としがちなポイントです。

  • PERが異常に低い(1倍など)場合は、一時的な特別利益がないか確認
  • PBRが低すぎる場合は、会社が倒産する不安を持たれていないか確認
  • 配当利回りが高すぎる場合は、株価が暴落中ではないか確認

プログラムは数字の背景までは読んでくれません。判定結果は「詳しく調べるための招待状」だと考えておくと、大きな失敗を避けられます。

複数の候補から割安株を一括で抽出する方法

1銘柄の判定ができるようになったら、いよいよ本領発揮です。複数の気になる銘柄をリストにして、上から順に自動でスキャンしていく「スクリーニング機能」を実装しましょう。

これで、あなたの投資効率は劇的に向上します。休日に何時間もかけて行っていた銘柄選びが、数分の待ち時間に変わる快感をぜひ体験してください。

調査したい銘柄コードをリスト化する

まずは、自分が気になっている銘柄や、東証プライムの主力銘柄などをリストの形で用意します。

# 気になる銘柄をリストにする
target_stocks = ["7203.T", "8306.T", "9432.T", "8058.T", "7974.T"]

このように、カンマで区切って並べるだけで準備完了です。将来的には、このリスト自体を別の場所(Excelやネット上のリスト)から読み込むように拡張することもできます。

最初は5〜10銘柄程度で試し、慣れてきたら徐々に数を増やしていきましょう。あまりに多すぎるとデータの取得に時間がかかったり、途中で止まってしまったりすることもあるので、100銘柄単位で区切るのがおすすめです。

ループ処理で効率的にスクリーニングしよう

次に、用意したリストを「ぐるぐる回して」順番に判定していくコードを書きます。これをPythonでは「forループ」と呼びます。

results_list = []

for symbol in target_stocks:
    stock = yf.Ticker(symbol)
    info = stock.info
    
    # データを取得
    per = info.get('trailingPE')
    pbr = info.get('priceToBook')
    
    # 条件判定
    if per and per < 15 and pbr and pbr < 1.0:
        print(f"見つけました! {symbol} は割安基準クリアです")
        results_list.append(info)

このコードが動くと、画面に次々と判定結果が流れていきます。まるで自分専属の分析官が、猛スピードで報告書を作成してくれているような感覚になるはずです。

もし途中でエラーが出て止まってしまった場合は、その銘柄をリストから外すか、「try-except(トライ・エクセプト)」というエラー回避の書き方を追加することで、最後まで完走させることができます。

Pandasで分析結果を一覧表にする

合格した銘柄が複数見つかったとき、バラバラに表示されると見にくいですよね。そこで「Pandas(パンダス)」というライブラリを使って、きれいな表にまとめましょう。

import pandas as pd

# 表形式に変換
df = pd.DataFrame(results_list)

# 必要な列だけを並べる
final_table = df[['symbol', 'shortName', 'trailingPE', 'priceToBook', 'dividendYield']]
print(final_table)

こうすることで、どの銘柄が一番割安なのかを横並びで比較できます。表にすると、自分の基準を大幅にクリアしている「超お宝銘柄」が浮き彫りになります。

以下のテーブルは、スクリーニングで抽出された結果のイメージです。

シンボル社名PERPBR利回り
8306.T三菱UFJ12.50.853.8%
8058.T三菱商事10.20.954.2%
9432.TNTT11.81.103.5%

このように整理されると、次に行うべき「深掘り調査」の対象が絞り込めるので、非常に効率的です。

失敗を防ぐ!「割安の罠」を見抜く条件設定

バリュー投資で最も恐ろしいのが、割安に見えるだけで実は業績がボロボロな「割安の罠(バリュー・トラップ)」にかかることです。数字だけを追いかけていると、この罠にハマりやすくなります。

せっかくPythonを使うのですから、単なる安さだけでなく「企業の質の高さ」も同時にチェックする仕組みを組み込みましょう。ここでは、罠を回避するための3つの防衛策をコードに加えるアイデアを紹介します。

業績が右肩下がりでないか確認する

株価が安い原因が「将来の利益が減るから」であれば、それは割安ではなく、妥当な下落かもしれません。

Pythonなら、今期だけでなく過去数年の利益の推移も取得できます。少なくとも「利益が3年以上増え続けている」という条件を加えることで、衰退している企業をリストから除外できます。

「安いから買う」のではなく「成長しているのに評価されていないから買う」という姿勢を崩さないことが、バリュー投資を成功させる秘訣です。

自己資本比率で財務の健全性を担保する

どれだけ利益が出ていても、借金まみれで明日倒産するかもしれない会社に投資するのは危険です。

yfinanceでは「debtToEquity(負債資本比率)」などの財務健全性の指標も取得できます。自己資本比率が低すぎる銘柄をあらかじめフィルター(除外)しておくことで、予期せぬ倒産リスクを減らせます。

バリュー投資は長期戦になることが多いです。腰を据えて運用を楽しむためにも、倒れないだけの「体力」がある会社を選ぶことは譲れない条件になります。

ROEをフィルターに加えて質を高める

前述した通り、資産を効率よく使えていない会社は、万年割安のまま放置されることが多いです。

そこで、スクリーニングの条件に「ROEが8%以上」といった項目を追加してみましょう。これだけで、リストに残る銘柄の質が一段と高まります。

「安い株」から「良いのに安い株」へとターゲットを絞り込むことで、株価が本来の価値に見直される(リバリュエーション)の可能性がぐっと高まります。

罠を避けるためのチェックリストを以下に用意しました。

  • 利益が過去3年でマイナスになっていないか
  • 自己資本比率は40%以上あるか(業種にもよります)
  • ROEが極端に低くないか
  • 配当を出しすぎていて、利益以上に配当を払っていないか

これらをコードに1行加えるだけで、あなたの分析ツールの信頼性はプロレベルに近づきます。

抽出した銘柄リストをExcelへ出力して管理する

せっかく見つけたお宝候補も、プログラムを閉じた瞬間に消えてしまってはもったいないですよね。分析した結果は、使い慣れたExcelやCSV形式で保存して、いつでも見返せるようにしましょう。

ここでは、Pythonで作成したデータをファイルとして書き出す方法を解説します。自分だけの「最強の銘柄リスト」を育てていく感覚で取り組んでみてください。

データフレームをCSV形式で保存しよう

Pandasを使えば、表形式のデータを保存するのはとても簡単です。以下の1行を書くだけで、その瞬間のデータが「ranking.csv」というファイルになります。

df.to_csv('screening_results.csv', index=False)

このコマンドを実行すると、Google Colabの左側のフォルダマークの中にファイルが現れます。それをダウンロードすれば、あとは自由にExcelで開いて編集できます。

ネットが繋がらない場所でも、じっくりと銘柄を比較検討できるので便利です。また、保存した日付をファイル名に入れておけば、過去との比較もできるようになります。

Excelで開けるように文字化け対策を行う

日本語の社名を含んだCSVをExcelで開くと、文字化けして読めないことがあります。これは「エンコーディング」という文字の書き込み形式の違いが原因です。

これを防ぐためには、以下のように書き換えます。

df.to_csv('screening_results.csv', index=False, encoding='utf-8-sig')

この「utf-8-sig」という魔法の言葉を付け加えるだけで、Excelが「あ、これは日本語のデータだな」と正しく認識してくれるようになります。

小さなことですが、こうした細かい部分を整えておくことで、日々の分析作業がストレスなく続けられるようになります。

定期的に実行して自分だけのリストを作る

株価は毎日動きます。週に一度、あるいは決算シーズンが終わるたびにこのプログラムを走らせてみましょう。

「以前はリストになかった有名企業が、急落してリストに入ってきた!」といった変化に気づけるようになります。これが、自動判定ツールの醍醐味です。

以下の表に、定期的な管理のタイミングをまとめました。

タイミングやることメリット
毎週末全体のスクリーニング実行新しく割安になった銘柄を発見できる
決算発表後財務指標の再計算最新の利益に基づいた正しい判定ができる
市場の暴落時監視リストのチェック欲しかった株が「買い」の基準に入ったか即座にわかる

こうして自分だけのデータを蓄積していくことで、周りのノイズに惑わされない、芯の通った投資家へと成長していくことができます。

さらに効率を高めるための分析アイデア

ここまで紹介した内容だけでも十分強力ですが、Pythonの可能性はまだまだ広がります。基本のコードをベースに、さらに一歩進んだ分析を組み込むためのアイデアをいくつか紹介します。

これらは少し難易度が上がりますが、実現できればプロの投資家が使っているシステムにも引けを取らないツールになります。

過去の平均PERと比較して割安度を深掘りする

今のPERが10倍だとしても、その銘柄にとって「10倍」が通常運転であれば、それは割安とは言えません。

過去5年間の平均PERを取得し、「今のPERが過去の平均よりも低いかどうか」を判定するロジックを組み込んでみましょう。これにより、「その銘柄自体の歴史的な割安感」を正確に測れるようになります。

周りの企業と比較する「横の比較」だけでなく、過去の自分と比較する「縦の比較」を行うことで、分析の深みが一気に増します。

業界ごとの平均値と比較して優位性を探る

銀行業ならPER10倍は珍しくありませんが、IT企業で10倍ならかなりの割安です。このように、指標の目安は業種によって大きく異なります。

Pythonを使えば、業種(セクター)ごとの平均値を算出し、その平均よりも優れている銘柄だけを抜き出すといった芸当も可能です。

「銀行株の中から特に割安なもの」や「食品株の中で配当がトップクラスなもの」といった、よりピンポイントな狙い撃ちができるようになります。

ニュースサイトの更新と連携させて自動通知する

分析結果を自分から見に行くのではなく、向こうから知らせてくれるように設定することもできます。

例えば、LINEやSlackなどのチャットツールと連携させれば、「条件を満たす銘柄が見つかった瞬間にスマホに通知が届く」といった仕組みも作れます。

仕事中であっても、チャンスが来たときだけサッと確認できる。そんな「攻めの自動化」こそが、忙しい現代の個人投資家が目指すべき理想の形と言えるでしょう。

まとめ:Pythonで納得のいく資産運用を

この記事では、Pythonを使って株価の割安度を自動判定し、バリュー投資を効率化する方法を解説してきました。

  • Pythonとyfinance を組み合わせることで、数千銘柄のスクリーニングが一瞬で終わる
  • PER・PBR・配当利回り・ROE の4つを軸に、自分だけの割安基準を定義できる
  • 「割安の罠」を避けるための条件 を加えることで、投資の質をプロレベルに高められる
  • Excel出力 を活用すれば、日々の分析結果を資産として蓄積できる

プログラミングは魔法ではありませんが、あなたの「目」と「手」を無限に増やしてくれる最高の道具です。まずは気になる1銘柄のPERを取得することから始めてみてください。その数行のコードが、数年後のあなたの資産を大きく変えるきっかけになるかもしれません。

納得感のあるデータに基づいた投資判断を、Pythonと共にスタートさせましょう。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

目次