#はじめに
国内のinvestpyの解説が2件しかないし、パッケージのdocumentも充実してないので作成しました。
まだ触り始めなので、情報量は少ないです(追記予定あり)。
Pythonを使って日本株を分析するのに便利なのではないでしょうか。
慣れたらPandas_Datareaderみたいな感じで使えるので、使いやすいのか…?
現在の環境はPython 3.8.5、investpy 1.0です。
(Python 3.9はnumpyが投稿日現在使用できないので不可)
#investpyとは
PyPiページ
2019年2月より更新されている、投資関係のデータを収集できるパッケージです。
データの取得元はinvesting.comで、日本の商品のデータも取得できます。
取得したデータは基本的にPandas.DataFrame型です。
Pandas_Datareaderとの違いは何といっても日本商品のデータも取得できることです。
Pandas_Datareader紹介記事でYahooから日本株も取得できる、みたいなことも書いてありますが、私は取得できませんでした。
また、APIも必要ないです。
→調べてみたらPandas_Datareaderでも取得できるかも。
週末に速度含め測定予定。
2021/2/4追記(@Akahachiさんありがとうございます)
やはりPandas_Datareaderでも日本株を取得できるとのこと。
ただし、yahooからはTOPIXなど一部指標が取得できないことから、investpyを利用するのがいいかもしれません。
(teratailかどこかでyahooは頻繁に通信すると遮断されるぞ、みたいなことが書いてあった気がしたけど、気のせいだった…?)
ざっと見取得できる使えそうなデータは以下の通り。
- 株の4本値(日次)
- ETFの4本値(日次)
- 各種指数の4本値(日次)
- ファンドのデータ(いまのところ取得したことがないから詳細不明)
また、為替や投信のデータも取得できそうです。
#インストール
pip install investpy
condaではインストール不可なのであしからず。
必要なパッケージは以下の通りです(PyPiより)。
- pandas 0.25.1
- requests 2.22.0
- lxml 4.4.1
- unidecode 1.1.1
#日本株の一覧取得
注:ETFのデータ取得はこの方法ではできないので注意
investpy.get_stocks(country='japan')
で取得可能です。
返り値はpandas.DataFrame型です。
引数をなしにするとすべての国のデータがとれる?(未確認)
また、investpy.get_stocks_list
でlist
型を、investpy.get_stocks_dict
でdict型を返します。
#日本株の4本値取得
注:ETFのデータ取得はこの方法ではできないので注意
基本的にinvestpy.get_stock_historical_data
で取得します。
import investpy
import datetime
#銘柄を証券コードで指定(ここでは適当に入力)
#string型でないといけない?(未確認)
code = '1301'
#開始日from_dateと終了日to_dateを指定
#string型でdd/mm/yyyyの書式でない場合はエラーが返るので注意
#datetime.dateから変換してやるといい
from_date = datetime.strftime(yesterday, '%d/%m/%Y')
to_date = datetime.date.today().strftime('%d/%m/%Y')
#countryで国を指定
#引数に as_json=True を入れるとjson形式で返るのかもしれない(未確認)
#typeはpandas.DataFrame型
df = investpy.get_stock_historical_data(stock=code, country='japan',
from_date=from_date, to_date=to_date)
30年分のデータを試しにとってみましたが、大体3秒/銘柄くらいの速度でした。
investpy.get_stock_recent_data
で期間を指定せずにとれるらしいですが、使ったことはないです。
#日本ETFの一覧取得
基本は日本株と一緒です。
investpy.get_etfs
、investpy.get_etfs_list
、investpy.get_etfs_dict
が使用可能です。
#日本ETFの4本値取得
investpy.get_etf_historical_data
を使います。
株価とほぼ同じですが、銘柄は証券コードではなく銘柄名で指定することに注意。
import investpy
import datetime
#銘柄名を自動で入手するため、ETFの商品リストを取得しておく
etfs_df = investpy.get_etfs(country='japan')
#銘柄を証券コードで指定(ここでは適当に入力)
code = '1305'
#codeに該当するデータのインデックスを探して、銘柄名を取得
#銘柄コードの列名はsymbol、銘柄名の列名はname
idx = etfs_df.query('symbol == @code').index
etf_name = etfs_df.at[idx[0], 'name']
#開始日from_dateと終了日to_dateを指定
#string型でdd/mm/yyyyの書式でない場合はエラーが返るので注意
#datetime.dateから変換してやるといい
from_date = datetime.strftime(yesterday, '%d/%m/%Y')
to_date = datetime.date.today().strftime('%d/%m/%Y')
#countryで国を指定
#引数に as_json=True を入れるとjson形式で返るのかもしれない(未確認)
#typeはpandas.DataFrame型
df = investpy.get_etf_historical_data(etf=etf_name, country='japan',
from_date=from_date, to_date=to_date)
なお、こちらにもinvestpy.get_etf_recent_data
がありますが、使用したことがないため詳細不明です。
#株価指標の4本値取得
investpy.get_index_historical_data
を使用します。
基本はETFと同じ方法で取得します。
import investpy
import datetime
#指標名を自動で入手するため、指標のリストを取得しておく
index_df = investpy.get_indices(country='japan')
#指標のシンボルを入力(ここでは日経225)
#シンボルはindex_dfから欲しいものを探すのがいいかと思います
symbol = 'N225'
#codeに該当するデータのインデックスを探して、指標名を取得
#シンボルの列名はsymbol、指標名の列名はname
idx = index_df.query('symbol == @symbol').index
index_name = index_df.at[idx[0], 'name']
#開始日from_dateと終了日to_dateを指定
#string型でdd/mm/yyyyの書式でない場合はエラーが返るので注意
#datetime.dateから変換してやるといい
from_date = datetime.strftime(yesterday, '%d/%m/%Y')
to_date = datetime.date.today().strftime('%d/%m/%Y')
#countryで国を指定
#引数に as_json=True を入れるとjson形式で返るのかもしれない(未確認)
#typeはpandas.DataFrame型
df = investpy.get_index_historical_data(index=index_name, country='japan',
from_date=from_date, to_date=to_date)
#Q&A
####株のほかの情報は持ってこれないの?
ソースコードから確認できたのは以下の通りですが、試してないので詳細不明です(今後追記予定)。
investpy.get_stock_company_profile
:企業情報?(現在country=spanish
のみ対応)
investpy.get_stock_dividends
:配当データ
investpy.get_stock_information
:ファンダメンタルズ(自分で分析した方が早いと思います)
investpy.get_stock_financial_summary
:財務データ
####RuntimeError: ERR#0018: stock **** not found, check if it is correct.と表示される!
investing.comにはデータがあるのにinvestpyで取得できないデータがあるみたいです(詳細不明)。
investpy.search_stocks
でデータが取得できるか確認できそうです。
#追記履歴
2021/2/4
@Akahachiさんから頂いた情報ほかをもとに追記。
株価指標を取得する方法を追記。