Pythonコード集 マーケット分析の記事

【Pythonコード集】第1回 Pythonを使って優良なバリュー株の銘柄を見つけてみよう!

ーこの記事は3分で読めますー


2022年は、アメリカの中央銀行にあたる連邦準備制度理事会(FRB)をはじめ、各国の中央銀行はインフレに対抗するため金融政策の大転換 ー金融緩和政策から金融引き締め政策への大転換ー を急速に進めていく1年となるでしょう。

この点が意識され、年初来から米国の主要な株価指数は軒並み不安定な状況となっています。

そこで先月、当ブログでは我々のような個人投資家が今年1年、どのような戦略で米国株投資と向き合うべきか?という点に主眼をおき、『2022年の投資戦略シリーズ』と題してジェイが考える投資の戦略記事を書きました。

シリーズ未読の方は、以下のリンク先からご覧ください。

シリーズ第1回『米国株はオミクロン後をにらんだ展開に

シリーズ第2回『上昇する米金利  22年の米国株投資はどのような戦略で臨むべきか?

シリーズ第3回『優良バリュー株を見つける方法

 

未読の方のために『2022年の投資戦略シリーズ』の結論を簡単に言っておきますとー

結論

2022年は ”個別の優良なバリュー株” を丁寧に拾っていけるかどうか

この点が、今年のパフォーマンスの明暗を分ける重要なポイントになるとジェイは考えています。


新たなテーマと概要

今年は、個別の優良なバリュー株投資がパフォーマンスの明暗を分ける...

・新たなテーマ

ならば、当ブログのもうひとつのメインテーマであるプログラミング言語『Python』を使い、『Yahoo! finance USからバリュー株投資に必要なデータを爆速で取得する方法』を新たなテーマとして設定しました。

新たなテーマ

PythonでYahoo! finance USからバリュー株投資に必要な情報を爆速で取得する方法

もちろん、Yahoo! finance USの情報を取得するだけでは意味がありません。

なので今回のテーマでは、Yahoo! finance USから取得した情報を具体的にどんなふうに使うのか?という点についてもお話しします。

・新たなテーマの概要

新たなテーマは『全3回シリーズ』です。

第1回目の今回は、PythonでYahoo! finance USからバリュー株投資に必要なデータを取得するコードを紹介します。

第2回目の記事では、取得した情報を使ってどのように分析するのか?この点を解説します。

第3回目の記事では、第1回目で紹介したPythonコードを詳しく解説します。

ぜひ最後までご覧ください!


Udemyおすすめの講座
・Pythonの基礎から応用まで一気に学ぶならこのコース おすすめ度
現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル

 

・データサイエンスを学ぶならこの2コース 2コースのおすすめ度
【世界で37万人が受講】データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ〜
【ゼロから始めるデータ分析】 ビジネスケースで学ぶPythonデータサイエンス入門

 

・Python、ファイナンス、英語を一気に学ぶ ”欲張りコース” おすすめ度
Python for Finance: Investment Fundamentals & Data Analytics
※このコースには日本語の字幕がついています。
Python、ファイナンスそして英語の力を同時にレベルアップするコースとしては、Udemy最高のクォリティーです。
ジェイもこのコースで学び、今も復習で使っています。


第1回目のサマリー

  • 株価の分析に必要なPythonコードの紹介
  • 爆速で情報を取得する鍵は『pandas_datareader』にあり
  • 取得したデータを可視化する方法
  • 効率的にPythonを学ぶ方法について

 

今回の記事の対象者

こんな方におすすめ

  • プログラミング言語『Python』に興味がある人
  • Pythonで株価分析に必要な情報を取得したい人
  • 取得したデータをチャートで可視化したい人
  • Pythonを学んでみたいけどためらっている人

 

Pythonコードの紹介

さて、ここからが今回の記事の本題です。

取得する情報

まずは、今回取得するバリュー株投資に必要な情報の取得からはじめましょう。

バリュー投資には、様々な情報が必要です。

その中でも今回は、必ずチェックすべき『2つの情報』をPytyonで取得してみます。

2つの情報

  • 株価収益率(PER)
  • 一株利益(EPS)

上のデータの取得先は、Yahoo! finance USです。

 

対象はダウ平均の採用銘柄

そして、今回の対象銘柄はー

対象銘柄

ダウ平均に採用されている銘柄

としました。

ダウ平均とは?

  • 正式名称:ダウ・ジョーンズ工業株価平均
  • 構成銘柄:各業種の代表的な30銘柄

 

ちなみに、ダウ平均の選定基準は以下となります。

選定の基準

  • 成長性が高い企業
  • 知名度がある企業
  • アメリカで設立した企業
  • アメリカに本社がある企業
  • 売上高の大部分をアメリカで生み出す企業

