matplotlib NumPy Pythonで分析! Seaborn

Pythonとseabornで米金利とナスダックの関係を分析!

投資家さん
今回も米金利とナスダックの関係についてのお話ですね!

前回の記事で、今年の2月以降、米長期金利(10年債利回り / 以下米金利)とナスダック総合指数(以下ナスダック)が、”逆の関係”にあることを指摘しました。

”逆の関係”を確認するために計算したのが、”相関係数”でした。

未読の方は以下のリンク先へ!

関連記事ナスダックと米金利の関係をPythonとseabornでチェック!

投資家さん前回に続いて今回もPythonでのチャート分析がテーマですね   前回の記事ではPythonで作成したチャートを使って、米金利とナスダックの関係についてチェックしました。 &nbs ...

続きを見る

 

前回は、米金利の水準とナスダックの価格をそのまま使って相関係数を計算しました。

しかし、実務では ”もうひと手間かけて” 相関係数を計算します。

今回は、その ”もうひと手間” について、計算モジュールの『NumPy』と可視化ライブラリの『seaborn』を使いながらお話します。

最後までお読みいただければ、Pythonを使ったマーケット分析のイメージがつかめると思います。

 

今回のテーマ ー

マーケットの相関係数を計算する時は『収益率』を使おう!

 

記事を読んでわかること

わかること

  • Pythonで収益率を計算する方法
  • Pythonで相関係数を計算する方法
  • seabornで相関チャートを作成する方法
  • 統計学の基本を学ぶ『良書』

 

この記事の対象となる人

こんな人におすすめ

  • プログラミング言語『Python』に興味がある人
  • Pythonを使ってチャートを作ってみたい人
  • Pythonを使ってマーケットの分析をしたい人

 

結論からいいます

  • Pythonを使えば簡単に収益率が計算できる
  • Pythonを使えば簡単に相関関係をチェックすることができる
  • matplotlibにseabornを組み合わせて使えばより詳細なチャート分析ができる

 

まずは相関係数の復習から

相関係数とは?

今回のテーマも、米金利とナスダックの関係について分析することです。

異なった市場の関係を見る時に必ずチェックすべきことの一つが、『相関関係』です。

この相関関係を具体的な数値で確認する指標を『相関係数』といいます。

 

相関係数とは

・二つの事柄のうち、ひとつが変わるともう一方はどのように変化するのかを表す指標

・『-1~+1』の値をとる

・プラス1に近いほど、両者は同じ方向に動く関係にある

・マイナス1に近いほど、両者は逆の方向に動く関係にある

・ゼロに近いほど ”直線的な関係がない” と考える

今回の例でいうならば、米金利とナスダックが同じ方向に動いていれば相関係数は『プラスの関係』になり、お互いが逆方向に動いていれば相関係数は『マイナスの関係』になる、というだけの話です。

なお、プラスの関係のことを『順相関』または『正の相関といいます。

一方、マイナスの関係のことを『逆相関』または『負の相関』といいます。

そして、相関関係の強さを『-1 ~ +1』の値で確認します。

 

相関係数を計算するコード

Pythonを使って相関係数を計算するコードは、以下の1行で済みます。

変数.corr()

相関係数は英語で ”correlation” といいます。

よって、『corr()』は、”correlation” の略です。

 

もうひと手間とは?

収益率を計算する必要がある

前回は、米金利の水準とナスダックの価格をそのまま使って相関係数を計算しました。

しかし、実務で統計分析を行う場合は、”もうひと手間”かけて相関係数を計算します。

その”もうひと手間”とはー

収益率を計算する

ことです。

 

収益率とはー

ある時点と比較して、現在の株価や為替レートは上がっているのか?それとも下がっているのか?を見る指標

のことです。

 

なぜ収益率が重要なのか?

なぜ収益率が重要なのか?

その理由は2つあります。

ひとつは、あるマーケットの上昇(下落)の幅に対して、もうひとつのマーケットがどの程度の上昇(下落)で反応しているのか?その変動幅を調べることで、より正確に順(逆)の相関関係がわかるからです。

 

もうひとつの理由は、『時系列分析』をする際、とても重要な指標となるからです。

時系列分析は今回のテーマから外れるため、以下で簡単に触れておきます。

時系列分析には多くのモデルがあります。

その中には、平均から一定のレンジ内(プラス/マイナス1%という感じ)でデータのバラつきがおさまる『定常状態』であることを前提としたモデルがあります。

しかし、現実のマーケットは大きくランダムに動くため『定常状態』にはなり得ません。

 

そこで使われるのがー

収益率

です。

 

株価や為替レートの収益率を計算すれば、平均から一定のレンジ内でデータのバラつきをおさえることができるからです。

収益率は、時系列分析に必要な『定常状態』を作り出してくれるというわけです。

 

まぁ、言葉で説明しても分かりにくいと思います。

実際に”もうひと手間”かけて相関係数を計算してみましょう。

そして、単に米金利の水準とナスダックの価格だけで計算した値とどれだけ違うのか?

この点も確認してみましょう!

 

Pythonで分析開始!

まずは、いつも通りYahoo!finaneからマーケットデータを取得します。

