Pythonコード集

【Python】米株データの取得とパフォーマンスチャートの作成

Aさん
スクレイピングシリーズの記事で、Pythonを使えば色々な分析ができることはわかりました。
最近ダウやナスダックといった指数の動きが激しいですが、これらのパフォーマンスもPythonを使えば簡単に確認できますか?

 

株式に限らず、投資の世界ではパフォーマンス(騰落率)を確認することはとても重要なことです。

しかしパフォーマンスを確認するために、いちいち取引プラットフォームにログインしたり、Yahoo!financeで設定したりして時間を費やしている人を多く見かけます。

 

ハッキリ言います。

Pythonのプログラムを一度組んでしまえば、たった数秒でマーケットのパフォーマンスを確認することができます。

 

そこで今日はー

Pythonを使った米株価指数のパフォーマンスを確認する方法

についてお話します。

 

今回の記事を最後までお読みいただければ、株価指数だけでなく、あらゆる銘柄のパフォーマンスを簡単に確認することができます!

 

記事を読んでわかること

わかること

  • Pythonで株価データを取得する方法
  • Pythonで株価のパフォーマンスチャートを作成する方法

 

この記事の対象となる人

こんな人におすすめ

  • プログラミング言語『Python』に興味がある人
  • Pythonを使って効率的に情報を得たい人

 

結論からいいます

  • Pythonを使えば簡単に株価データを取得できる
  • Pythonを使えば簡単に株価のパフォーマンスチャートを作成できる

 

APIで株価を取得してみよう

スクレイピングでデータが取得できない場合

前回の記事では、Pythonでデータを取得する『スクレイピング』についてお話しました。

その際、スクレイピングで注意すべき点としてー

注意すべきこと

  • WEBサイトによってはスクレイピングでのアクセスを制限していることがある
  • アクセスの頻度によっては違法な攻撃として法的に処罰されてしまう可能性がある

ということを指摘しました。

 

スクレイピングでデータの取得ができない場合ー

API
Application Programming Interface

という方法を使ってデータを取得します。

 

APIを使ってYahoo!financeからデータを取得!

APIって何?という方は、Google先生に聞けばすぐにわかります。

なのでこのブロブでは、APIを使ってYahoo!financeから実際に株価のデータを取ってくる実践的な方法をお話します。

その方が、APIに対する理解も深まると思います。

 

今回のテーマは『米株価指数のパフォーマンス』なので、以下3つのパフォーマンスを確認してみましょう。

・ダウ平均

・S&P500指数

・ナスダック総合指数

期間は1直近の1週間としましょう。

 

まずは、株価を取得するコードからです。

Pythonのコード例:株価の取得

import pandas as pd
import pandas_datareader as web

import matplotlib.pyplot as plt
%matplotlib inline


start='2021-02-20'
end='2021-12-31'

dji = web.DataReader(data_source='yahoo', name='^DJI',start=start,end=end)
spx500 = web.DataReader(data_source='yahoo', name='^GSPC',start=start,end=end)
nasdaq = web.DataReader(data_source='yahoo', name='^IXIC',start=start,end=end)

df = pd.concat([dji['Adj Close'],spx500['Adj Close'],nasdaq['Adj Close'],nsdq100['Adj Close']],axis=1)

df.columns=('SPX500','DOW','NASDAQ')


df_normalized = (df/df.iloc[0]-1)*100
round(df_normalized,ndigits=2)

plt.rcParams['figure.figsize']=15,10
plt.rcParams['font.size']=15


df_normalized['SPX500'].plot(color='darkgreen',lw=5,label='S&P500: -1.78%')
df_normalized['DOW'].plot(color='limegreen',lw=5,label='Dow: -2.45%')
df_normalized['NASDAQ'].plot(color='blue',lw=5,label='Nasdaq Composite: -4.92%')

plt.axhline(y=0,color='black',ls="--",lw=2)
plt.ylabel('Performance %')
plt.grid(True)
plt.legend(loc='center right',fontsize=18)
plt.xlim('2021-02-19','2021-03-05')

上のコードを実行すると、以下のパフォーマンスチャートが表示されます。

実行結果

米国株価指数 先週のパフォーマンス(%)

 

青のラインの『ナスダック総合指数』の下落幅が拡大していることがわかります。

その理由は『米金利の上昇』にあります。

詳しくは、以下の記事をご覧ください。

関連記事【米株の展望】米金利の上昇がハイテク株の選別をうながす 前編

続きを見る

 

さて、次はコードの説明です。

コードの説明

1:まずは必要なライブラリのインポート

#データフレームを作るためにPandasをインポート
import pandas as pd

# pandas_datareader が株価のデータを読み込むライブラリとなる
import pandas_datareader as web

#チャートで表示するためmatplotlibをインポート
import matplotlib.pyplot as plt
%matplotlib inline

 

2:時間軸の設定

#最初のデータ取得日を設定
start='2021-02-20'

#最後のデータ取得日を設定
end='2021-2-26'

今回は『直近1週間のパフォーマンス』を取得することが目的なので、2月19日を基準日=0%となるように時間軸を設定します。

 

3:ここでYahoo!financeからAPIを使って株価のデータを取得するコードを書く

#ダウ平均の株価データ
dji = web.DataReader(data_source='yahoo', name='^DJI',start=start,end=end)

#S&P500指数の株価データ
spx500 = web.DataReader(data_source='yahoo', name='^GSPC',start=start,end=end)