ダウ平均は、アメリカを代表する優良なバリュー株銘柄を多く採用しています。

よって、バリュー株投資のベンチマークとして、常にチェックしておくことをおすすめします。

 

PERを取得してみよう!

まずは、一株利益(EPS)に対して株価が何倍なのか?をチェックする時に多くの投資家が必ず見るー

取得するデータ

株価収益率(PER)

のデータを取得するPythonコードを紹介します。

なお、コード画面は左右にスクロール(スワイプ)できます。

Pythonコード:PERの取得

# ライブラリのインポート
import pandas as pd
import pandas_datareader as web
import yfinance as yf
import matplotlib.pyplot as plt


# ダウ平均のティッカーコードを取得
ticker_list = pd.read_html('https://en.wikipedia.org/wiki/Dow_Jones_Industrial_Average')

# ティッカーコードのみを抽出
tickers = ticker_list[1].iloc[:, 2]

# PERに関係するデータのみを抽出
PER_data = web.get_quote_yahoo(tickers)[['trailingPE', 'forwardPE']]

# forwardPE(予想PER)を軸に降順でソート
PER_sorted_data = PER_data.sort_values(by = 'forwardPE', 
                                       ascending = False)

# データフレーム形式で各PERの水準を確認
PER_sorted_data


# 各PERの推移を可視(チャート)化して確認
PER_sorted_data.plot(kind = 'bar', 
                     figsize = (15,7), 
                     grid = True, 
                     cmap = 'winter', 
                     fontsize =13)

# チャートのタイトル設定
plt.title('PER of Dow Jones Industrial Average', 
          fontsize = 25)

# x軸のレベルを30度に傾ける
plt.xticks(rotation = 30);

上のコードを実行すると、以下の実行結果がでます。

実行結果

このように、たった数行のPythonコードを書くだけで、必要なデータが爆速で取得できます。

 

Pythonコード:データの可視化

上のようにデータを降順(昇順)で並び替えたり、共通項を抜き出したりしてデータの特徴を知ることは重要です。

しかし、それ以上に重要なことはー

重要なこと

チャートで可視化すること

データ分析では、必ず数値のデータを ”チャートで可視化” してください。

そうしないと、真にデータの特徴を知ることはできません。

 

そこで次は、数値のデータをチャートで可視化するPythonコードを紹介します。

採用するチャートは『バーチャート(棒グラフ)』です。

# 各PERの推移を可視化(チャート)で確認
PER_sorted_data.plot(kind = 'bar', 
                     figsize = (15,7), 
                     grid = True, 
                     cmap = 'winter', 
                     fontsize =13)

# チャートタイトルの設定
plt.title('PER of Dow Jones Industrial Average', 
          fontsize = 25)

# x軸のラベルを30度ななめ傾ける
plt.xticks(rotation = 30);

上のコードを実行すると、以下のチャートが描画されます。

実行結果

青の棒グラフが『trailingPE』です。trailingPEとは、過去12か月のPERのことです。

緑の棒グラフが『forwardPE』です。forwardPEとは、今後12か月先の予想PERのことです。

バリュー株投資でPERを使う時はー

ポイント

相対的に低いPERの銘柄をチェックする

ことが重要なポイントです。

他社と比較して、相対的にPERが高いか?低いか?をチェックするだけでなく、trailingPEとforwardPE(12か月先の予想PER)の水準を比較することも重要です。

なぜなら、trailingPE(過去12か月の水準)と比べて、forwardPE(今後12か月先の予想)が上昇している場合、それは株価が上昇し過ぎているか、もしくは一株利益(EPS)の低下により、その銘柄の株価が割高となっている可能性があるからです。

 

次はEPSのデータを取得してみよう!

特に後者の点、一株利益(EPS)の低下が原因でforwardPE(今後12か月先の予想)が高くなっているケースは要注意です。

なぜなら、将来稼ぐ力が低下するということは、この先株価が下落する可能性(少なくとも上昇しない可能性)が、他の銘柄と比べて高いからです。

 

そこで次は、収益性をチェックするための情報ー

収益性の情報

一株利益(EPS)

のデータをPythonで取得してみます。

Pythonコード:EPSの取得

上のコードに続いて、以下のコードを書き足すとー

# EPSのデータを取得
EPS_data = web.get_quote_yahoo(tickers)[['epsTrailingTwelveMonths', 'epsForward']]

# 取得したEPSのデータを降順でソート
EPS_sorted_data = EPS_data.sort_values(by = 'epsForward', 
                                       ascending = False)

# フォワードEPSと過去12ヶ月EPSの差分を取る
EPS_sorted_data['Diff'] = EPS_sorted_data.epsForward - EPS_sorted_data.epsTrailingTwelveMonths

