Pythonコード集

相関分析シリーズ後編 Pythonで線形の相関チャートを作ってみよう!

目安:この記事は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の代表的なライブラリはPandasmatplotlib』です。
今回もこれら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 価格データの編集

次は、価格データの編集です。

Aさん
編集?どんな編集をするんですか?

 

相関分析をするときは、そのまま価格データを使うのではなく”編集”することをおすすめします。

では、どんな編集をするのか?

それはー

日ごとの変動幅を計算する

ことです。

簡単に言えば、前の日と比べて今日はどのくらい価格が上昇したのか?下落したのか?を見ましょう、ということです。

価格差のことを『差分』といいます。

差分は、引き算をするだけで簡単に計算ができます。

しかしジェイは、”収益率”を重視しています。なので、単に引き算するのではなくー

対数差分

を計算して分析しています。

対数差分... 難しい言葉が出てきましたね。

対数差分について簡単に言うと、投資に使ったお金に対して今はいくらの損益がでているのか?を確認するための数字です。

もっと簡単な言葉で言えば、”収益率” ということです。

言葉は難しくても、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つの線形チャートが重なって表示されていることが確認できました。

 

最後2行のコードの説明です。

ラベルの設定

・plt.ylabel( ):y軸に表示したいラベルの名前を設定するコードです。x軸のラベルなら ”plt.xlabel( )” となります。

legend(凡例) の設定

・plt.legend:"loc = "で凡例を表示する場所を設定します。今回の "2""左上" に表示する設定です。

・plt.legend:"fontsize= "で凡例の文字の大きさを設定します。

 

Pythonを使えば簡単にチャートが作成できる

このようにPythonmatplotlibseabornを使えば、簡単にチャートが作成できます。

もちろん、コードを組む時はある程度の時間が必要です。

しかし、一度コードを組んでしまえばあとはそのコードを実行するだけで、一瞬であなたが作りたいチャートが完成します。

この記事をきっかけにPythonに興味を持たれた方は、以下の『Pythonを学びたい方へ』をご覧ください。

ジェイが自信を持っておすすめする『Pythonを効率的に学習する方法』をお教えします!

 

Pythonを学びたい方へ

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

今回の記事でも、Pythonのプログラミングで最も使われるmatplotlibseabornを用いて、線形の相関チャートを作成しました。

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

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

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

Pythonを効率的に学ぶ方法を知りたいなら以下をクリック ▼

Pythonを学ぼう

 

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

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

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

 

まとめ

・Pandasを使えば簡単に価格データが取得できる
・NumPyを使えば色んな計算が楽にできる
・matplotlibとseabornを使えば相関チャートが簡単に作れる

今回で『相関分析シリーズ』は終了です。

相関分析は奥の深い分野です。

また、別のかたちで分析の記事を書きます。

こうご期待!


注記事項

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

 

-Pythonコード集