Yahoo!ファイナンスから複数社の株価時系列データをCSV形式でダウンロード取得し可視化する方法【Python/サンプルコード】

2021-11-13
Main Image

目次

こんにちは。

ふと株価のチェックを自動化したいと思い、Pythonプログラムで株価を取得できないかと思いました。

今回はPythonを使ってYahoo!financeから株価データを閲覧する方法をまとめてみます。

株価の取得に使用するライブラリの紹介 : pandas-datareader

使用するライブラリはpandas-datareaderです。

インストール方法

pip install pandas-datareader

参考 : pandas-datareader

Yahoo Finance Dataへのアクセスはこちらのドキュメントに記述があります。

参考 : Yahoo Finance Data

ちなみに本稿のプログラムを試しているバージョンは以下の通りです。

  • python3
    • 3.8.9
  • pandas-datareader
    • 0.10.0
  • pandas
    • 1.2.0

必要なPythonライブラリをインポートする

それでは早速Pythonで株価データにアクセスするためのプログラムを見ていきます。

最初に必要なライブラリをインポートします。

import datetime as dt
import pandas as pd
import pandas_datareader.data as web

公式ドキュメントにある通り、pandas_datareader.dataas webで読み込むのが通例みたいです。

datetimeは取得するデータの開始・終了の日付の指定に、pandasは取得した株価の時系列データをDataFrameに格納するため使用します。

datetimeはPythonの標準ライブラリですが、pandasが入っていない場合は以下でインストールしておいてください。

pip install pandas

pandas-datareaderを使った株価データ取得の基本構文

ライブラリをインポートしたら、pandas-datareaderを使って株価データにアクセスしてみます。

まずは基本構文を抑えましょう。

df = web.DataReader(
  name=ticker_name,
  data='yahoo',
  start=dt_start,
  end=dt_end
  )
  • name : Yahoo Financeで使用されているTickerを指定します。(後述)
  • data : Yahoo Financeにアクセスするにはyahooを指定します。
  • start : datetimeで開始日を指定します。
  • end : datetimeで終了日を指定します。

たったこれだけで、dfにDataFrameとしてロードされます。めっちゃ簡単。

pandas-datareaderのパラメータに指定するTicker(ティッカー)を調べる

それではデータ取得のためにパラメータを指定していきましょう。

まずはTicker(ティッカー)です。

Tickerとは銘柄コードみたいな株やETFを識別するアルファベットのコードのことです。株価を取得したいなんて考えている人には説明不要だと思いますが...

調べる方法としてはyahoo!financeで検索するのが一番確実です。この検索結果に出るものがプログラムで取得できます。

ためしにアップルのTickerを調べてみるため、検索ボックスにAppleと入れてみました。

yahoo financeでAppleを検索した結果

結果、AAPLとのこと。(SymbolsはTickerのことですね)

プログラムで取得する株価データの開始日と終了日を指定する

次にプログラムで取得したい株価データの期間を指定します。

dt_start = dt.datetime(2021,11,1)
dt_today = dt.datetime.today()

試しに今月の1日から、本日までの期間を指定してみます。

pandas-datareaderでAppleの株価データを取得してみた結果

上記のパラメータをpandas-datareaderに指定してプログラムを実行してみます。

df = web.DataReader(
  name='AAPL',
  data_source='yahoo',
  start=dt_start,
  end=dt_today
  )

インターネットでアクセスしてデータを取得するため、結果の取得まで数秒かかります。

dfの中身を表示した結果↓

pandas-datareaderのapple株価取得結果

おお、取れとる。

それぞれの列は、その日の高値・安値・始値・終値・出来高・調整後終値を意味しています。

(調整後終値とは、株式分割された場合に分割前の終値を分割後の値に調整したものです。)

Yahoo financeから取得した株価データをCSV形式でダウンロードする

DataFrameにダウンロードできれば、CSVファイルに出力するのは簡単です。

pandas DataFrameのto_csv()メソッドを使って書き出しましょう。

df.to_csv('AAPL.csv')

【応用編】 複数社(GAFAM)の株価の値動きをプログラムで一括取得してグラフで比較してみる

ここから応用編です。

Aplleの株価が取れたところで、次は複数の株価の比較をしてみたいと思います。

各日付の終値で比較してみるため、Close列のデータをそれぞれ読み込み、その後1つのDataFrameにします。

複数の同じ処理が入るので、リストを作ってfor文で回す方針にします。

# Tickerのリストを作成
GAFAM = ['AAPL','AMZN','FB','GOOG','MSFT']

