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

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

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


1月のシリーズ記事

2022年の米国株投資は厳しい局面に何度も直面すると、ジェイは想定しています。

そんな今年の相場をどのように乗り切れば良いのか?を主眼に置き、1月は『2022年の投資戦略シリーズ』と題して、ジェイが考える投資の戦略記事を書きました(全3回)。

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

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

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

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

 

2月のシリーズ記事

そして2月は、『Pythonで優良なバリュー株を見つける方法』という新シリーズを開始しました。

具体的にはー

新シリーズ

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

について解説するシリーズです(全3回)。

第1回と2回の記事については、以下のリンク先からご覧いただけます。

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

続きを見る

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

続きを見る

 

シリーズ第3回となる今回は、第1回の記事でご紹介したPythonコードの解説となります。

なお第3回は、株価収益率(PER)編一株利益(EPS)編に分けて解説します。

今回は『PER編』となります。

今回の記事を読むことで、pandasやmatplotlibに関する基本的な知識が深まることでしょう。

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


Pythonを学ぶなら

・独学でガンガンやれる人は『Udemy』へ
 初心者の方におすすめのコースがこちら おすすめ度
現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル
Pythonに興味がある人、学ぶのをためらっている人には、このコースをおすすめします。
タイトルにあるとおり、基礎から応用まで現役のエンジニアの方が丁寧に教えてくれるコースです。
このコースを学習しながら、同時にアウトプットの練習もしていけば、効率よくプログラミングのスキルをアップさせることができます。

 

・独学が苦手な人は『テックアカデミー』へ
 まずは無料カウンセリングで適正を確かめよう おすすめ度
無料キャリアカウンセリング
独学が苦手な人は、迷わずプログラミングスクールに行くことをおすすめします。
メンターが的確に指導してくれるからです。
しかしスクールは、人によって合う合わないがあります。
なので、まずは無料カウンセリングのあるテックアカデミーで『プログラミングの学習ってこんな感じか』ということを体感してください。

Pythonコース
テックアカデミーのスタイルが自分に合うと思った方は、Pythonコースを受講することをおすすめします。
このコースでは、Pythonの基本が学べます。
期間ですが、学生 / 社会人を問わず4週間(1ヶ月)がおすすめです。
それ以上だと間伸びして、学習するモチベーションが下がる可能性があるからです。

 

・機械学習まで視野に入れているならオンラインPython学習サービス『PyQ』へ
 基本から機械学習まで体系的に学ぼう おすすめ度
オンラインPython学習サービス「PyQ™(パイキュー)」
Udemyと同じく独学でOK!という人は、PyQをおすすめします。
PyQはPythonの基本から統計学、さらには機械学習まで学べる豊富なコースを提供しています。
問題を解く形式で勉強するスタイルなので、インプットとアウトプットのバランスが絶妙なカリキュラムとなっています。

【PyQ】いよいよ、誰でも機械学習を学べる時代へ
Pythonの基本→統計学の順で学んだあと、機会学習にチャレンジすると効率的に『データ分析の何たるか』を学ぶことができます。


第3回目のサマリー

  • pandasでデータを取得する方法
  • pandasでデータを処理する方法
  • matplotlibでチャートを描画する方法
  • 効率的なPython学習について

今回の記事の対象者

こんな方におすすめ

  • プログラミング言語『Python』に興味がある人
  • Pythonで株価分析に必要なデータを取得したい人
  • 取得したデータの処理を学びたい人
  • Pythonを学んでみたいけどためらっている人

Pythonコードの解説

早速、本題です。

まずは、PERのデータを取得するPythonコードの解説から始めます!

Code 1:PERデータの取得

#ライブラリのインポート
import pandas as pd
import pandas_datareader as web
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

 

それでは順に解説していきます。

 

解説1:ライブラリのインポート

まずはライブラリのインポートからです。

import pandas as pd
import pandas_datareader as web
import matplotlib.pyplot as plt

▷pandas
Python版のエクセルです。データ分析では必須となります。

▷pandas_datareader
Yahoo!finance USから必要なデータを取得できる便利なライブラリです。
こちらもマーケット分析では必須となります。

▷matplotlib
Pythonでチャートを描画する際、必ずと言って良いほど使う可視化ライブラリです。
『matplotlib.pyplot』はよく書くパターンなので覚えておきましょう。

『〜 as 〇〇』と書くことで、以降ではasの後ろの簡略形式でコードを書くことができます。
例:pd、web、plt等々

 

解説2:ダウ平均のデータを取得

必要なライブラリのインポートが終わったら、次はダウ平均のデータを取得します。

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

▷pd.read_html
ダウ平均のデータが載っているサイトに『テーブル形式のデータ』がある場合は、このコードを使うことをおすすめします。

テーブル形式のデータ、というのがポイントです。

取得したデータを変数『ticker_list』に入れましょう。変数名は好きに決めてOKです。

 

解説3:ティッカーコードのみを抽出

データの取得は、銘柄のティッカーコードがあれば十分です。

