Python

【Pythonコード解説】yahoo_finance_api2で日本株の株価データを取得する

2021年3月28日

【Pythonコード解説】yahoo_finance_api2で日本株の株価データを取得する

こんにちは。TATです。

今日のテーマは「yahoo_finance_api2で日本株の株価データを取得する」です。

 

以前にPythonで株価を取得する方法についてご紹介しました。

こちらの記事ではスクレイピングやライブラリーを使った株価の取得方法について解説しています。

関連記事
【日本株対応】Pythonで株価のローソク足データを取得する方法まとめ【CSV、ライブラリ、スクレイピング】

続きを見る

 

今回はこれの進化版です。

Yahooファイナンスから株価を取得できるライブラリーを発見したのでご紹介します。

 

結論から言いますと、過去記事でご紹介した方法は不要になりますw

この記事で紹介する方法1つを理解しておけばOKです。

圧倒的に短いコードで簡単に株価データが取得できます。

日本株にも対応しているので無敵です。

 

なんで今まで気づかなかったのか、めちゃくちゃ後悔しています。。。w

この記事ではyahoo_finance_api2を使って株価データを取得する方法について解説していきます。

 

yahoo_finance_api2の基本的な使い方

【Pythonコード解説】yahoo_finance_api2で日本株の株価データを取得する

まずはyahoo_finance_api2の基本的な使い方を見ていきます。

ライブラリーページへ行くと、基本的な使い方を確認できます。(英語ページ)

pipにも対応しているので、"pip install yahoo_finance_api2"で簡単にインストールできます。

 

とりあえず走らせてみる

とりあえずライブラリーページにあるデータをそのまま走らせてみます。

ちなみにMSFTはマイクロソフトです。

import sys
from yahoo_finance_api2 import share
from yahoo_finance_api2.exceptions import YahooFinanceError

my_share = share.Share('MSFT')
symbol_data = None

try:
    symbol_data = my_share.get_historical(
        share.PERIOD_TYPE_DAY, 10,
        share.FREQUENCY_TYPE_MINUTE, 5)
except YahooFinanceError as e:
    print(e.message)
    sys.exit(1)

print(symbol_data)

 

 

上記のコードを走らせるとこうなります。

 

返り値は辞書型になっています。

それぞれの値はリストになっていますね。

そして時間はタイムスタンプになっているので、このままだと不便です。

ゆえに少し整形します。

 

DataFrameに変換してtimestampを整形する

まずはこの辞書型のデータをDataFrameに変換します。

import pandas as pd
df = pd.DataFrame(symbol_data)

 

1行で完了です。

実行結果がこちら。

 

次にtimestampを変換します。

pandasにはtimestampを変換してくれるto_datetimeという関数があるので、これを利用すれば1行で完了します。

変換したデータをDatetimeというカラムに格納します。

df["datetime"] = pd.to_datetime(df.timestamp, unit="ms")

 

実行結果がこちらです。

 

timestampがきちんと変換されていることが確認できました。

ここまできたらデータ分析に問題なく使えます。

 

コードまとめ

基本的な使い方はこれで完了です。

流れとしては次の通りです。

  1. yahoo_finance_api2でデータを取得する
  2. DataFrameに変換する
  3. timestampを変換する

 

ここまでのコードをまとめるとこうなります。

import sys
from yahoo_finance_api2 import share
from yahoo_finance_api2.exceptions import YahooFinanceError
import pandas as pd

my_share = share.Share('MSFT')
symbol_data = None

try:
    symbol_data = my_share.get_historical(
        share.PERIOD_TYPE_DAY, 10,
        share.FREQUENCY_TYPE_MINUTE, 5)
except YahooFinanceError as e:
    print(e.message)
    sys.exit(1)

df = pd.DataFrame(symbol_data)
df["datetime"] = pd.to_datetime(df.timestamp, unit="ms")
df.head()

 

こちらのコードはご自由にコピペしちゃってください!

 

カスタマイズ機能が充実

カスタマイズ機能が充実

次に設定周りを見ていきます。

柔軟になカスタマイズが可能です。

 

60分足・日足・週足・月足なども指定可能

まずは頻度の設定です。

先ほどのコードでいうところのshare.FREQUENCY_TYPE_MINUTE, 5が該当します。