コードは前回と同じですが、データの最終日だけ3月12日(金)となります。

※スマートフォンでご覧の人は、コード一覧の画面を左右にスライドして見ることができます。

コード例:マーケットデータを取得

1:まずは必要なライブラリをインポート

#データフレームを作成するためにpandasをインポート
import pandas as pd
import pandas_datareader as web

#チャートを作成するライブラリmatplotlibをインポート
import matplotlib.pyplot as plt
%matplotlib inline

#チャートを作成するライブラリseabornをインポート
import seaborn as sns

#警告表示を無視するwarningsをインポート
import warnings
warnings.filterwarnings('ignore')

2:次にYahoo!financeからマーケットデータを取得

#米金利のデータを取得
us10yt = web.DataReader(data_source='yahoo', 
name='^TNX',
start='2021-01-30',end='2021-12-31')['Adj Close']

#ナスダックのデータを取得
nsdq=web.DataReader(data_source='yahoo',
name='^IXIC',
start='2021-01-30',end='2021-12-31')['Adj Close']

head & tail関数で、データが取得できているかどうかを確認します。

実行結果

ちゃんと米金利とナスダックのデータが取得できていることが確認できました。

 

次は、いよいよ『収益率』の計算です。

収益率の計算

収益率の計算方法は2つあります。

収益率の計算方法

  • 差分をとる
  • ”対数”差分をとる

 

『差分』の計算はいたってシンプルです。

  • step.1

    当日の終値から前日の終値を引き算する

  • step.2

    上で計算された値を前日の終値で割る

 

一方、『対数差分』は、数学的に理解するとなると指数・対数はもちろんのこと、微分(テイラー展開やマクローリン展開)も学んでおく必要があります。

数学はこのブロブのテーマではないため割愛しますが、『対数差分 ≒ 収益率』となる、ということだけ覚えておけばOKです。

『対数差分』の計算は以下です。

  • step.1

    株価や為替レートの対数を計算する

  • step.2

    当日の対数の値を前日の対数の値で引き算する

まぁ、どちらを使っても良いのですが、せっかくPythonを学んでいるので、今回は後者の『対数差分』で計算します!

 

対数差分の計算

対数差分の計算には、Pythonの計算モジュール『NumPy』を使います。


うん?NumPyって何?という方は、以下の記事をご覧ください。

NumPyとは?


コード例:対数差分を計算

1:まず『NumPy』を使って対数を計算する

#計算モジュールNumPyをインポート
import numpy as np

#対数の計算ではNumPlyのlogを使う
#カッコの中にマーケットデータを格納した変数”df”を入れる
df_log = np.log(df)

head & tail関数で実行結果を見てみましょう。

実行結果

マーケットデータが対数へ変換されていることが確認できました。

 

いよいよ対数差分の計算です。コードは以下となります。

2:NumPyで対数差分を計算

#差分の計算には .diff ( ) を使う
df_log_diff = df_log.diff(1)

head & tail関数で実行結果を見てみましょう。

実行結果

最初の取得日”2021-01-29”が”NaN”になっています。

これは差分を取っているためです。

なので、対数差分がちゃんと計算されていることが確認できました。

 

上のコードのように『変数.diff( )』を使えば簡単に差分が計算できます。

今回の変数は”対数”なので、『対数.diff( )』で対数差分が計算できた、というわけです。

ちなみに、カッコの中の数字が差分の幅となります。

今回は『1』を入れましたので、1日の差分を計算したことになります。

データや分析の目的によって、2や3といった数字を入れるケースもあります。

 

コード例:相関係数を計算

最後にPythonで相関係数を計算します。

#相関係数の計算は.corr()
df_log_diff.corr()

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

実行結果

米金利の水準とナスダックの価格を使って計算した相関係数は『マイナス0.62』でした。

一方、収益率で計算した相関係数は『マイナス0.49』です。

米金利とナスダックが”逆相関”の関係にあることは、収益率の相関係数からもうかがえます。

しかしマイナス0.5程度の”逆相関”であることを考えると、3月12日の時点では、米金利の上昇がナスダックの下落圧力をさらに高める可能性は低い、と考えることができます。

よって来週以降の焦点は、米金利の上昇に対してハイテク株が次第に慣れていくかどうか?この点がになるとジェイは考えています。

 

seabornで分析してみよう!

 

さて、次は『seaborn』を使って、米金利とナスダックの相関チャートを作ります。

seabornとは?

Pythonでチャートやグラフを作成する時、必ず使うのが『matplotlib』というライブラリです。

そして、matplotlibのデザインをよりカッコよくしたり、相関関係といった統計の観点から分析する場合は『seaborn』というライブラリをよく使います。

seabornについては以下の記事をご覧ください。

seabornとは?

 

seabornでチャートを作成

コード例:seabornの『regplot』

今回は、スタイルを変えてチャートを作成してみます。

#regplotを使って相関関係を確認するコード
sns.regplot(data=df_log_diff,x='US10YT',y='NSDQ',
            scatter_kws={'color':'#2E2E2E'},
            line_kws={'color':'indigo'},
            label='Corr: -0.4921')

