Pythonコード集

【Python】米エネルギー株と原油価格の相関関係を分析してみよう 後編

目安:この記事は3分で読めます

 

FRB
今回はPythonコードの解説ですね。難しそう...

いよいよ『米エネルギー株と原油価格の相関分析シリーズ』の後編となりました。

後編では、Pythonを使えば過去2回の記事でとり上げた相関チャートが簡単につくれる、ということについて解説します。

はじめは一気にPythonコードを紹介したいと考えていました。

しかし、記事を書いているうちにかなり長くなってしまったので、後編は二回に分けて解説します。

今回は、ヒートマップの相関チャートについてです。

今回のテーマ

プログラミング言語 ”Python” を使ってヒートマップの相関チャートを作成する方法

 

まだ、前編と中編を読んでいないという方は、以下のリンク先からご覧ください。

前編

【Python】米エネルギー株と原油価格の相関関係を分析してみよう 前編

続きを見る


中編

【Python】米エネルギー株と原油価格の相関関係を分析してみよう 中編

続きを見る


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

プログラミングを学ぼう

 

この記事の対象となる人

こんな人におすすめ

  • Pythonに興味がある人
  • Pythonを学びたいと思っている人
  • Pythonを使って株価の分析をしたい人

 

結論からいいます

結論

  • ”matplotlib” "seaborn" を使えば簡単にチャートがつくれる

 

Pythonでヒートマップを作成

さて、さっそく本題です。

今回は、前編で作った ”ヒートマップ” のチャートを作成するコードをご紹介します。

 

コードの手順

まずは、ザっとコードの手順を確認しましょう。


  • step.1

    ライブラリのインポート


  • step.2

    Yahoo!finance から価格データを取得


  • 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月14日です。このため原油価格のデータが14日まで、米エネルギー株の株価が13日のNY終値まで取得されています。

 

次はコードの説明です。

コードの説明:head & tail

head()は先頭から5つのデータを表示するコード
tail()は最後から5つのデータを表示するコード

ちゃんと価格データが取得されているかどうか?を確認するとき、全部のデータを確認することは時間の無駄です。

なので、一般的には最初と最後の箇所を確認します。

問題なくデータが取得出来ていれば、次に進みます。

 

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)”で簡単にできます。対数にしたいデータフレームをカッコの中に入れるだけです。今回のデータフレームは ”df” となります。

対数差分の計算

・対数差分の計算は”変数.diff( )”で簡単にできます。カッコの中の数字の分だけ差分されます。今回は”1”を入れているので、前日と当日の1日分の価格差を計算しています。

データがないところを削除

・差分を取ると最初のデータフレームは空欄となります。データがないところは通常 ”dropna( )” で削除します。カッコの中に ”inplace=True” と入力すると、削除された状態ですぐに保存できます。

 

最後に対数差分の価格データを確認してみましょう。

# 最初の5つと最後の5つを表示する
df_diff.head(),df_diff.tail()

対数差分の価格データ

ちゃんと計算できていることが確認できました。

 

Step4:チャートの作成

さて、最後はいよいよチャートの作成です。

早速コードからみてみましょう!

・Pythonコード

# plt.figure(figsize=())でチャートのサイズを決める
plt.figure(figsize=(15,9))

# sns.heatmapでヒートマップのチャートをつくる
sns.heatmap(data = df_diff.corr(),annot=True,cmap='Blues');

 

コードの説明です。

チャートのサイズを決める

・plt.figure(figsize=( ))は、チャートのサイズを決める定型文です。figsizeのカッコの中で ”横、縦” のサイズを数字で決めます。今回は横を15縦を9とする横長のサイズとしました。

チャートの作成

sns.heatmap( )は、ヒートマップのチャートを作るときの定型文です。"data" に相関関係を計算したいデータフレームを入れるだけでヒートマップのチャートが完成します。
"annot=True" とすれば相関係数が表示されます。また、cmap='Blues'ではチャートのグラデーションを決めることができます。今回は青のグラデーションを選びました。

結果をみてみましょう。

ヒートマップの相関チャート

簡単にヒートマップの相関チャートができました!

 

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

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

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

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

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

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

 

Pythonを学びたい方へ

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

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

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

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

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

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

プログラミングを学ぼう

 

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

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

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

 

まとめ

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

次回は線形チャートのPythonコードについて解説します。

こうご期待!


注記事項

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

 

-Pythonコード集