最近ダウやナスダックといった指数の動きが激しいですが、これらのパフォーマンスも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を効率的に学ぶ方法だ!』と、ジェイが自信をもっておすすする効率的な学習方法もわかります。
この記事と出会ったのも何かの縁です。
ぜひチャレンジしてみてください!