#凡例を表示するコード、フォントサイズも同時に指定
plt.legend(fontsize=20)

#グリッドラインを表示するコード
plt.grid(True)

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

実行結果

米長期金利とナスダックの相関チャート

『regplot』は、両者の相関関係をシンプル表してくれます。

ラインが”右肩下がり”になっているということは、収益率の観点からも米金利とナスダックの関係が”逆相関”にあることがわかります。

 

また、『jointplot』を使えば、”ヒストグラム”も同時に表示することができます。

実際に見てみましょう。

コード例:seabornの『jointplot』

#jointplotを使って相関関係を確認するコード
sns.jointplot(data=df_log_diff,x='US10YT',y='NSDQ', 
              kind='reg',
              joint_kws={'color':'#2E2E2E'},
              marginal_kws={'color':'indigo'},
              label='Corr: -0.4921')


plt.legend(fontsize=20)
plt.grid(True)

 

『regplot』のところを『jointplot』に変更するだけです。

実行すると以下のチャートが表示されます。

実行結果

同じく右肩下がりの相関チャートが作成されました。

さらに、チャートの外側に ”ヒストグラム”も作成されています。

山なりの一番高い部分が、最も多くデータが観測されたところを示しています。

米金利は上昇トレンドにあるため、ヒストグラムのカタチが右側に寄っていることがわかります。

一方、ナスダックは上下に大きく動いているため、米金利よりもデータのバラつきが見られます。

このようにseabornを使えば、色々なカタチのチャートで、色々な分析ができます。

 

統計学を学ぶ『2つの良書』

まずは自分に合うかどうかを確認しよう

投資家さん
統計学ってどうやって学んだら良いの?

こんな質問をいただくことがあります。

統計学を専門に教えている講座に参加するという手もあります。

しかし、統計学の基礎を学ぶだけでも1年はかかります。
応用以上(実践)となれば、最低でも2年から3年は必要でしょう。

つまり、統計学を学ぶには長い時間がかかるということです。

このため、途中で止めて時間を無駄にするケースがあります。

 

時間を無駄にするリスクを考えるとー

ポイント

まずは統計学の勉強が自分に合っているかどうか?

この点を確かめることからおすすめします。

 

それを確かめるために、最初は以下の本を読んで統計学のイメージをつかんでください。

  • こども統計学 なぜ統計学が必要なのかがわかる本

この本は文字の大きさも程よく、読みやすい文章の構成となっています。

また、カラーの図柄を多く使っているため、スラスラと読めます。

さらに、統計学で注意すべき点についても触れています。

『なるほど!統計学を使うとこんなことがわかるんだ!』

『統計学で分析する時はここに注意した方が良いんだ!』

というイメージを得るには、もってこいの良書です。

 

自分に合っていると思ったら次の本はこれ!

こども統計学 なぜ統計学が必要なのかがわかる本』を読んで、統計学の勉強が自分に合っている!と思ったら、次におすすめする本は以下です。

  • コア・テキスト統計学

 

この本をおすすめする理由は、4つあります。

おすすめの理由

  • 統計学の基本的な知識がこの1冊につまっている
  • 難しく見える数式も文章を読めば理解できる
  • 具体例を用いて統計学の使い方を説明している
  • 練習問題と詳細な答えの解説がついている

本気で統計学の基本を学ぶなら、『コア・テキスト統計学』が手元にあれば十分です。
少なくとも、基本を学ぶ段階ではこの一冊を読み込んでおけば大丈夫です。

なぜ大丈夫と言い切れるのか?

それはジェイ自身が、この本で統計学の基本を学んだからです。

全部で300ページちょっとあり中々ハードでしたが、通勤中や仕事の帰りに勉強して、約2か月くらいで読み終えました。

ジェイの経験からいっても、『コア・テキスト統計学』は基本が学べる『良書』だと自信を持って言えます。

 

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

統計学に興味のある人は、ぜひ上の2冊から挑戦してみることをおすすめします!

 

まとめ

まとめ

  • Pythonを使えば簡単にビジュアルチャートが作成できる
  • Pythonを使えば簡単に相関係数を計算できる
  • seabornを使えば簡単に相関チャートを作ることができる
  • 統計学を学ぶための2冊の『良書』について

注記事項

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

 

最後に

Pythonを学びたい方へ

今やPythonは、マーケットの分析に限らず、あらゆる分野で使われているプログラミング言語です。

Pythonを学んでおけば株式の投資に役立つだけでなく、これからのキャリアを形成する上でも力強い武器となるでしょう。

『私もPythonを学んでみたい!』

という人は以下のリンク先をご覧ください。

プログラミングを学ぼう

 

なぜプログラミングを学ぶ必要があるのか?その理由がわかります。

そして『これがPythonを効率的に学ぶ方法だ!』と、ジェイが自信をもっておすすする効率的な学習方法もわかります。

この記事と出会ったのも何かの縁です。
ぜひチャレンジしてみてください!

スポンサーリンク

-matplotlib, NumPy, Pythonで分析!, Seaborn

© 2021 ジェイの米国株投資ブログ