目安:この記事は3分で読めます
いよいよ『米エネルギー株と原油価格の相関分析シリーズ』の最終回です。
前回はPythonを使って、ヒートマップの相関チャートを作成するプログラミングコードについて解説しました。
今回は同じ相関チャートでも、"線形チャート" のプログラミングコードについて解説します。
まだ前回の記事を読んでいないという方は、以下のリンク先からご覧ください。
-
【Python】米エネルギー株と原油価格の相関関係を分析してみよう 後編
続きを見る
前回の記事をすでにお読みの方は、『目次 → Step4 チャートの作成』からお読みください。
今回のテーマ
プログラミング言語 ”Python” を使って ”線形” の相関チャートを作成する方法
Pythonを効率的に学ぶ方法を知りたいなら以下をクリック ▼
Pythonを学ぼう
この記事の対象となる人
こんな人におすすめ
- Pythonに興味がある人
- Pythonを学びたいと思っている人
- Pythonを使って株価の分析をしたい人
結論からいいます
結論
- ”matplotlib” と "seaborn" を使えば簡単にチャートがつくれる
Pythonでヒートマップを作成
さて、さっそく本題です。
今回は、『米エネルギー株と原油価格の相関分析シリーズ』の中編で作った ”線形” の相関チャートを作成するコードをご紹介します。
関連記事 ▼
-
【Python】米エネルギー株と原油価格の相関関係を分析してみよう 中編
続きを見る
コードの手順
まずは、ザっとコードの手順を確認しましょう。
step.1
ライブラリのインポート
step.2
Yahoo!finance US から価格データを取得
step.3
価格データの編集
step.4
チャートの作成
となります。
Step1 ライブラリのインポート
Pythonのプログラミングでは、最初に必要なライブラリをインポートすることから始まります。
ライブラリとは、簡単に言えば以下のことです。
よく使う複数のプログラムをひとつにまとめたファイル
Pythonの代表的なライブラリは『Pandas』や『matplotlib』です。
今回もこれら2つのライブラリを使いまくります。
実際に見てみましょう!
・Pythonコード
#pandasを"pd"というかたちでインポート import pandas as pd #pandas_datareaderを"web"というかたちでインポート import pandas_datareader as web #matplotlibを"plt"というかたちでインポート import matplotlib.pyplot as plt #matplotlibから"rcParams"をインポート from matplotlib import rcParams %matplotlib inline #seaborn を"sns"というかたちでインポート import seaborn as sns #seabornのフォントサイズを設定 sns.set(font_scale=1.5) #seabornのチャートスタイルを設定 sns.set_style('whitegrid') #日付の設定を行うライブラリをインポート import datetime
プログラミングのコードは、見慣れていないと『???』になってしまいます。
しかし、難しく考える必要はありません。
上のコードは、以下の機能を持つライブラリを使うためにインポートしただけです。
コードの説明
・pandasは ”Python版のエクセル” です。Pythonの分析では必須のライブラリ
・pandas_datareaderは価格データを取得するためのライブラリ
・matplotlibはPythonでチャートやグラフを作成するための必須ライブラリ
・matplotlibの『rcParams』はチャートやグラフのスタイルを決めるためのライブラリ
・seaborn はmatplotlibを ”カッコよくする” ためのライブラリ
ザっと、以上のことを頭の中に入れておけば大丈夫です!
Step2 価格の取得
ライブラリのインポートが終わったら、次はいよいよ価格データの取得です。
・Pythonコード
# "tickers" という変数に取得したい原油と米エネルギー株のティッカーコードを入れる tickers = ['CL=F','XOM','OXY','CVX','DVN'] # "df" という変数に価格データを入力するための空のフレームを作成 df = pd.DataFrame() # for文でdf(空のデータフレーム)の中に、tickersで指定した原油と米エネルギー株の価格データを入れていく for i in tickers: df[i] = web.DataReader(name=i, data_source='yahoo', start='2021-01-01', end=datetime.datetime.today())['Adj Close'] # "変数.columns" でカラム名を変更 # 今回は原油のみを ”NY_WTI” に変更 df.columns = ('NY_WTI','XOM','OXY','CVX','DVN')
コードの説明です。
コードの説明:変数
・tickers という変数を作りました。変数はデータを入れておく単なる箱です。なので変数の名前は自由に決めてOKです!
・tickersには複数の価格データを入れます。その場合は[]でくくります。これを ”リスト形式” といいます
コードの説明:df
・dfは、DataFrame(データフレーム)の略です。変数ですので名前は自由に決めてOK!
・”pd” が最初にインポートしたpandasのことです
・"pd.DataFrame()" と書くことでPython版のエクセルが作れます
上で書いたコードは、Pythonの定型文のひとつと考えておけば大丈夫です。
定型文なので、コードを書いていくうちに慣れていきます。
さて、ここで価格データが取得できているかどうか?を確認をしてみましょう。
・Pythonコード
# 最初の5つと最後の5つを表示する df.head(),df.tail()
※中編の記事をアップしたのが5月10日。今回の記事をアップしたのが5月16日です。このため、今回は14日(金)のNY終値までの価格データを取得しています。
次はコードの説明です。
コードの説明:head & tail
・head()は先頭から5つのデータを表示するコード
・tail()は最後から5つのデータを表示するコード
ちゃんと価格データが取得されているかどうか?を確認するとき、全部のデータを確認することは時間の無駄です。
なので、一般的には最初と最後の箇所をhead()とtail()で確認します。
問題なくデータが取得出来ていれば、次に進みます。
Step3 価格データの編集
次は、価格データの編集です。
相関分析をするときは、そのまま価格データを使うのではなく”編集”することをおすすめします。
では、どんな編集をするのか?
それはー
日ごとの変動幅を計算する
ことです。
簡単に言えば、前の日と比べて今日はどのくらい価格が上昇したのか?下落したのか?を見ましょう、ということです。
価格差のことを『差分』といいます。
差分は、引き算をするだけで簡単に計算ができます。
しかしジェイは、”収益率”を重視しています。なので、単に引き算するのではなくー
対数差分
を計算して分析しています。
対数差分... 難しい言葉が出てきましたね。
対数差分について簡単に言うと、投資に使ったお金に対して今はいくらの損益がでているのか?を確認するための数字です。
もっと簡単な言葉で言えば、”収益率” ということです。
言葉は難しくても、NumPyを使えば簡単に計算ができます。
早速コードをみてみましょう!
・Pythonコード
# np.log()が対数差分を計算するコード df_log = np.log(df) # diff()が引き算(差分を計算)するコード df_diff = df_log.diff(1) # dropnaはデータが空欄のところを削除するコード df_diff.dropna(inplace=True)
次はコードの説明です。
対数の計算
・対数の計算は”np.log(df)”で簡単にできます。log = 対数です。なので、対数にしたいデータフレームをカッコの中に入れるだけです。今回のデータフレームは ”df” となります。
対数差分の計算
・対数差分の計算は ”変数.diff( )” で簡単にできます。カッコの中の数字の分だけ差分されます。今回は ”1” を入れているので、前日と当日の1日分の価格差を計算しています。
データがないところを削除
・差分を取ると最初のデータフレームが空欄となります。データがないところは通常 ”dropna( )” で削除します。カッコの中に ”inplace=True” と入力すると、削除された状態ですぐに保存できます。
最後に対数差分の価格データを確認してみましょう。
# 最初の5つと最後の5つを表示する df_diff.head(),df_diff.tail()
ちゃんと計算できていることが確認できました。
Step4 チャートの作成
さて、最後はいよいよチャートの作成です。
早速コードからみてみましょう!
・Pythonコード
# plt.figure(figsize=())でチャートのサイズを決める plt.figure(figsize=(15,10)) # sns.regplotで線形の相関チャートをつくる sns.regplot(data=df_diff,x=df_diff['NY_WTI'],y=df_diff['XOM'], scatter_kws={'color':'blue'}, line_kws={'color':'darkblue'}, label='XOM')
コードの説明です。
チャートのサイズを決める
・plt.figure(figsize=( ))は、チャートのサイズを決める定型文です。figsizeのカッコの中で ”横、縦” のサイズを数字で決めます。今回は横を15、縦を10とする横長のサイズとしました。
チャートの作成
・sns.regplot( )は、線形の相関チャートを作るときの定型文です。"data" に相関関係を計算したいデータフレームを入れるだけで線形の相関チャートが完成します。
regplotの引数について
・data:ここに分析したいデータフレームを指定します。今回はライブラリのインポートのところで作った ”df” となります。
・x, y:ここで表示したい2つのデータを指定します。今回はx軸に原油、y軸にエクソンモービルを指定しました。
・scatter_kws:ここでプロットされた点の色やカタチを設定します。
・line_kws:ここでラインの色やスタイルを設定します。
・label:ここでデータのラベルを設定します。
結果をみてみましょう。
簡単に線形の相関チャートができました!
y軸を『デボンエナジー(DVN)』にするだけで、今度は『原油価格とDVN』のチャートができます。
・Pythonコード
plt.figure(figsize=(15,10)) # y=df_diff['DVN']に変更 # label='DVN'に変更
sns.regplot(data=df_diff,x=df_diff['NY_WTI'],y=df_diff['DVN'], scatter_kws={'color':'#48d1cc'}, line_kws={'color':'#48d1cc'}, label='DVN');
結果をみてみましょう。
y軸が『デボンエナジー(DVN)』になっていることが確認できました。
2つのチャートを重ねて表示する場合は、上の2つのコードを一気に書くだけです。
・Pythonコード
plt.figure(figsize=(15,10)) sns.regplot(data=df_diff,x=df_diff['NY_WTI'],y=df_diff['XOM'], scatter_kws={'color':'blue'}, line_kws={'color':'darkblue'}, label='XOM') sns.regplot(data=df_diff,x=df_diff['NY_WTI'],y=df_diff['DVN'], scatter_kws={'color':'#48d1cc'}, line_kws={'color':'#48d1cc'}, label='DVN') # y軸のラベルを設定 plt.ylabel('XOM / DVN') # ラベルを表示する位置とフォントサイズを設定 plt.legend(loc=2,fontsize=30);
結果をみてみましょう。
2つの線形チャートが重なって表示されていることが確認できました。
最後2行のコードの説明です。
ラベルの設定
・plt.ylabel( ):y軸に表示したいラベルの名前を設定するコードです。x軸のラベルなら ”plt.xlabel( )” となります。
legend(凡例) の設定
・plt.legend:"loc = "で凡例を表示する場所を設定します。今回の "2" は "左上" に表示する設定です。
・plt.legend:"fontsize= "で凡例の文字の大きさを設定します。
Pythonを使えば簡単にチャートが作成できる
このようにPython、matplotlib、seabornを使えば、簡単にチャートが作成できます。
もちろん、コードを組む時はある程度の時間が必要です。
しかし、一度コードを組んでしまえばあとはそのコードを実行するだけで、一瞬であなたが作りたいチャートが完成します。
この記事をきっかけにPythonに興味を持たれた方は、以下の『Pythonを学びたい方へ』をご覧ください。
ジェイが自信を持っておすすめする『Pythonを効率的に学習する方法』をお教えします!
Pythonを学びたい方へ
今やPythonは、マーケットの分析に限らず、あらゆる分野で使われているプログラミング言語です。
今回の記事でも、Pythonのプログラミングで最も使われる『matplotlib』と『seaborn』を用いて、線形の相関チャートを作成しました。
Pythonを学んでおけば株式の投資に役立つだけでなく、これからのキャリアを形成する上でも力強い武器となるでしょう。
『私もPythonを学んでみたい!』
という人は以下のリンク先をご覧ください。
Pythonを効率的に学ぶ方法を知りたいなら以下をクリック ▼
Pythonを学ぼう
なぜプログラミングを学ぶ必要があるのか?その理由がわかります。
そして、『これがPythonを効率的に学ぶ方法だ!』と自信をもっておすすめする学習方法について解説しています。
この記事と出会ったのも何かの縁です。
ぜひチャレンジしてみてください!
まとめ
・Pandasを使えば簡単に価格データが取得できる
・NumPyを使えば色んな計算が楽にできる
・matplotlibとseabornを使えば相関チャートが簡単に作れる
今回で『相関分析シリーズ』は終了です。
相関分析は奥の深い分野です。
また、別のかたちで分析の記事を書きます。
こうご期待!
注記事項
当サイトのコンテンツを参考に投資を行い、その後発生したいかなる結果についても、当サイト並びにブログ運営者は一切責任を負いません。すべての投資行動は『自己責任の原則』のもとで行ってください。