# EPSの差分データをチャートで確認
EPS_sorted_data.Diff.sort_values(ascending = False).plot(kind = 'bar', 
                                                         figsize = (15,7), 
                                                         grid = True, 
                                                         color = 'darkblue', 
                                                         fontsize = 13)

# チャートタイトルの設定
plt.title('EPS Growth', fontsize = 25)

# x軸のラベルを斜め30度に傾ける
plt.xticks(rotation = 30);

以下のチャートが描画されます。

実行結果

詳細は第3回目の記事で書きますが、上のチャートは12か月先のEPS(epsForward)が過去12か月のEPS(epsTrailingTwelveMonths)よりも増加するか否か?を表しています。

こうやって棒グラフで見ると、将来EPSが増加すると予想されている銘柄と減少すると予想されている銘柄にはっきりと分かれていることがわかります。

低PERのバリュー株(割安株)を見つけても、将来EPSが減少することが予想されている銘柄に投資するわけにはいきません。

よって、マイナスと予想される銘柄を除き、プラスと見込まれる銘柄のみをピックアップしてみましょう。

Pythonコード:銘柄のピックアップ

最初の2行が、マイナスとなっている銘柄のみを削除するPythonコードです。

# EPSの差分がマイナスになっている銘柄を削除
drop_t = EPS_sorted_data.index[EPS_sorted_data['Diff'] <= 0]
EPS_drop = EPS_sorted_data.drop(drop_t)

# チャートであらためて確認
EPS_drop.Diff.sort_values(ascending = False).plot(kind = 'bar', 
                                                  figsize = (15,7), 
                                                  grid = True, 
                                                  color = 'darkblue', 
                                                  fontsize = 13)
# チャートタイトルの設定
plt.title('EPS Growth', fontsize = 25)

# x軸のラベルを斜め30度に傾ける
plt.xticks(rotation = 30);

上のコードを実行すると、以下のチャートが描画されます。

実行結果

将来、EPSが増加すると予想されている銘柄のみを棒グラフで描画することができました。

 

おまけ

EPSのチャートにもうひと工夫することで、より優良なバリュー株の銘柄候補を見つけることができます。

そのひと工夫とはー

ひと工夫

EPSの平均増加額を水平ラインで描画する

ことです。

たった1行のコード『plt.axhline...』を追記するだけです。

# EPSの平均上昇幅(2.84)を水平ラインで描画
EPS_drop.Diff.sort_values(ascending = False).plot(kind = 'bar', 
                                                  figsize = (15,7), 
                                                  grid = True, 
                                                  color = 'darkblue', 
                                                  fontsize = 13)

# EPSの平均増加額を水平ラインで描画
plt.axhline(y = EPS_drop['Diff'].mean(), color = 'red', ls = '--')

# x軸のラベルを斜め30度に傾ける
plt.xticks(rotation = 30);

上のコードを実行すると、以下のチャートが描画されます。

実行結果

赤いラインが、予想されるEPS増加額の平均($2.84)です。

 

次回の記事では

今回、Pythonで描画したPERのチャートとEPSのチャートを同時にチェックすることで、有望なバリュー株を効率的に絞り込むことができます。

次回は、銘柄を絞り込む具体的な方法について解説します。

乞うご期待!


Pythonを効率よく学ぶ方法

今回の記事を読んでー

Pythonって便利だな!

私もPythonを学んでみたい!

今回の記事を読んでそう思われた方は、以下のリンク先をご覧ください。

本気でPythonを学びたいなら

Pythonを学ぼう

 

Pythonを学ぶメリットがわかります。

そして、『これがPythonを効率的に学ぶ方法だ!』と自信をもっておすすめする学習方法について解説しています。

この記事と出会ったのも何かの縁です。

ぜひチャレンジしてみてください!


まとめ

まとめ

・Pythonを使えばYahoo! finance USから必要な情報を簡単に取得できる
・情報取得のキーポイントは『pandas_datareader』
・コードを組めばPERとEPSのデータが爆速で取得できる
・取得したデータを可視化することが重要
・効率的にPythonを学ぶ方法のご紹介

今回は以上です。

最後までお読みいただき、ありがとうございました!


注記事項

ジェイの米国株投資ブログ(以下当サイト)に掲載されている記事は、投資の助言を目的としたものではありません。当サイトに掲載されたコンテンツの正確性については、可能な限り注意を払っています。しかし、意図せず誤情報が紛れ込む可能性や情報そのものが古くなっている可能性があり、その正確性を完全に保証するものではありません。
当サイトのコンテンツを参考に投資を行い、その後発生したいかなる結果についても、当サイト並びにブログ運営者は一切責任を負いません。すべての投資行動は『自己責任の原則』のもとで行ってください

 

-Pythonコード集, マーケット分析の記事