[Python]investpyで株、為替、経済指標データを取得する

# はじめに
　株、為替、経済指標データを取得するため、[investpy](https://github.com/alvarobartt/investpy)の使い方のメモを残します。[API Reference](https://investpy.readthedocs.io/api.html)からの抜粋です。

# 環境
Windows 10 home
Python(3.7.6)
pandas(1.2.1)
JupyterLab(3.0.6)
investpy(1.0.3)

# investpyとは
　[Fusion Media Limited](https://en.wikipedia.org/wiki/Fusion_Media_Group)が所有している金融情報のポータルサイト[Investing.com](https://www.investing.com/)をデータソースとし、株価データ等の金融情報を取得するPythonライブラリです。株価、為替のほか、企業業績、経済指標などpandas-datareaderでは、手に入れられないようなデータも取得することができます。

# investpyのインストール
　pipでインストールします。documentには[condaも可能なようなこと](https://investpy.readthedocs.io/_info/installation.html)が書かれていましたが、pipでしかインストールできませんでした(2021/03/28時点)。`import investpy`でインポートして利用します。

```sh
pip install investpy
```

# 使い方
## ある期間の株価を取得する
　`investpy.get_stock_historical_data`に企業のシンボル（日本だと証券コード）、国、期間を指定して、取得します。シンボル、国を変更するとほかの国の株価を取得することができます。ニューヨーク証券市場やNASDAQだとティッカーシンボル、国、期間を指定します。日付の指定方法が、"日/月/年"とヨーロッパ式なのが注意点です。

### 日本
```Python
code = '7203' #トヨタ自動車
stock_data = investpy.get_stock_historical_data(stock=code, country='japan', from_date='01/02/2021', to_date='28/03/2021')
stock_data.tail(5)
```
![トヨタ自動車](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/585573/b40468ae-a591-b55f-e32b-53191558cc32.png "トヨタ自動車株価")
　上の例では、トヨタ自動車（証券コード:7203）の株価を表示しています。ヤフーファイナンス（日本）によると、2021/3/26のトヨタ自動車の株価は、始値:8277、高値:8376、安値:8235、終値:8359となっており、investpyで取得した2021/3/26の株価が微妙にずれているのが気になります。また、出来高が0となっています。
　ソニー（証券コード:6758）だと以下のようになっており、出来高は表示されています。こちらは、investpyと、ヤフーファイナンスの株価や出来高に違いはありません。企業によって、データのとり方が異なるのでしょうか・・・。
![sony_stock.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/585573/b24bffc2-feb0-3fbe-4401-dc6a202543d3.png "ソニー株価")

### アメリカ
　NASDAQのアップルのデータも取ることができます。

```Python
symbol = "AAPL" #アップル
stock_data = investpy.get_stock_historical_data(stock=symbol, country='united states', from_date='01/02/2021', to_date='28/03/2021')
stock_data.tail(5)
```
![apple_stock.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/585573/74326c4b-b02e-82cc-2488-7f39c9c84035.png "アップル株価")

## 業績を取得する
　`investpy.get_stock_financial_summary`で、業績、バランスシートやキャッシュフローのデータを取得することができます。
### 通年業績
　`summary_type='income_statement'`で`period='annual'`にします。

```Python
code = '7203' #トヨタ自動車
annual = investpy.get_stock_financial_summary(stock=code, country='japan', summary_type='income_statement', period='annual')
annual
```
![annual.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/585573/6007ffc8-daa6-3987-f7a7-050b41e843a9.png "トヨタ通年業績")
### 四半期業績
　`summary_type='income_statement'`で`period='quarterly'`に変更します。最近の業績しか取得できないようです。トヨタ自動車だと、2020年3月までのデータが出力されますが、ソニーだと、2020年12月までの直近データが出力されます。上表がトヨタ自動車で、下表がソニーの四半期業績です。

```Python
code = '7203' #トヨタ自動車
quarterly = investpy.get_stock_financial_summary(stock=code, country='japan', summary_type='income_statement', period='quarterly')
quarterly
```
![quartly.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/585573/3c1e0194-04a0-50b7-53d9-0e4ebc9cd2b3.png "トヨタ四半期業績")
![sony_quartly.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/585573/2d0a8d4a-3cde-6768-c363-9988eea21e6f.png "ソニー四半期業績")

### キャッシュフロー
　`summary_type='cash_flow_statement'`に変更します。

```Python
code = '7203' #トヨタ自動車
cash_flow = investpy.get_stock_financial_summary(stock=code, country='japan', summary_type='cash_flow_statement', period='annual')
cash_flow
```
![cashflow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/585573/75ad125d-83ac-4224-41b0-0d670f993d4e.png "トヨタキャッシュフロー")

### バランスシート
　`summary_type='balance_sheet'`に変更します。資産の部、負債の部、純資産の部の大枠のデータしかないようです。

```Python
code = '7203' #トヨタ自動車
balance_sheet = investpy.get_stock_financial_summary(stock=code, country='japan', summary_type='balance_sheet', period='annual')
balance_sheet
```
![balance_sheet.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/585573/e4771841-07f7-adc9-1be0-ff065391b58b.png "トヨタバランスシート")

## ある期間の為替を取得する
　`investpy.get_currency_cross_historical_data`で為替を取得することができます。例として日ごとの日本円とUSドルの為替を表示します。

```Python
usd_jpy = investpy.get_currency_cross_historical_data(currency_cross='USD/JPY', from_date='01/02/2021', to_date='28/03/2021')
usd_jpy.tail(5)
```
![jpy_usd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/585573/67e53009-84cf-2072-443a-480eeb65e539.png "日本円-USドル為替")

## 経済指標を取得する
　`investpy.economic_calendar`を使って、各国の経済指標を得ることができます。各国の経済指標の予測と実績を一覧で見ることができるので、便利そうです。例は、日本とアメリカの経済指標です。`countries=None`(default)だと、investpyで可能なすべての国の経済指標を取得します。

```Python
economic_data = invest.economic_calendar(time_zone='GMP +9:00', countries=['japan', 'united states'], from_date='01/02/2021', to_date='28/03/2021')
economic_data.tail(5)
```
![economic_calender_tail.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/585573/e69828cb-7397-8ed8-f096-18198d07a005.png "経済指標　日本　アメリカ")

　`importance`columnを参照することで、重要な指標だけを見ることができます。

```Python
economic_data[economic_data['importance']=='high']
```
![economic_calender_importance.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/585573/d36ebd3c-f80d-7fde-20c5-07b7c96cb9f5.png "重要経済指標　日本　アメリカ")

# 参考
https://investpy.readthedocs.io/index.html