#ナスダック総合指数の株価データ
nasdaq = web.DataReader(data_source='yahoo', name='^IXIC',start=start,end=end)

以上が、Yahoo!financeから株価のデータを取得するコードとなります。

通常、Yahoo!financeから株価のデータを取得する場合、『pandas_datareader』ライブラリを使うことが多いです(少なくともジェイは)。

『web.DataReader』はよく使う形式なので、覚えておきましょう。

 

そして以下が、カッコ内の引数の説明です。

data_source:データを取得するサイトの名前を入力

name:銘柄名を入力

start&end:データの取得期間を入力

 

なお『data_source』のところは、銘柄名ではなく『ティッカーコード』をコピペすることになります。

下の画像の赤い丸の箇所が、ティッカーコードとなります。

ティッカーコード

 

4:取得した米株価指数のデータ(終値)をひとつのデータフレームにまとめる

#concat関数でデータを統合する
df = pd.concat([dji['Adj Close'],spx500['Adj Close'],nasdaq['Adj Close'],nsdq100['Adj Close']],axis=1)

引数の『axis=1』『カラムで結合してくれ』という意味です。

なのでデータが横に統合されます。

 

一方、『axis=0』の場合は『インデックスで結合してくれ』という意味となります。

よって、縦方向にデータが統合されます。

 

5:カラム名に株価指数の名前を付ける

#変数.columnsでカラム名を付けたり変更したりできる
df.columns=('SPX500','DOW','NASDAQ')

 

6:ここでパフォーマンスを計算するコードを書く

df_normalized = (df/df.iloc[0]-1)*100

上のコードでポイントとなるのが『df.iloc[0]』です。

『.ioc[インデックス番号]』で、任意のインデックス番号の値を取り出すことができます。

今回はデータの基準日(ゼロ%となる日)が2月19日です。

この基準日から何パーセント上昇/下落したかを確認するために『.iloc[0]で最初のデータを取り出し』して割り算の分母として使います。

分子は日ごとの終値(df)となります。

あとは割り算で計算された値から1を引き、そこに100をかければ、各パフォーマンスがパーセンテージ(%)で計算されるというわけです。

 

7:小数点第2位までのパフォーマンスを表示

# round関数で小数点以下の数を設定
round(df_normalized,ndigits=2)

『ndigits』で小数点以下の数を設定することができます。

今回は『2』としましたので、小数点第2位まで表記されます。

 

8:最後にビジュアルチャートでパフォーマンスを確認する

# rcParamsはチャートのサイズなどを設定するコード
plt.rcParams['figure.figsize']=15,10
plt.rcParams['font.size']=15

#matplotlibで各パフォーマンスをラインチャートで表記するコード
df_normalized['SPX500'].plot(color='darkgreen',lw=5,label='S&P500: -1.78%')
df_normalized['DOW'].plot(color='limegreen',lw=5,label='Dow: -2.45%')
df_normalized['NASDAQ'].plot(color='blue',lw=5,label='Nasdaq Composite: -4.92%')

# 基準となるゼロ%のラインを設定するコード
plt.axhline(y=0,color='black',ls="--",lw=2)

# Y軸の名前を設定するコード
# ここでは”Performance %”
plt.ylabel('Performance %')

# グリッドラインを表示するコード
# 引数を『True』にするとグリッドラインが表示される
plt.grid(True)

# パフォーマンスの表記を設定するコード
# locで表示する場所を指定
# fontsizeで表示する文字の大きさを指定
plt.legend(loc='center right',fontsize=18)

# X軸の期間を設定するコード
# .xlim('表記する最初の値','表記する最後の値')の順で入力
plt.xlim('2021-02-19','2021-03-05')

 

・matplotlibの補足説明

シンプルにラインチャートでデータをビジュアル化する場合は、『変数.plot( )』と書くだけです。

あとはカッコの中の引数を好みに応じて設定していくだけです。

 

・ .plotの引数について

color:ラインの色を設定します

lw(line widthの略):ラインの幅を設定します

label:チャート上に表記するデータの文字を設定します


Pythonはすぐれた時間節約のツール

一見すると、コードを書くのが面倒くさいと思うかも知れません。

しかし、一度コードさえ書いてしまえば...
あとは時間軸を変えるだけで月初来とか年初来というふうに、ワンクリックでマーケットのパフォーマンスを自由自在に確認することができます。

一度コードさえ書いてしまえば...
いちいちどこかのサイトを訪問してパラメーターを設定しなくても、Jupyter上でPythonのコードを保存しておけば、たったの数秒で各マーケットのパフォーマンスを確認できるというわけです。

スクレイピングの記事でも指摘しましたが、プログラムにできることはプログラムに任せて、私たちは人間にしかできないことにもっと時間を費やすべきです。

特にPythonは『すぐれた時間節約ツール』です。使わない選択肢なんてありません。

 

この記事に出合ったのも何かの縁です。

今日からさっそくPythonを学んでみましょう!

 

まとめ

まとめ

  • Pythonを使えば、APIを使って簡単に株価データを得ることができる
  • Pythonで一度コードを書けば、その後は簡単にマーケットのパフォーマンスが確認できる
  • Pythonは『すぐれた時間節約のツール』である

注記事項

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

 

最後に

Pythonを学びたい方へ

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

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

私もPythonを学んでみたい!

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

プログラミングを学ぼう

 

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

そして『これがPythonを効率的に学ぶ方法だ!』と、ジェイが自信をもっておすすする効率的な学習方法もわかります。

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

-Pythonコード集