LoginSignup
9
5

More than 3 years have passed since last update.

investpyチートシート(最終更新:2021/02/04)

Last updated at Posted at 2021-01-31

はじめに

国内の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_listlist型を、investpy.get_stocks_dictでdict型を返します。

日本株の4本値取得

注:ETFのデータ取得はこの方法ではできないので注意
基本的にinvestpy.get_stock_historical_dataで取得します。

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_etfsinvestpy.get_etfs_listinvestpy.get_etfs_dictが使用可能です。

日本ETFの4本値取得

investpy.get_etf_historical_dataを使います。
株価とほぼ同じですが、銘柄は証券コードではなく銘柄名で指定することに注意。

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と同じ方法で取得します。

get_index_historical_data
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さんから頂いた情報ほかをもとに追記。
株価指標を取得する方法を追記。

9
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5