これは5分おきのデータを取得しています。

 

FREQUENCYは次のような設定が可能です。

  • 分足:share.FREQUENCY_TYPE_MINUTE
  • 時間足:share.FREQUENCY_TYPE_HOUR
  • 日足:share.FREQUENCY_TYPE_DAY
  • 週足:share.FREQUENCY_TYPE_WEEK
  • 月足:share.FREQUENCY_TYPE_MONTH

 

4時間足の場合はshare.FREQUENCY_TYPE_HOUR, 4となります。

使うことはないと思いますが、2日足とか3週間足なども設定できます。

 

日足にする場合はこんな感じ。share.FREQUENCY_TYPE_DAY, 1とすればOKです。

 

引数を設定するだけで完了するのでとても使い勝手がいいですね。

みた感じ、日足以上ならVolume(出来高)も取得できるようです。

 

取得するデータの期間もある程度なら指定可能

次に期間の設定です。

先ほどのコードでいうところのshare.PERIOD_TYPE_DAY, 10になります。

これは10日間という意味になります。

 

設定できる期間は次の通りです。

  • 日で指定:share.PERIOD_TYPE_DAY
  • 週で指定:share.PERIOD_TYPE_WEEK
  • 月で指定:share.PERIOD_TYPE_MONTH
  • 年で指定:share.PERIOD_TYPE_YEAR

 

例えば、日足で過去30日分のデータを取得する場合にはこうなります。

 

期間を指定する際の注意点

ここで一点だけ注意すべきことがあります。

期間を指定する際には、それぞれ上限があります。

正直なところ、正確な上限はわかりません。

しかし僕なりに見た感じだと、例えば日で100日分指定しても42日分しか取得できません。

この場合は週や月で指定する必要があります。

 

よって、指定する期間が大きい場合には気をつけてください。

過去1000週間と指定しても無理です。

こういった場合はさらに大きい単位(月や年)で指定するようにすれば大丈夫です

 

ちなみにマクロソフトで過去100年分の日足データを取得したら、一番古いデータで1986年3月13日でした。

 

これで、yahoo_finance_api2でできることは一通り網羅できたかなと思います。

 

【朗報】日本株も取得できます

【朗報】日本株も取得できます

次にお待ちかねの日本株についてみていきます。

大変ありがたいことにyahoo_finance_api2では日本株の株価データも取得可能です。

このライブラリーを作ってくれた方、データを提供してくれているYahoo様にこの場を借りて御礼申し上げます。

ありがとうございます。

 

証券コード4桁+.Tで日本株を指定できます

日本株のデータを取得する際には、証券コードの後に.TをつければOKです。

 

例としてトヨタ自動車の株価データを取得してみます。

トヨタ自動車の証券コードは7203なので、yahoo_finance_api2で指定する場合には7203.Tとなります。

過去100年分を指定してみたところ、一番古いデータで1999年5月6日でした。

 

日本株も取得が可能ということで、もはや過去記事で紹介したPythonによる株価を取得する方法は不要になりそうです。

頑張ってまとめたのに・・・(涙)

関連記事
【日本株対応】Pythonで株価のローソク足データを取得する方法まとめ【CSV、ライブラリ、スクレイピング】

続きを見る

 

(念のため)注意点

(念のため)注意点

最後に注意点です。

正直なところ、ここでお伝えする注意点については一部確信はないです。

  • アクセス制限があるのか謎
  • DatetimeはUTCなので日本時間への変換が必要
  • データの遅延がどれくらいあるのか謎

 

順番に簡単に解説します。

アクセス制限があるのか謎

まず、アクセス制限が謎です。

ライブラリーページには制限の記述はありません。

 

yahoo_finance_apiでは1時間に2,000アクセスまでみたいな制限がありました。(うる覚えw)

しかし、yahoo_finance_api2にはそういった制限に関する記述がないんです。

もしかしたら使いまくっていたら制限が出てくるかもしれないので、利用する際には少し意識しておいたほうがいいかもです。

 

DatetimeはUTCなので日本時間への変換が必要

2つ目は、DatetimeはUTCであるという点です。

ゆえに日本時間で利用するには変換が必要です。

9時間足せば完了です。

 