ここは重要なところですので、ちょっと解説が多くなります。

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

▷ticker_list[1]
まず、上のコードで取得したデータ数を確認すると『14』もあります。

その中でティッカーコードのデータが載っているテーブルデータは『1』番目にあります。

なお、Pythonでは最初を『0』番目として数えます。

なので、2番目にあたるインデックスやカラムは『1』となります。

そこで『ticker_list[1]』とすると、以下のテーブルデータのみが抽出できます。

ダウ平均のテーブルデータ

 

▷ticker_list[1].iloc[:, 2]
上のリストに載っている情報の中で、今回必要なのは銘柄の『ティッカーコード』です。

それにあたるカラム名は『Symbol』です。

Symbolは、0番目、1番目...『2』番目(3つめ)のカラムとなります。

よって、ticker_list[1]のあとに.iloc[:, 2]』を追記すると、Symbolのみを抽出することができます。

ilocについて

Pandasでは、必要なデータのみをピックアップすることができます
.iloc』で『 iloc[抽出したい行, 抽出したい列] 』を指定すれば、欲しいデータのみを抽出できます

今回は、全部の行と2番目の列(Symbol)のみを抽出しますので、

今回のケースでは

全部を抽出する意味の『:』と3つめのカラムの位置を示す『2』

と書くだけで、以下のようにティッカーコードのみを抽出することができます。

Symbolのみのリスト

 

解説4:PERのデータを取得

ティッカーコード(Symbol)が取得できれば、あとは株価収益率(PER)のデータを取得するだけです。

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

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


▷web.get_quote_yahoo(tickers)

『web』は、pandas_datareaderです。ライブラリをインポートする時に『〇〇as web』としたので、簡略して書くことができます。

『get_quote_yahoo』は、株式の分析に必要なデータを取得する時に使います。

丸カッコの中に、ティッカーコードのデータを格納した変数『tickers』を指定してください。

すると、以下のように多くのデータが取得できます。

実行結果

 

表示の一番下にデータの数が記載されています。

カラムの数を確認すると『77』もあることがわかります。

次は、この中からPERに関連するデータのみを抽出します。

 

▷web.get_quote_yahoo(tickers)[['trailingPE', 'forwardPE']]
特定のデータのみを抽出するやり方は簡単です。

最後に[ ]を追加して、この中に抽出したいカラム名を入れるだけです。

[ ]を二重にすると、複数のカラム名を一気に抽出することができます。

今回のケースではー

データの抽出

[['trailingPE', 'forwardPE']]

と書けば、PERに関連する2つ(複数)のデータが簡単に取得できるというわけです。

最後に、抽出したデータを変数『PER_data』に格納しましょう。

 

▷sort_values
sort_values』は、データを昇順 / 降順で並び替える時に使います。

どんな銘柄が割高 / 割安なのか?を簡単に判別するため、変数『PER_data』を並び替えてみましょう。

並び替えの軸は『予想PER(forwardPE)』、並び替える順番は『降順』です。

以下の引数を設定するだけです。

sort_valuesの引数

  • by:並び替えの軸となるカラム名を入力
  • ascending:True(昇順)/False(降順)

最後は、変数『PER_sorted_data』に取得&抽出したデータを格納してください。

そうすると、以下の結果が表示されます。

実行結果

カラム右の予想PER(forwardPE)を軸に、降順(大きい値→小さい値の順)でデータフレームが表示されていることがわかります。

 

Code 2:データの可視化

数値のデータが取得できた後、次にやるべきことはー

次にやるべきこと

数値データの可視化

です。

数値データの可視化は、データ分析の基本です。

Pythonで数値データを可視化する時、必ずと言って良いほど使うライブラリがー

可視化ライブラリ

matplotlib

です。

さっそく、PERの数値データを可視化してどの銘柄が割高なのか?割安なのか?をご自身の目で確認してみましょう。

# 各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)
plt.axhline(y = PER_sorted_data.forwardPE.mean(), 
            color = 'red')

 

解説1:チャートの描画

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

▷PER_sorted_data.plot( )
データが格納されている変数『PER_sorted_data』に『.plot』と追記するだけで、簡単にチャートが描画されます。

 

しかし、上のチャートだと何を意味しているのか?が、まったくわかりません。

より見やすくするために、チャートを編集する必要があります。

やり方は簡単。

以下にあるそれぞれの引数を設定するだけです。

plotの引数

  • kind:チャートの種類を設定
  • figsize:チャートの縦/横サイズを設定
  • grid:グリッドラインの有無を設定
  • cmap:カラーを設定
  • fontsize:フォントサイズを設定

▷kind
『bar』とすることで、バーチャート(棒グラフ)が描画されます。

▷figsize
チャートの『縦, 横』サイズを設定します。今回は縦15:横7のサイズとしました。

▷grid
チャート内に、グリッドライン(縦と横の線)を描画します。
False』とすると、グリッドラインを消すことができます。

