「株を始めたいけれど、どの銘柄を選べばいいか分からない」「雑誌やSNSでおすすめされている銘柄を買って、いつも損をしてしまう」……。そんな悩みを抱えている投資家は多いはずです。
それもそのはず、日本市場だけでも約4,000近い銘柄が存在します。これらすべてを個別にチェックするのは、プロでも至難の業です。しかし、Pythonとyfinanceという無料の道具を使えば、あなたの代わりにコンピューターが全銘柄をスキャンし、理想の株を自動で見つけ出してくれます。この記事では、勘に頼らない「データ主導の銘柄選び」を実現する具体的な手順を解説します。
なぜデータによる銘柄選びが必要なのか?
投資で最も避けたいのは、その場の感情や雰囲気で大切なお金を投じてしまうことです。データを使って銘柄を選ぶことは、単なる効率化以上のメリットをあなたにもたらします。
この章では、データに基づいたスクリーニングがなぜ投資の勝率を底上げするのか、その具体的な理由を3つの視点から整理します。まずは、データが持つ「客観性の力」を理解しましょう。
感情やニュースに流されない投資判断ができる
株価が急落したとき、多くの人は恐怖を感じて売ってしまいます。逆に急騰しているときは、乗り遅れたくない一心で高値掴みをしてしまいがちです。
データによる分析を導入すれば、「企業の稼ぐ力(利益)に対して、今の株価は明らかに割安だ」といった客観的な事実に基づいて行動できます。例えば、SNSで誰かが煽っている銘柄でも、数字を見て「配当利回りが低すぎる」と分かれば、冷静に見送る判断が下せます。
確かに、データには企業の将来性や経営者の資質といった「数字に表れない情報」は含まれません。しかし、まずは数字で最低限の合格ラインを引くことで、感情に任せた無謀なトレードを劇的に減らせます。
数千の銘柄から条件に合う株を数分で見つけ出す
日本市場には約3,900社の企業が上場しています。これらを一軒ずつ四季報で調べるには、膨大な時間と根気が必要です。
Pythonを使った自動抽出なら、「PBRが1倍割れ」「配当利回りが4%以上」「自己資本比率が50%以上」といった複数の条件を組み合わせ、全銘柄を数分でスキャンできます。人間が1ヶ月かかる作業を、コンピューターはコーヒーを淹れている間に終わらせてくれるのです。
このスピード感があれば、チャンスが訪れた瞬間に理想の銘柄をリストアップできます。浮いた時間は、絞り込んだ後の「より深い企業分析」に充てることができ、投資の質がさらに高まります。
証券会社のツールでは不可能な独自の指標を作れる
多くの証券会社が提供しているスクリーニングツールは便利ですが、あらかじめ用意された項目しか選べないという制約があります。
Pythonを使えば、「3年間の売上成長率が平均10%以上で、かつ今の株価が過去5年間の平均PERを下回っている銘柄」といった、あなた独自の計算式による抽出が可能です。
- 複数の財務指標を掛け合わせた独自のスコアリング
- 過去の株価推移と財務指標の相関チェック
- 業種ごとの平均値と比較した上での割安判定
自分だけの「理想の株の定義」をコードに落とし込むことで、他の投資家が見落としている「お宝銘柄」を先回りして見つけることが可能になります。
Pythonとyfinanceで分析環境を整える
銘柄の自動抽出を始めるには、まずPythonを使える環境にする必要があります。難しい設定は一切不要で、すべて無料で揃えることができます。
ここでは、初心者でも迷わずに作業を開始できるよう、最短で環境を構築する手順を紹介します。まずは、以下の手順に沿って準備を進めてください。
必要なライブラリをインストールしよう
Pythonそのものには株価を取得する機能はありません。そこで、世界中の金融データを取得できる「yfinance」と、データを整理するための「pandas」という追加の道具(ライブラリ)を使います。
PCのターミナルやコマンドプロンプトで、以下のコマンドを入力してください。
pip install yfinance pandas
これだけで、プロも使うデータ分析環境の土台が完成します。ライブラリは、いわばPythonに新しい知識を教える「教科書」のようなものです。これを入れることで、Pythonは株価の扱い方を理解できるようになります。
日本株を扱うための銘柄コードのルール
yfinanceは米国発のライブラリであるため、日本株を指定する際には少し工夫が必要です。具体的には、4桁の銘柄コードの後に「.T(東京証券取引所)」を付け加えます。
例えば、トヨタ自動車(7203)なら「7203.T」、ソニーグループ(6758)なら「6758.T」と記述します。
| 銘柄名 | 通常コード | yfinance用コード |
| トヨタ自動車 | 7203 | 7203.T |
| 任天堂 | 7974 | 7974.T |
| ソフトバンクグループ | 9984 | 9984.T |
このルールを間違えると、データが見つからないというエラーが出てしまいます。自動化する際は、コードに「.T」を自動で連結するようにプログラムしておくと非常にスムーズです。
初心者におすすめのGoogle Colabで始める手順
「自分のPCにPythonを入れるのが不安」という方は、Googleが無料で提供している「Google Colab(コラボ)」を使いましょう。ブラウザさえあれば、すぐにPythonのコードを実行できます。
Googleアカウントでログインし、新しいノートブックを作成するだけで準備完了です。Colabはクラウド上で動くため、あなたのPCの性能に関わらず高速に処理が進みます。
環境構築でつまづいて挫折するのは非常にもったいないことです。まずはColabを使って、「コードを書いて動く」という体験を最優先にすることをおすすめします。
yfinanceで株の財務情報を取得する
環境が整ったら、実際に特定の銘柄の情報を取得してみましょう。yfinanceの「info」という機能を使えば、その企業の現在の健康状態を示す数値が丸裸になります。
この章では、銘柄選びの鍵となる財務データを抜き出す具体的なコードを紹介します。まずは1つの銘柄で、どんな数字が取れるのかを以下の表で確認してください。
| 取得したい項目 | infoの中のキーワード | 意味 |
| PER(株価収益率) | trailingPE | 株価が利益の何倍か(割安性の指標) |
| PBR(株価純資産倍率) | priceToBook | 株価が資産の何倍か(1倍割れは割安) |
| 配当利回り | dividendYield | 株価に対する年間配当の割合 |
| 自己資本比率 | debtToEquity | 企業の財務的な安定性 |
PERやPBRを瞬時に抜き出すコード
まずは、トヨタ自動車(7203.T)を例に、割安性を測るPERとPBRを取得してみましょう。驚くほど短いコードで実現できます。
import yfinance as yf
# 銘柄を指定
ticker = yf.Ticker("7203.T")
# 財務情報を取得
info = ticker.info
# 特定の項目を表示
print(f"PER: {info.get('trailingPE')}")
print(f"PBR: {info.get('priceToBook')}")
このように「get」を使うことで、もしデータが存在しない場合でもプログラムが止まらずに、安全に数値を読み取ることができます。
配当利回りや時価総額を確認する方法
インカムゲイン(配当金)を狙う投資家にとって、利回りは最も重要な数字です。yfinanceでは、これらもリアルタイムに近い状態で取得可能です。
利回りは「0.04」といった小数で返ってくるため、100を掛けて「4%」という形に直すと分かりやすくなります。また、企業の規模を示す「時価総額(marketCap)」もあわせて確認することで、あまりに小さすぎる不安定な銘柄を避けるといった判断が可能になります。
ただし、配当を出していない企業の場合は、この項目が「None(空っぽ)」になることがあります。取得する際は「データがあるかどうか」をチェックする一文を入れるのが、コードを安定させるコツです。
取得できるデータの中身を辞書形式で見てみよう
ticker.infoを実行すると、実はPER以外にも100種類以上のデータが一度に送られてきます。これらは「辞書(Dictionary)」という形式でまとめられています。
一度、print(info)ですべての中身を表示させてみてください。業種、従業員数、売上高、現在の株価、過去の最高値など、驚くほど詳細なデータが詰まっていることが分かります。
- 業種(industry)で絞り込む
- 営業利益率(operatingMargins)で効率を見る
- 1株あたりの利益(trailingEps)の推移を追う
これらの中から自分が必要な項目だけを選び取れるようになれば、あなた独自の「最強のスクリーニング条件」が出来上がります。
理想の銘柄を自動抽出する条件を設定する
データが取れるようになったら、次はいよいよ「理想の株」の条件を決めます。ただ数字を眺めるのではなく、具体的なフィルターを設定することで、投資対象をぐっと絞り込むことができます。
ここでは、多くの投資家が重視する3つの代表的な戦略を例に、どのような条件で抽出をかけるべきかを解説します。
PBR1倍割れかつ黒字の銘柄を探す
今、市場で注目されているのが「PBR1倍割れ」の銘柄です。これは、企業の持っている資産価値よりも株価が安く放置されている、いわば「バーゲンセール」の状態を指します。
しかし、安いのには理由(赤字続きなど)がある場合も多いです。そのため、「PBRが1倍未満」という条件に加えて、「今期の利益がプラスであること」というフィルターを必ず重ねるようにしましょう。
資産価値があり、なおかつ稼ぐ力も維持している。そんな「負けにくい株」をデータで見つけ出すことが、安定運用の第一歩となります。
配当利回りが高く安定している企業を絞り込む
高配当株投資では、単に今の利回りが高いだけでなく、その配当を出し続ける余力があるかどうかが重要です。
- 配当利回りが3.5%以上
- 自己資本比率が40%以上(倒産リスクの低減)
- 配当性向が無理のない範囲(例:60%以下)
これらの条件をすべて満たす銘柄を抽出するように設定すれば、減配(配当が減ること)のリスクを抑えたポートフォリオが作れます。Pythonなら、これらの複雑な組み合わせも一瞬で判定できます。
売上高が右肩上がりの成長株を見極める
成長株(グロース株)を探すなら、売上高の成長率に注目しましょう。yfinanceでは過去数年分の財務諸表も取得できるため、「3年連続で増収増益」といった条件も設定可能です。
成長株はPERが高くなりやすいため、ここではPERの低さよりも「売上の伸び(revenueGrowth)」を重視します。
確かに成長株投資はリスクが高い面もありますが、データで「確実な成長」が裏付けられている銘柄に絞ることで、根拠のない期待感だけで投資することを防げます。
全銘柄を対象にスクリーニングを自動実行する
1つの銘柄が分析できたら、それを市場全体に広げましょう。これこそがプログラムを使う最大のメリットです。
この章では、数千ある上場企業を1つずつチェックし、条件に合うものだけをリストアップする仕組みを構築します。
JPXの公式サイトから銘柄リストを入手しよう
まず、スキャンの対象となる「全銘柄のリスト」が必要です。これは日本取引所グループ(JPX)の公式サイトで、Excel形式のファイルとして誰でも無料でダウンロードできます。
このファイルには、全ての東証上場企業の銘柄コードと業種が載っています。このリストをPythonで読み込み、上から順番にyfinanceでデータを取っていく流れになります。
リストは毎月更新されているため、最新のものを取得しておくことで、新規上場したばかりの銘柄も見逃さずにチェックできるようになります。
pandasを使ってリストを読み込みループを回す
ダウンロードしたリストを読み込むには、pandasの「read_excel」機能を使います。
import pandas as pd
import time
# 銘柄リストを読み込む
df = pd.read_excel("list_jpx.xlsx")
codes = df['コード'].tolist()
for code in codes:
symbol = str(code) + ".T"
# ここにyfinanceの取得と条件判定のコードを書く
このように「for文(ループ処理)」を使うことで、数千銘柄を1つずつ自動で処理させることができます。人間がマウスを操作する必要は一切ありません。
大量のリクエストでエラーにならないための待機時間
全銘柄をスキャンする際に、最も注意すべきなのが「取得スピード」です。コンピューターの速さに任せて1秒間に何百回もアクセスすると、Yahoo Finance側のサーバーに負荷がかかり、アクセスを遮断されてしまいます。
これを防ぐために、1銘柄のデータを取得するごとに「1秒休む」というコードを必ず入れましょう。
time.sleep(1) # 1秒間だけ待機する
「もっと早く終わらせたい」と思うかもしれませんが、アクセス制限がかかると解析自体ができなくなります。ルールを守って、優雅に自動化を進めるのが長続きのコツです。
【実践】自分だけの銘柄抽出ツールを動かそう
それでは、これまでの知識を詰め込んだ実戦的なツールを動かしてみましょう。コピペして少し調整するだけで、あなた専用のスクリーナーが誕生します。
ここでは、最も人気のある「割安な高配当株」を探すためのコード構成と、その後の活用法を提案します。
コピペで使える!割安高配当株を探す全コード
以下のコードは、リストから銘柄を読み込み、特定の条件に合うものだけを表示する骨組みです。
import yfinance as yf
import pandas as pd
import time
# 抽出された銘柄を入れるリスト
result_list = []
# 例として3つの銘柄でテスト(実際はJPXのリストを使用)
test_codes = ["7203.T", "9432.T", "8316.T"]
for symbol in test_codes:
try:
ticker = yf.Ticker(symbol)
info = ticker.info
# 条件:PBRが1倍未満、かつ配当利回りが3%以上
pbr = info.get('priceToBook', 99)
div = info.get('dividendYield', 0)
if pbr < 1.0 and div > 0.03:
print(f"発見!: {symbol}")
result_list.append(info)
time.sleep(1) # サーバーへの配慮
except:
continue
条件の部分(if文)を書き換えるだけで、成長株探しや優待株探しなど、目的に合わせたツールに早変わりします。
抽出した銘柄をCSVファイルに保存する
画面に結果を表示するだけでは、後で見直すのが大変です。抽出が終わったら、結果をCSVやExcelファイルとして保存するようにしましょう。
result_df = pd.DataFrame(result_list)
result_df.to_csv("my_stock_list.csv", index=False)
こうしておけば、後でExcelで開いて並び替えをしたり、そのまま証券会社の注文画面へ持っていったりすることができます。自分だけの「お宝銘柄帳」がどんどん溜まっていく感覚は、投資をより楽しくしてくれます。
AIにプロンプトを出してコードを自分好みに変える
もしコードをさらに改良したい(例えば「チャートの画像も一緒に保存したい」など)と思ったら、ChatGPTなどのAIを賢く使いましょう。
「上のコードに、PERが15倍以下という条件を追加して」「結果を利回りが高い順に並べ替えて保存するように書き換えて」と指示を出せば、AIが即座に修正案を出してくれます。
自分で1から全てを書く必要はありません。AIを「有能な助手」として使いこなし、ツールを磨き上げることが、今の時代のスマートな投資スタイルです。
自動抽出で失敗しないための注意点
ツールが動くようになると楽しくてつい頼り切ってしまいますが、自動抽出には特有の落とし穴もあります。
資産を守るために、システムを利用する側として知っておくべき3つの制約を整理しました。これらを頭の片隅に置いておくことで、データの罠を回避できます。
データの欠損や非表示項目への対策
yfinanceで取得できるデータは、常に100%完璧ではありません。
- 決算直後で数値が更新されていない
- 企業側が特定の数値を公表していない
- yfinance側でデータの紐付けミスが起きている
特に日本株の場合、一部の指標が「None(取得不可)」になることがあります。これを考慮せずに計算させると、プログラムが途中で止まってしまいます。常に「データがない場合」を想定したエラー処理(try-exceptなど)を入れておくことが、安定運用の秘訣です。
過去のデータが将来を保証しないリスクを知る
スクリーニングで表示されるPERや利回りは、あくまで「過去の実績」や「現在の予想」に基づいたものです。
例えば、今は利回りが5%と表示されていても、業績が悪化すれば明日には無配になるかもしれません。データはあくまで「今の立ち位置」を教えてくれるものであり、将来の株価上昇を約束するものではないことを忘れないでください。
抽出された銘柄を鵜呑みにせず、最後は必ず自分の目で「なぜこの株は割安なのか?」という背景を確認することが、本当の投資の力を養います。
有料データソースとの精度の違いを理解する
yfinanceは非常に優れた無料ツールですが、プロが月額数十万円を払って使う「ブルームバーグ」などの有料端末に比べると、データの反映速度や正確性で一歩譲ります。
個人投資家が趣味や副業の範囲で分析するには十分すぎる性能ですが、1分1秒を争うような短期トレードには向いていません。
自分の投資スタイル(中長期の積み立てやスイングトレードなど)と、ツールの特性が合っているかを確認しましょう。無料ツールの限界を知ることで、より現実的で地に足のついた運用が可能になります。
抽出した銘柄リストを運用に活かすコツ
銘柄を抽出して終わりではもったいありません。そのリストをどう使い、どう育てていくかが、収益の差になって表れます。
最後に、データ分析を実際の運用に結びつけ、成果を最大化するための3つのアドバイスをお伝えします。
定期的にスクリーニングを実行して変化を追う
相場は毎日動いています。先月は「割安」だった銘柄が、今月は株価が上がって「妥当な水準」になっていることもあります。
月に一度、あるいは週に一度、同じ条件でスクリーニングを実行する習慣をつけましょう。
- 新しくリストに入ってきた「新顔」の銘柄はないか
- ずっとリストにいたのに、消えてしまった銘柄はなぜか
- 自分の持っている株が、まだ条件を満たしているか
この変化を追うプロセスこそが、相場の感覚を磨き、チャンスを逃さないための訓練になります。
個別銘柄の分析と組み合わせて精度を上げる
自動抽出で見つかった銘柄は、いわば「お見合いの一次審査」を通過した候補者です。最終的な結婚(投資)を決める前に、必ず深い個別分析を挟みましょう。
企業の公式サイトで「決算短信」を読んだり、今後の成長戦略を確認したりすることで、数字だけでは見えなかったリスクや魅力が見えてきます。
「機械による広範な検索」と「人間による深い洞察」。この2つを掛け合わせることで、投資の精度は飛躍的に高まります。
抽出結果を可視化して銘柄の傾向を掴もう
リストアップされた銘柄がどの業種に偏っているかを、グラフにしてみるのも面白い発見があります。
「最近の割安株は銀行業ばかりだな」「半導体関連がリストから消え始めたな」といった全体の傾向が掴めれば、市場の資金がどこからどこへ流れているのかという「潮目」を読む力がつきます。
ただ銘柄を買うだけでなく、データを通じて「市場全体を俯瞰する視点」を持つこと。それこそが、Pythonを投資に取り入れる最大の報酬と言えるかもしれません。
まとめ:データはあなたの投資の「羅針盤」になる
銘柄選びを「勘」から「データ」へシフトすることは、暗闇の中をライトを持って歩き始めるようなものです。
- yfinanceで財務情報を瞬時に可視化する
- Pythonで数千銘柄を自動スキャンし、時間を生み出す
- 独自の条件で、他の投資家が見落とすチャンスを掴む
この記事で紹介した手順は、一度身につければ一生使える武器になります。まずは、JPXのリストを眺めることや、1銘柄のPERを表示させる小さな一歩から始めてみてください。
あなたの書いたコードが、いつか「理想の1銘柄」を運んできてくれるはずです。データという羅針盤を手に、より自由で、根拠のある投資の世界を楽しんでいきましょう。

