Pythonのyahoo-finance-api2用いて株価を取得する
概要
背景
yahoo-financeを使ってみようと思いましたが、python3.7までしか対応していないらしく私の環境python3.8では動作しませんでした。Historyを見ると2016年から更新が止まっていました。もしかすると今は使えないのかもしれません。
そこでyahoo-finance-api2というライブラリを使用して株価の取得を行います。
目的
yahoo-finance-api2の使用方法について説明をします。
yahoo-finance-api2
yahoo-finance-api2とは
yahoo-finance-api2はpkout氏によって開発された株価データ取得用のライブラリです。データはYahoo Financeより取得をしています。
インストール
pip経由でインストールが可能です。以下のコマンドをターミナルに入力します。
$ pip install yahoo_finance_api2
使用方法
例として「1301【(株)極洋】」の株価を取得してみます。以下のコードを使用して株価データの取得をすることができます。
それでは詳しくスクリプトの内容について説明をしていきます。
ライブラリの読み出し
まず最初に必要なライブラリをimportします。株価を取得するためには以下の2つのライブラリが必要になります。
from yahoo_finance_api2 import share
from yahoo_finance_api2.exceptions import YahooFinanceError
インスタンスを生成する
yahoo-finance-api2ではデータの取得用にすでにクラスが定義されています。インスタンスを生成する際は取得したい銘柄コードを渡します。
code = "1301" # (株)極洋の東証コード
my_share = share.Share(code + ".T") # データ取得用のクラス
日本の上場企業の株価を取得する場合は、銘柄コードにTOPIXを表す「.T」をコードの後に付ける必要があります。
株価を取得する
以下のスクリプトを使用することで、株価のデータを取得できます。例外が検出された場合は、エラーメッセージを表示するようにしています。
try:
symbol_data = my_share.get_historical(share.PERIOD_TYPE_DAY,
3,
share.FREQUENCY_TYPE_DAY,
1)
except YahooFinanceError as e:
print(e.message)
株価の取得はget_historical関数を使用します。get_historical関数では、データを取得する期間の単位と値、データの取得頻度の単位と値を指定します。それぞれ指定できる値は以下になります。
取得期間
- DAY
- MONTH
- WEEK
- YEAR
取得頻度
- MINUTE
- HOUR
- DAY
- WEEK
- MONTH
取得期間は休日も含みます。ただし休日は取引がない場合はデータが空になります。
結果の出力
プログラムでは以下の値が取得されます。各値はディクショナリ型の値に配列として格納されています。ディクショナリ型になっているのはDataframeに簡単に変換しやすくするためと考えられます。
- タイムスタンプ
- 始値
- 高値
- 安値
- 終値
- 取引数
{'timestamp': [1663718400000, 1663804800000], 'open': [3665.0, 3665.0], 'high': [3685.0, 3665.0], 'low': [3640.0, 3620.0], 'close': [3665.0, 3620.0], 'volume': [10000, 14600]}
応用
東証の株式データを取得する
まずは「東証上場銘柄一覧のExcelファイルから東証コードのリスト抽出する」を参考にして、東証コード一覧のリストを取得してください。その後、codesにリストを渡すことで東証一覧の株価を取得できます。
途中でスクリプトを止めたためエラーが発生しています。無視してください。
日経平均を取得したい方は「yahoo-finance-api2を使って日経平均株価を取得する」もご参照ください。
取得したデータをDataframeに変換する
先程取得したデータをDataframeに変換します。まず、pandasのライブラリをインストールします。
pip install pandas
yahoo_finance_api2で取得したデータはsymbol_dataに入っているので、そちらをDataframe型に変換します。
timestampはそのまま保存すると読みにくいので、datetime型に変換しています。
まとめ
yahoo-finance-api2について説明をしました。こんなに簡単にデータが取れるなんて驚きです。途中から若干速度が低下するのでYahoo側でなにかスクレイピングの対策を入れているのかもしれません。
次のステップ
次に取得したデータからチャートを描写したいという方は、「mplfinanceでチャートを描写する」に進んでください。株取引の理解を深めるためにチャートを記載してみるのもオススメです。