アンゴウのPython投資でFIREへ

元公務員がPythonと投資を学び、FIRE(早期リタイア)を目指しています。

MENU

【初級】Pythonで原油との相関関係を表した図を取得する方法について

どうもアンゴウです。

 

本日は、Pythonでダウ30の配当利回りとパフォーマンスの関係を表した散布図を取得する方法について説明します。今日もChatGPTにはプログラムの評価をしてもらいます。

 

ちなみに、まだ始める準備ができていない人は↓から

angousan.hatenablog.com

では、先に手っ取り早くコードを知りたい方はこちらから

このコードをコピーして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
#seaborn を"sns"へ短くし、省略した形ででインポート
import seaborn as sns
import yfinance as yf
#seabornのフォントサイズを設定
sns.set(font_scale=1.5)
#seabornのチャートスタイルを設定
sns.set_style('whitegrid')
#日付の設定を行うライブラリをインポート
import datetime
import numpy as np

# "tickers" という変数に取得したい原油と米エネルギー株のティッカーコードを入れる
tickers = ['CL=F','XOM','OXY','CVX','DVN']
# "df" という変数に空の価格データを入力するためのフレームを作成
df = pd.DataFrame()
# for文でdf(空のデータフレーム)の中に、tickersで指定した原油と米エネルギー株の価格データを入れていく
for i in tickers:
    df[i] = yf.download(i,start='2022-06-30', 
                           end=datetime.datetime.today())['Adj Close']

# 変数.columnsでカラム名を変更
# 今回は原油のみを ”NY_WTI” に変更
df.columns = ('NY_WTI','XOM','OXY','CVX','DVN')

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

# np.log()が対数差分を計算するコード
df_log = np.log(df)
# diff()が引き算(差分を計算)するコード
df_diff = df_log.diff(1)
# dropnaはデータが空欄のところを削除するコード
df_diff.dropna(inplace=True)

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

# plt.figure(figsize=())でチャートのサイズを決める
plt.figure(figsize=(15,9))
# sns.heatmapでヒートマップをつくる
sns.heatmap(data = df_diff.corr(),annot=True,cmap='Oranges')

# 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=(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');

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);


結果はこちら↓(プラウザに表示)

 

このように原油との相関図を取得できました。

2022年6月30日を起点に現在までの各銘柄の相関についてですが、エクソンモービルが一番相関が高いです。逆に今回の銘柄の中ではデボンエナジーの相関が低いことがわかります。

 

次に、各銘柄(1番相関の高い銘柄と低い銘柄を抜粋)のプロット図をだして、相関を確認します。右肩上がりになっているほど相関が強いことがわかります。ただ、注意点としてプロットがまばらになっているとデータの信頼性が低くなります。

 

どちらも中心線から近い位置にプロットがあることからデータとしての信頼性は十分かと思います。

 

こちらのプログラムを使えば天然ガスやゴールドとの相関など色々なコモデティとの相関をみることができます。

 

僕は一時的にエナジー関連の銘柄が上がると予想しています。実経済はどうか?という部分はおいて最近の経済指標(PCE等)をみた場合に経済はまだ強いです。ただ、これも一時的でインフレは次第に終わりを迎えると思います。

↓これはTLT(長期国債)のチャートですが、インフレ局面では長期国債は売られます。そのため、チャートは下がっています。ただ、FRBの利上げは入り口なのか?出口なのか?といえばもう出口に近いと考えています。これからは長期的に買い増しをしていきたい局面にきていると思います。

 

僕は、FIREを目指すために、今後の資産形成の一つの戦略として高配当銘柄には積極的に投資をしていく予定です。こういった数十年に1度のチャンスをものにできればきっと億ることができるのではないかと思っています。

 

日本もNISAの制度を拡充しています。このNISAへの優遇が来年度よりスタートする中で準備をしている人と準備ができていない人とでは、数十年後の未来に大きな差がでてくる可能性があります。皆さんも資産形成に取り組んでいくには、今はいい時期です。今をよりよくするのは自分しかいないので、皆さんも今は苦しいですが一緒に頑張りましょう。

 

今回は、ここまでの説明になります。

では、最後にこのプログラムをChatGPTに聞いてみます。

このコードは、Pythonで株価データを取得して、価格変動の相関関係や相関係数を可視化するためのものです。以下がコードの説明になります。

  • pandasをpdへ短くし、省略した形ででインポートする。同様に、pandas_datareaderを"web"、matplotlibを"plt"、seabornを"sns"へ短くし、省略した形ででインポートする。
  • yfinanceをyfとしてインポートする。
  • seabornのフォントサイズを設定し、チャートスタイルを設定する。
  • datetimeとnumpyをインポートする。
  • "tickers" という変数に取得したい原油と米エネルギー株のティッカーコードを入れる。
  • "df" という変数に空の価格データを入力するためのフレームを作成する。
  • for文でdf(空のデータフレーム)の中に、tickersで指定した原油と米エネルギー株の価格データを入れていく。
  • 変数.columnsでカラム名を変更し、今回は原油のみを ”NY_WTI” に変更する。
  • np.log()が対数差分を計算するコードであり、diff()が引き算(差分を計算)するコードである。dropnaはデータが空欄のところを削除するコードである。
  • 最初の5つと最後の5つを表示する。
  • plt.figure(figsize=())でチャートのサイズを決め、sns.heatmapでヒートマップを作成する。
  • sns.regplotで線形の相関チャートを作成する。x軸はNY_WTI原油価格)、y軸はXOM(エクソンモービル)やDVN(デビオン・エナジー)などのエネルギー株価格である。
  • plt.ylabel('XOM / DVN')でy軸のラベルを設定し、plt.legend(loc=2,fontsize=30)でラベルを表示する位置とフォントサイズを設定する。

 

ChatGPTがいい感じにまとめてくれています。

 

それでは、最後まで読んでいただきありがとうございました。

 

投資の勉強に活用中↓(無料体験有です)

amzn.to

オススメ本紹介

アマゾン

楽天