# 期間を設定
start = dt.datetime(2021,11,1)
today = dt.datetime.today()

df_list = [] # 空のリストを作成、DataFrame格納用
for t in GAFAM:
  df = web.DataReader(t, 'yahoo', start, today)
  df_list.append(df)

# 各DataFrameから終値を取り出して1つのDataFrameにまとめる
df_all = pd.DataFrame(
  {name:df_list[i].Close for i,name in enumerate(GAFAM)}
)

# プロット
df_all.plot()

for文で複数のDataFrameを作る場合、動的に名前をつけた別のDataFrameを作りたいと思いがちですが、空のリスト[]を作ってappendで追加していく方がイメージが付きやすいです。DataFrameも入るなんて、リスト万能。

DataFrameをまとめる際もfor文を使います。DataFrameの作成方法の基本であるpd.DataFrame({'column':pd.Series})を使ってます。この{}の部分をfor文の内包表記で回して複数列を作ります。enumerate()はリストの番号と中身を両方取り出したいときにとても便利です。

作成したdf_allの中身はこのような形になりました。

pandas-datareaderで取得したGAFAMの株価データフレーム

最後にpandasのplotメソッドでグラフにプロットしています。手軽にDataFrameの中身を可視化したい場合は便利。見た目に凝りたい場合は定番の可視化ライブラリmatplotlib.pyplotseabornを使いましょう。

出力したグラフはこんな感じ。

GAFAM株価の推移グラフ

って、一株の値が違いすぎてグラフだと値動きがわかりにくいですね。^^;

比較のため、少し工夫してみましょう。

【応用編2】 開始日の株価を基準とした倍率を縦軸にとり、値動きの推移を比較しやすいグラフを作る

取得した株価をそのままプロットするだけだと値動きが比較しにくいので、今度は「開始日を基準にした倍率」を縦軸にとったグラフで比較してみようと思います。

先程のプログラムと途中までは同じで、df_allを少し変えます。

df_all_ratio = pd.DataFrame(
  {
    name: df_list[i].Close / df_list[i].Close.loc[start]
    for i,name in enumerate(GAFAM)
  }
)

df_all_ratio.plot()

比率なので、df_all_ratioに名前を変えました。また、Closeの値をstart行、つまり開始日の値ですべて割っています、(pd.Seriesはスカラー値で割ると、その列のすべての行の値が割り算されます。)

プロットした結果↓

GAFAMの株価推移を基準日からの倍率でプロットしたグラフ

イメージしていた図になりました。この期間だとAmazonが一番伸びていて、Appleが横ばいであることがわかりますね。

このような比較グラフもPythonで簡単に作れるようになりました。pandas-datareader、便利です!

【余談】 Facebook(FB)がMeta(MVRS)になり、GAFAMはGAMAMになる?

ところでFacebookは社名をMetaに変更しましたが、現在のTickerはFBのままですね。来月12月1日からMVRSになるみたいです。

(METAはすでにETFがあるので、「Metaverse」の子音からとったと思われます)

参考 : Facebook Is Now Meta. That Could Get Confusing

ということはGAFAMではなくGAMAMになるのでしょうか?すでに呼ばれ始めているかもしれません。

まとめ

ということで、Pythonを使ってYahoo Financeから株価データをダウンロードして使用する方法をまとめました。

  • ダウンロードするにはpandas-datareaderを使ってTickerと期間を指定するだけ
  • pandasのto_csvメソッドでCSVファイルに出力できる
  • 複数社の株価推移の比較や可視化も簡単

PythonやPandasの基本的な使い方はこちらの書籍で体系的に学習できます。私も入門の際に使用しました。基礎からコード付きで丁寧に解説されているのでとてもオススメです。

以上、ご参考になれば幸いです。

それでは〜

ads【オススメ】未経験からプログラマーへ転職できる【GEEK JOBキャンプ】
▼ Amazonオススメ商品
ディスプレイライト デスクライト BenQ ScreenBar モニター掛け式
スマートLEDフロアライト 間接照明 Alexa/Google Home対応

Author

Penta

都内で働くITエンジニアもどき。好きなものは音楽・健康・貯金・シンプルでミニマルな暮らし。AWSクラウドやデータサイエンスを勉強中。学んだことや体験談をのんびり書いてます。TypeScript / Next.js / React / Python / AWS / インデックス投資 / 高配当株投資 More profile

Location : Tokyo, JPN

Contact : Twitter@penguinchord

Recommended Posts

Copy Right / Penguin Chord, ペンギンコード (penguinchord.com) 2022 / Twitter@penguinchord