yfinanceでビットコインの時系列データを取得する（1日ごと、1時間ごと）

# ■ 概要
yfinanceを用いて、ビットコインの時系列データを取得します。
取得するデータの取引間隔としては日足と1時間足です。

一連のコードは↓

https://github.com/xx-z/cryptocurrency-analysis/blob/master/yfinance.ipynb

# ■ 環境
yfinance : 0.2.12 (Released: Feb 16, 2023)
pandas : 1.3.5

# ■ 実装

## ( 1 ) yfinanceのインストール
[yfinance](https://pypi.org/project/yfinance/)はYahoo非公認API。
使用は研究および教育目的に限る。
```
!pip install yfinance
```

## ( 2 ) データの取得
取得できるデータは
Open(始値)、High(高値)、Low(安値)、Close(終値)、Adj Close(調整後終値)、Volume(出来高)
### ● 1日ごとのデータ取得
+ tickers : 銘柄
+ start : 取得する期間の始まり
+ end : 取得する期間の終わり
+ period : 期間 ( 1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max )
+ interval : 取引間隔 ( 1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo )
+ ignore_tz : 異なる取引所からデータを整列するときにタイムゾーンを無視するか
+ prepost : 市場時間前後のデータをダウンロードするか
```python
#yfinanceとpandasをインポート
import yfinance as yf
import pandas as pd

#取得するデータ詳細
name = 'BTC-USD'
start = '2022-01-01'
end = '2023-01-01'

#データのダウンロード
df = yf.download(tickers=name, start=start, end=end)
df.head()
```
| Date | Open | High | Low | Close | Adj Close | Volume |
|:-|:-|:-|:-|:-|:-|:-|
|2022-01-01| 46311.746094| 47827.312500 | 46288.484375 | 47686.812500 | 47686.812500 | 24582667004
|2022-01-02| 47680.925781|47881.406250|46856.937500|47345.218750|47345.218750|27951569547|
|2022-01-03|47343.542969|47510.726562|45835.964844|46458.117188|46458.117188|33071628362|
|2022-01-04|46458.851562|47406.546875|45752.464844|45897.574219|45897.574219|42494677905|
|2022-01-05|45899.359375|46929.046875|42798.222656|43569.003906|43569.003906|36851084859|

### ● 1時間ごとのデータ取得
startとendのかわりにperiodにすることができる。

```python
#取得するデータ詳細
name = 'BTC-USD'
period = '1y'
interval = '1h'

#データのダウンロード
df = yf.download(tickers=name, period=period, interval=interval, ignore_tz=True)
df.head()
```
| Date | Open | High | Low | Close | Adj Close | Volume |
|:-|:-|:-|:-|:-|:-|:-|
|2022-01-01 00:00:00|46311.746094|46726.558594|46288.484375|46726.558594|46726.558594|0|
|2022-01-01 01:00:00|46723.667969|46888.292969|46650.351562|46788.546875|46788.546875|56967168|
|2022-01-01 02:00:00|46798.843750|46914.199219|46792.679688|46830.488281|46830.488281|0|
|2022-01-01 03:00:00|46836.500000|46861.910156|46800.742188|46833.105469|46833.105469|0|
|2022-01-01 04:00:00|46831.148438|46878.140625|46703.164062|46778.796875|46778.796875|81956864|

## ( 3 ) データの可視化
### ● 1日ごとの終値データを表示
```python
df["Close"].plot()
```
<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1582644/98656cff-7b3e-8dcb-c822-0ab5e76cfa88.png">

### ● 時間を指定してみる
datetimeモジュールを使用して時間をする。
```python
import datetime as dt
df[df.index >= dt.datetime(2022, 6, 1)]["Close"].plot()
```
<img width="400" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1582644/ad90702e-b543-523a-2799-47a8ba4caebe.png">


# ■ 注意
取引間隔(interval)が短い分だけ、期間(period)が指定される場合がある。
以下のように、periodを3年にすると730日以内と指定される。
```python
name = 'BTC-USD'
period = '3y'
interval = '1h'

#データのダウンロード
df = yf.download(tickers=name, period=period, interval=interval, ignore_tz=True)
df.head()
```
`1 Failed download:`
`- BTC-USD: 1h data not available for startTime=1583129047 and endTime=1677737047. The requested range must be within the last 730 days.`

# ■ 参考文献
https://pypi.org/project/yfinance/

https://github.com/ranaroussi/yfinance/wiki/Ticker