参考がてらコードの一例をご紹介しておきます。

トヨタの株価データを60分足で過去30日分のデータを取得しています。

import sys
from yahoo_finance_api2 import share
from yahoo_finance_api2.exceptions import YahooFinanceError
import pandas as pd
import datetime 

my_share = share.Share('7203.T')
symbol_data = None

try:
    symbol_data = my_share.get_historical(
        share.PERIOD_TYPE_DAY, 30,
        share.FREQUENCY_TYPE_MINUTE, 60)
except YahooFinanceError as e:
    print(e.message)
    sys.exit(1)

df = pd.DataFrame(symbol_data)
df["datetime"] = pd.to_datetime(df.timestamp, unit="ms")

#日本時間へ変換
df["datetime_JST"] = df["datetime"] + datetime.timedelta(hours=9)

 

追加したのは最後の1行だけです。

結果はこうなります。

 

きちんと日本時間に変換されていることがわかります。

 

ただここでも追加で注意点があります。

時間をよく見ると、9時からスタートして最後は14時になっています。

日本の株式市場は9時から15時に取引可能です。

となると15時のデータが足りないように見えますが、これは見方が少し違います。

 

例えば、9時のデータは9:00~9:59までのデータを示しています。

14時のデータは14:00~14:59のデータです。

ゆえに15時のデータは存在しません。

ここの解釈だけ理解しておけば問題ないかと思います。

 

データの遅延がどれくらいあるのか謎

3つ目として、データの遅延がどれくらいあるのか謎です。

もともとYahooファイナンスで表示されている株価データは20分の遅延があります。

yahoo_finance_api2はこれと同じ遅延なのか、あるいはこれよりもさらに遅延があるのかについては正直なところわかりません。

わかる方いたら教えてください。

 

よって、リアルタイムトレードとかに利用するのは厳しいかと思います。

とはいっても、僕がチェックした感じでは、18時の時点で当日の株価データは取得できたので、日足でデータを収集するには十分利用可能と思います。

 

データの分析・可視化にはPythonが最適!

本記事で紹介したコードは、全てPythonを使って書いています。

 

Pythonデータの分析や可視化を得意とするプログラミング言語で、さらにAI関連のライブラリーも豊富で昨今のAIブームで需要が急拡大しています。

【いますぐ始められます】データ分析をするならPythonが最適です。

 

また、Python比較的学びやすい言語でもあります。

実際、僕は社会人になってからPythonを独学で習得して転職にも成功し、Python独学をきっかけに人生が大きく変わりました。

【実体験】ゼロからのPython独学を決意してから転職を掴み取るまでのお話。 

 

Python学習方法についてはいろいろな方法があります。

僕はUdemyを選びましたが、書籍プログラミングスクールも選択肢になります。

【決定版】Python独学ロードマップ【完全初心者からでもOKです】

【まとめ】Pythonが学べるおすすめプログラミングスクール

プログラミングの独学にUdemyをおすすめする理由!【僕はUdemyでPythonを独学しました!】

 

\30日返金保証/

Udemyを詳しく見る

セール中なら90%オフとかで購入可能です!

 

まとめ

いかがでしたでしょうか。

ここではyahoo_finance_api2を利用した株価データの取得方法について解説しました。

 

日本株のデータも取得可能なので、かなり万能な感じがします。

短いコードで実装できて、取得データも期間や頻度を自由にカスタマイズできるので使い勝手も抜群です。

ただし、使う際には、使いまくってたら制限などをかけられる可能性はゼロではないということだけは頭に入れておいてください。(現状、制限に関する記述はないです)

 

yahoo_finance_api2を使えば、過去に紹介したPythonで株価データを取得する方法については不要になりそうです。

関連記事
【日本株対応】Pythonで株価のローソク足データを取得する方法まとめ【CSV、ライブラリ、スクレイピング】

続きを見る

 

ここまで読んでくださってありがとうございました。

 

おすすめPython学習法

Udemy:セール中なら90%オフで購入可能。豊富なコースから選べる!

データミックス:Pythonとビジネスについて学べる!起業したい方にもおすすめ!

SAMURAI TERAKOYA:月額2,980円〜利用できるコスパ最強スクール!

 

-Python
-, , , , ,

© 2023 気ままなブログ