▷cmap
棒グラフの色を設定します。
以下のように、色々なカラーマップが用意されています。どんな色合いが描画されるのか、コピペして試してみてください。


カラーマップ一覧:Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu, GnBu_r, Greens, Greens_r, Greys, Greys_r, OrRd, OrRd_r, Oranges, Oranges_r, PRGn, PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, Pastel2, Pastel2_r, PiYG, PiYG_r, PuBu, PuBuGn, PuBuGn_r, PuBu_r, PuOr, PuOr_r, PuRd, PuRd_r, Purples, Purples_r, RdBu, RdBu_r, RdGy, RdGy_r, RdPu, RdPu_r, RdYlBu, RdYlBu_r, RdYlGn, RdYlGn_r, Reds, Reds_r, Set1, Set1_r, Set2, Set2_r, Set3, Set3_r, Spectral, Spectral_r, Wistia, Wistia_r, YlGn, YlGnBu, YlGnBu_r, YlGn_r, YlOrBr, YlOrBr_r, YlOrRd, YlOrRd_r, afmhot, afmhot_r, autumn, autumn_r, binary, binary_r, bone, bone_r, brg, brg_r, bwr, bwr_r, cividis, cividis_r, cool, cool_r, coolwarm, coolwarm_r, copper, copper_r, cubehelix, cubehelix_r, flag, flag_r, gist_earth, gist_earth_r, gist_gray, gist_gray_r, gist_heat, gist_heat_r, gist_ncar, gist_ncar_r, gist_rainbow, gist_rainbow_r, gist_stern, gist_stern_r, gist_yarg, gist_yarg_r, gnuplot, gnuplot2, gnuplot2_r, gnuplot_r, gray, gray_r, hot, hot_r, hsv, hsv_r, inferno, inferno_r, jet, jet_r, magma, magma_r, nipy_spectral, nipy_spectral_r, ocean, ocean_r, pink, pink_r, plasma, plasma_r, prism, prism_r, rainbow, rainbow_r, seismic, seismic_r, spring, spring_r, summer, summer_r, tab10, tab10_r, tab20, tab20_r, tab20b, tab20b_r, tab20c, tab20c_r, terrain, terrain_r, twilight, twilight_r, twilight_shifted, twilight_shifted_r, viridis, viridis_r, winter, winter_r


▷figsize
チャート上の文字の大きさを設定します。

 

上の引数をすべて設定すると、より見やすいバーチャート(棒グラフ)が描画されます。

実行結果

より見やすくなりました。

しかし、もうちょっと編集を加えることで、より分析しやすいチャートが作れます。

 

解説2:チャートの編集

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

# x軸ラベルの設定
plt.xlabel('Tickers', fontsize = 20)

# y軸ラベルの設定
plt.ylabel('PER', fontsize = 20)

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

# 予想PERの平均値をラインで描画
plt.axhline(y = PER_sorted_data.forwardPE.mean(), 
            color = 'red')

▷plt.title
『plt.title』で、チャートのタイトルを設定できます。

▷plt.xlabel
『plt.xlabel』で、x軸のタイトルを設定できます。

▷plt.ylabel
『plt.ylabel』で、y軸のタイトルを設定できます。

▷plt.xticks
『plt.xticks』で、x軸の文字の傾きを設定できます。引数の『rotation』で傾きの度合いを調整します。

▷plt.axhline
『plt.axhline』で、水平線を描画することができます。

なお、今回の水平線は『予想PERの平均値』です。

平均値の計算は、以下の手順で行います。

平均値の計算

  • PER_sorted_data.forwardPEで予想PERを抽出
  • .mean()を追記して平均値を計算

引数『y』に上のコード『PER_sorted_data.forwardPE.mean()』を設定すれば、簡単に予想PERの平均値がチャート上に描画できます。

引数『color』で色を指定すれば、より見やすくなります。

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

実行結果

どの銘柄が予想PERの平均値を超えている(割高な)のか?または予想PERの平均値よりも低い(割安な)のか?が、一目でわかるチャートが描画できました。

このように一度Pythonのコードを書いておけば、次からはほんの数秒でPythonがデータを取得してくれます。


Pythonを効率よく学ぶ方法

Pythonって便利だな!

私もPythonを学んでみたい!

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

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

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

本気でPythonを学びたいなら

Pythonを学ぼう


独学OKの人ならUdemyで学ぼう!

以下では、オンライン学習プラットフォームの『Udemy』が提供している数多くのPythonコースの中でも、実際にジェイが受講して『これはよかった!』と思うコースをピックアップしました。

なおUdemyでは、受講したコースにあなたが満足しない場合、30日以内なら返金を申請することができます。

このため、安心していろんなコースを受講することができます。

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

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

 

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

 

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


まとめ

まとめ

・pandasを使えばYahoo!finance USから簡単に情報を取得できる
・pandasを使えば簡単にデータの処理ができる
・matplotlibを使えば可視化してデータの分析ができる

今回は以上です。

次回は、一株利益(EPS)について解説します。

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


注記事項

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

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