Yahoo!ファイナンスから複数社の株価時系列データをCSV形式でダウンロード取得し可視化する方法【Python/サンプルコード】
目次
こんにちは。
ふと株価のチェックを自動化したいと思い、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.data
はas 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
と入れてみました。
結果、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
の中身を表示した結果↓
おお、取れとる。
それぞれの列は、その日の高値・安値・始値・終値・出来高・調整後終値を意味しています。
(調整後終値とは、株式分割された場合に分割前の終値を分割後の値に調整したものです。)
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のplotメソッドでグラフにプロットしています。手軽にDataFrameの中身を可視化したい場合は便利。見た目に凝りたい場合は定番の可視化ライブラリmatplotlib.pyplot
やseaborn
を使いましょう。
出力したグラフはこんな感じ。
って、一株の値が違いすぎてグラフだと値動きがわかりにくいですね。^^;
比較のため、少し工夫してみましょう。
【応用編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
はスカラー値で割ると、その列のすべての行の値が割り算されます。)
プロットした結果↓
イメージしていた図になりました。この期間だと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の基本的な使い方はこちらの書籍で体系的に学習できます。私も入門の際に使用しました。基礎からコード付きで丁寧に解説されているのでとてもオススメです。
以上、ご参考になれば幸いです。
それでは〜