前回の記事ではPythonで作成したチャートを使って、米金利とナスダックの関係についてチェックしました。
-
関連記事【Python】米金利とナスダックのトレンドをチャートで分析!基本編
続きを見る
前回は基本編という位置付けでしたが、今回は実践編となります。
具体的には、『相関係数』という統計的な観点と『seaborn』というライブラリを使います。
そしてテーマは以下となります。
今回のテーマ ー
相関係数とseabornを使って米金利とナスダックの関係を分析をしてみよう
記事を読んでわかること
わかること
- Pythonでチャートを作成する方法
- Pythonで相関係数を計算する方法
- seabornでチャートを作成する方法
- 統計学の基本を学ぶ『良書』について
この記事の対象となる人
こんな人におすすめ
- プログラミング言語『Python』に興味がある人
- Pythonを使ってチャートを作ってみたい人
- Pythonを使ってマーケットの分析をしたい人
結論からいいます
- Pythonを使えば簡単にビジュアルチャートが作成できる
- Pythonを使えば簡単に相関関係をチェックすることができる
- matplotlibにseabornを組み合わせて使えばより詳細なチャート分析ができる
まずはmatplotlibの復習から
本題に入る前に、まずはmatplotlibの復習からいきましょう。
今回もターゲットとなる指標は、米長期金利(10年債利回り)とナスダック総合指数(ナスダック)です。
マーケットデータは、いつもどおりYahoo!financeから取得します。
Yahoo!financeからマーケットデータを取得
※スマートフォンでご覧の人は、コード一覧の画面を左右にスライドして見ることができます。
Pythonのコード例:株価の取得
import pandas as pd import pandas_datareader as web import matplotlib.pyplot as plt %matplotlib inline start='2020-12-31' us10yt = web.DataReader(data_source='yahoo', name='^TNX', start=start, end='2021-12-31')['Adj Close'] nsdq=web.DataReader(data_source='yahoo', name='^IXIC', start=start, end='2021-12-31')['Adj Close'] print(us10yt.head(),us10yt.tail()) print(nsdq.head(),nsdq.tail())
print( )関数で実際にデータが取得できているかどうかを確認してみるとー
実行結果:データの確認
・米国10年債利回り
・ナスダック
データが多すぎるときは、以下のようにコードを書いて、最初と最後だけをチェックすればOKです。
参考
・head( )関数:最初の5つのデータだけを表示する
・tail( )関数:最後の5つのデータだけを表示する
なお、カッコ内に数字を入れると、その分だけのデータが表示されます。
例えば”10”と入力すると、最初(最後)から10個のデータが表示されます。
ちなみにデフォルトは『5つ』です。
matplotlibでチャートを描画する
さて、マーケットデータが取得できた後は、いつもどおり可視化ライブラリの『matplotlib』を使ってビジュアルチャートを作成します。
matplotlibって何?という方は、以下のリンク先をご覧ください。
matplotlibとは?
Pythonのコード例:チャートの作成
from matplotlib import rcParams rcParams['figure.figsize']=15,10 rcParams['font.size']=11 rcParams['font.family']='sans-serif' rcParams['font.sans-serif']=['Hiragino Maru Gothic Pro', 'Yu Gothic', 'Meirio', 'Takao', 'IPAexGothic', 'IPAPGothic', 'VL PGothic', 'Noto Sans CJK JP'] fig = plt.figure() ax1 = fig.add_subplot(2,1,1) ax1.plot(us10yt,color='black',lw=3) ax1.set_title('米10年債利回り',fontsize=20) plt.grid(True) ax2 = fig.add_subplot(2,1,2) ax2.plot(nsdq,color='green',lw=3) ax2.set_title('ナスダック指数',fontsize=20) plt.grid(True)
上のコードを実行すると、以下のようなビジュアルチャートが描画(びょうが)されます。
実行結果
前回の記事と違う点はひとつです。
その違いとは、”fig.add_subplot”で2つのチャートを一気に表示するようにコードを書いていることです。
この点については、以下の説明をご参照ください。
コードの説明
ここからは、上で書いたコードの詳細な説明になります。
1:まずは必要なライブラリをインポート
#pandasはデータ分析で必須のライブラリ import pandas as pd #pandas_datareaderはマーケットデータをYahoo!financeから取得するためのライブラリ import pandas_datareader as web #matplotlibはデータ可視化のライブラリ import matplotlib.pyplot as plt #下のように書くことでjupyter上でチャートが表示される %matplotlib inline
前回の記事でも指摘しましたが、ライブラリのインポートは”公式”みたいなもんです。
書いていれば自然と慣れていきます。
2:マーケットデータの取得
#最初のデータ取得日を設定、1月1日は休日のため2020年12月31日のデータから取得する start='2020-12-31' #米国長期金利(10年債利回り)のデータを取得するコード us10yt = web.DataReader(data_source='yahoo', name='^TNX', start=start, end='2021-12-31')['Adj Close'] #ナスダックのデータを取得するコード nsdq=web.DataReader(data_source='yahoo', name='^IXIC', start=start, end='2021-12-31')['Adj Close']
ポイントは『DataReader』の引数です。
DataReaderの引数
・data_source:ここで”yahoo”と設定してyahoo!financeからデータを取得する
・name:ここで取得したいデータのティッカーコードを指定
・start&end:ここで取得したいデータの期間を設定
・['Adj Close']:”Adj Close”のみのデータを取得するコード
なお、yahoo!financeのティッカーコードについては以下の記事をご覧だくさい。
-
関連記事【Python】Yahoo!financeのデータでローソク足を作成してみよう
続きを見る
ちなみに米国10年債利回りのティッカーコードは『^TNX』となります。
ナスダック総合指数のティッカーコードは『^IXIC』です。
3:ビジュアルチャートの作成
さて、次はPythonでビジュアルチャートを作成するコードです。
まずはどんなチャートを作るのか?その設定からです。
#rcParamsでチャートのサイズ、フォントサイズ、フォントタイプを始めに設定 from matplotlib import rcParams #チャートのサイズを設定 rcParams['figure.figsize']=15,10 #フォントのサイズを設定 rcParams['font.size']=20 #フォントのタイプを設定 rcParams['font.family']='sans-serif' rcParams['font.sans-serif']=['Hiragino Maru Gothic Pro', 'Yu Gothic', 'Meirio', 'Takao', 'IPAexGothic', 'IPAPGothic', 'VL PGothic', 'Noto Sans CJK JP']
ポイントは『rcParams』の使い方です。
rcParamsとは?
・rcParamsはmatplotlibのレイアウト全般を設定するコード
・『plt.rcParams["設定したいパラメータ"] = (値)』でレイアウトを調節できる
チャートの設定が終わったら、次は米金利とナスダックのデータをラインチャートで可視化します。
コードは以下です。
#まずは plt.figure()でチャートの設定をして、それを変数figに格納します fig = plt.figure() #ax1という変数に米長期金利(10年債利回り)のチャートを作成するコード ax1 = fig.add_subplot(2,1,1) #チャートの色とラインの太さを設定 ax1.plot(us10yt,color='black',lw=3) #チャートのタイトルを設定 ax1.set_title('米10年債利回り',fontsize=20) #グリッドラインの表示(True) plt.grid(True) #ax2 という変数に米長期金利(ナスダック)のチャートを作成するコード ax2 = fig.add_subplot(2,1,2) #チャートの色とラインの太さを設定 ax2.plot(nsdq,color='green',lw=3) #チャートのタイトルを設定 ax2.set_title('ナスダック指数',fontsize=20) #グリッドラインの表示(True) plt.grid(True)
上の注釈を読んでいただければ、どのコードがどんな役割を果たしているのか?がすぐにわかると思います。
ポイントは、6行目と20行目にある『add_subplot( )』です。
add_subplotとは
・add_subplot( )は、チャートを複数表示させたいときに使うコード
・add_subplot( 行, 列, インデックス)に数字を入れることで、何行目の何列目にどんなチャートを表示するのか?を指示する
具体的に説明します。
上で書いたコードの中に、”ax1 = fig.add_subplot(2,1,1)”があります。
このコードの意味はー
fig.add_subplotの引数について
- 2=2つの行(横の列)を作成して
- 1=最初の列(縦の列)の中の
- 1=最初のインデックス(横の列)に
- ax1というチャートを作成してください
となります。
上のコードを実行すると、米長期金利(10年債利回り)のチャートが上に表示されます。
また、上で書いたコードの中に”ax2 = fig.add_subplot(2,1,2)”があります。
fig.add_subplotの引数について
- 2=2つの行(横の列)を作成して
- 1=最初の列(縦の列)の中の
- 2=二列目のインデックス(横の列)に
- ax2というチャートを作成してください
となります。
ポイントは、2つ目の『2』です。
行(横の列)は二列作られています。
最後の引数を『2』にすることで、二列目にナスダックのチャート(ax2)が表示されるというわけです。
Pythonで相関係数をチェックしよう!
相関係数とは?
今回のテーマも、米金利とナスダックの関係について分析することです。
異なった市場の関係を見る時に必ずチェックすべきことの一つが、『相関関係』です。
この相関関係を具体的な数値で確認する指標を『相関係数』といいます。
相関係数とは
・二つの事柄のうち、ひとつが変わるともう一方はどのように変化するのかを表す指標
・相関係数は『-1~+1』の値をとる
・相関係数がプラス1に近いほど、両者は同じ方向に動く関係にある
・相関係数がマイナス1に近いほど、両者は逆の方向に動く関係にある
・ゼロに近いほど ”直線的な関係がない” と考える
色々と書きましたが、今回の例でいうならば、米金利とナスダックが同じ方向に動いていれば相関係数は『プラス』になり、お互いが逆方向に動いていれば相関係数は『マイナス』になる、というだけの話です。
そして、その関係の深さを『-1~+1』の値で見ましょう、ということです。
実際に相関係数を計算するコードを書いて見ましょう。
Pythonのコード例:年初来の相関係数
まずは、2021年1月以降、つまり年初来の相関係数をチェックしてみましょう。
価格データの取得からデータの統合まではこれまでと同じです。
#1月以降の米長期金利のデータを取得 us10yt = web.DataReader(data_source='yahoo', name='^TNX', start='2020-12-31', end='2021-12-31')['Adj Close'] #1月以降のナスダックのデータを取得 nsdq=web.DataReader(data_source='yahoo', name='^IXIC', start='2020-12-31', end='2021-12-31')['Adj Close'] #concat関数でデータの統合 df = pd.concat([us10yt,nsdq],axis=1) #columnsでカラム名の変更 df.columns=('US10YT','NSDQ') #.corr()で相関係数をチェック! df.corr()
相関係数をチェックするコードは、一番最後の行で書いたコード『df.corr()』です。
相関係数は英語で ”correlation” といいます。
よって、『corr()』は、”correlation” の略です。
『df.corr()』を実行すると、以下の結果が表示されます。
実行結果
マイナスの値ではありますが、限りなくゼロに近いですね。
このため、1月のはじめから3月9日(データを取得した最終日)までの米金利とナスダックには、同じ方向に動く関係も、逆の方向に動く関係もないことがわかります。
では、次に2021年2月以降の相関係数をチェックしてみましょう!
Pythonのコード例:2月以降の相関係数
上で書いたコードとの違いは、変数『○○_feb』と最初のデータ取得日のstart='2021-01-29'の箇所(4行目と11行目)だけです。
#2月以降の米長期金利のデータを取得 us10yt_feb = web.DataReader(data_source='yahoo', name='^TNX', start='2021-01-30', end='2021-12-31')['Adj Close'] #2月以降のナスダックのデータを取得 nsdq_feb=web.DataReader(data_source='yahoo', name='^IXIC', start='2021-01-30', end='2021-12-31')['Adj Close'] #concat関数でデータの統合 df_feb = pd.concat([us10yt_feb,nsdq_feb],axis=1) #columnsでカラム名の変更 df_feb.columns=('US10YT','NSDQ') #.corr()で相関係数をチェック! df_feb.corr()
『df_feb.corr()』を実行すると、以下の結果が出てきます。
実行結果
マイナスの値が『0.62』と、強い逆の相関の関係が見て取れます。
米金利が上昇(低下)すれば、ナスダックは下落(上昇)するという関係が具体的な数値で確認できました。
seabornで分析してみよう!
さて、次はいよいよ『seaborn』の出番です。
seabornとは?
Pythonでチャートやグラフを作成する時、必ず使うのが『matplotlib』というライブラリです。
そして、matplotlibのデザインをよりカッコよくしたり、相関関係といった統計の観点から分析する場合は『seaborn』というライブラリをよく使います。
seabornについては以下の記事をご覧ください。
seabornとは?
さて、Pythonでの分析の結果、米金利とナスダックは2月以降、逆の関係(逆相関)にあることがわかりました。
では、逆相関のチャートとはどんなカタチをしているのか?
この点を、seabornのビジュアルチャートで確認してみましょう。
seabornのコード例:regplot
コードは以下の1行です。
#regplotを使って相関関係を確認するコード sns.regplot(data=df_feb, x='US10YT', y='NSDQ')
上のコードを実行すると以下のチャートが表示されます。
実行結果
米長期金利とナスダックの相関チャート
『regplot』は、両者の相関関係をシンプル表示してくれます。
今回は、ラインが見事に”右肩下がり”となっていることがわかります。
このカタチは、2月以降、米金利とナスダックの関係が”逆の相関”にあることを示しています。
また、『jointplot』という方法では、”ヒストグラム”も同時に表示することができます。
実際に見てみましょう。
seabornのコード例:jointplot
♯ヒストグラムを同時に表示する場合は『jointplot』を使う sns.jointplot(data=df_feb,x='US10YT',y='NSDQ',kind='reg');
『regplot』のところを『jointplot』に変更するだけです。
実行すると以下のチャートが表示されます。
実行結果
相関チャート画像の外側に、 ”ヒストグラム”が表示されました。
山なりの一番高い部分が、最も多くデータが観測されたところを示しています。
相関係数の注意点
相関係数をチェックする際、いくつかの注意点があります。
注意点
- 必ず数値とチャートでダブルチェックすること
- 数値がゼロに近くても相関関係が全くないということを意味しない
- マーケット分析では”収益率”で相関関係をチェックすること
マーケットの相関関係分析する時は、相関係数の数値だけでなくビジュアルチャートも必ずチェックしましょう。
ラインの傾きを確認したり、他の期間や他の銘柄との相関を比較することで、相関関係の度合いがより正確にわかるからです。
そしてゼロの相関は ”直線的な関係がない”という意味であって、まったく相関がないという意味ではありません。
直線的な関係がないということは、右肩上がり(下がり)のラインの関係にない、というだけのことです。
最後に一番重要なのが『収益率』でチェックする、ということです。
今回は、単純に米金利の水準とナスダックの価格から相関係数を計算して、両市場の関係をチェックしました。
しかし、実際の実務では『収益率』を比較して、相関係数を計算して両市場の関係をチェックします。
この点は非常に重要ですので、次回の記事で解説します。
こうご期待!
統計学を学ぶための『2つの良書』
まずは自分に合うかどうかを確認しよう
こんな質問をいただくことがあります。
統計学を専門に教えている講座に参加するという手もあります。
しかし、統計学の基礎を学ぶだけでも1年はかかります。
応用以上(実践)となれば、最低でも2年から3年は必要でしょう。
つまり、統計学を学ぶには長い時間がかかるということです。
このため、途中で止めて時間を無駄にするケースがあります。
時間を無駄にするリスクを考えるとー
ポイント
まずは統計学の勉強が自分に合っているかどうか?
この点を確かめることからおすすめします。
それを確かめるために、最初は以下の本を読んで統計学のイメージをつかんでください。
- こども統計学 なぜ統計学が必要なのかがわかる本
この本は文字の大きさも程よく、読みやすい文章の構成となっています。
また、カラーの図柄を多く使っているため、スラスラと読めます。
さらに、統計学で注意すべき点についても触れています。
『なるほど!統計学を使うとこんなことがわかるんだ!』
『統計学で分析する時はここに注意した方が良いんだ!』
というイメージを得るには、もってこいの良書です。
自分に合っていると思ったら次の本はこれ!
『こども統計学 なぜ統計学が必要なのかがわかる本』を読んで、統計学の勉強が自分に合っている!と思ったら、次におすすめする本は以下です。
- コア・テキスト統計学
この本をおすすめする理由は、4つあります。
おすすめの理由
- 統計学の基本的な知識がこの1冊につまっている
- 難しく見える数式も文章を読めば理解できる
- 具体例を用いて統計学の使い方を説明している
- 練習問題と詳細な答えの解説がついている
本気で統計学の基本を学ぶなら、『コア・テキスト統計学』が手元にあれば十分です。
少なくとも、基本を学ぶ段階ではこの一冊を読み込んでおけば大丈夫です。
なぜ大丈夫と言い切れるのか?
それはジェイ自身が、この本で統計学の基本を学んだからです。
全部で300ページちょっとあり中々ハードでしたが、通勤の途中や仕事の帰りに勉強して、約2か月くらいで読み終えました。
ジェイの経験からいっても、『コア・テキスト統計学』は基本が学べる『良書』だと自信を持って言えます。
この記事と出会ったのも何かの縁です。
統計学に興味のある人は、ぜひ上の2冊から挑戦してみることをおすすめします!
※2021年3月11日追記
まとめ
まとめ
- Pythonを使えば簡単にビジュアルチャートが作成できる
- Pythonを使えば簡単に相関係数を計算して他の市場との関係をチェックできる
- seabornを使えば簡単に相関チャートを作ることができる
- 統計学を学ぶための2冊の『良書』について
注記事項
当サイトのコンテンツを参考に投資を行い、その後発生したいかなる結果についても、当サイト並びにブログ運営者は一切責任を負いません。すべての投資行動は『自己責任の原則』のもとで行ってください。
最後に
Pythonを学びたい方へ
今やPythonは、マーケットの分析に限らず、あらゆる分野で使われているプログラミング言語です。
Pythonを学んでおけば株式の投資に役立つだけでなく、これからのキャリアを形成する上でも力強い武器となるでしょう。
『私もPythonを学んでみたい!』
という人は以下のリンク先をご覧ください。
プログラミングを学ぼう
なぜプログラミングを学ぶ必要があるのか?その理由がわかります。
そして、ジェイが『これがPythonを効率的に学ぶ方法だ!』と自信をもっておすすめする学習方法について解説しています。
この記事と出会ったのも何かの縁です。
ぜひチャレンジしてみてください!