データの取得

APIからデータを取得

pandasの利用例として、ヒストリカルデータを扱います。FTXのAPIから4本値を取得します。

import json
from urllib import request

import pandas as pd
import plotly.graph_objects as go
url = "https://ftx.com/api/markets/BTC-PERP/candles?resolution=300&start_time=1643641200&1643727600"

with request.urlopen(url) as res:
    json_data = json.loads(res.read().decode())

注意

実際には上記のコードで取得しますが、ここでは取得済みのJSONファイルから読み込みます。

with open("ftx_btc-rerp_20220306-20220312.json", "r") as f:
    json_data = json.load(f)

DataFrameの作成

DataFrame クラスに辞書やリストを渡すと、DataFrameを生成します。

df = pd.DataFrame(json_data["result"])
df.head()
startTime time open high low close volume
0 2022-03-09T20:00:00+00:00 1.646856e+12 42229.0 42271.0 42228.0 42254.0 4.986935e+06
1 2022-03-09T20:05:00+00:00 1.646856e+12 42254.0 42357.0 42246.0 42253.0 1.541197e+07
2 2022-03-09T20:10:00+00:00 1.646857e+12 42253.0 42318.0 42123.0 42146.0 1.741020e+07
3 2022-03-09T20:15:00+00:00 1.646857e+12 42147.0 42183.0 42080.0 42089.0 8.337687e+06
4 2022-03-09T20:20:00+00:00 1.646857e+12 42089.0 42190.0 42089.0 42110.0 5.248858e+06

データ型

dtypes 属性はDataFrameの各列のデータ型が格納されています。

df.dtypes
startTime     object
time         float64
open         float64
high         float64
low          float64
close        float64
volume       float64
dtype: object

to_datetime 関数はさまざまなオブジェクトをdatetime型に変換します。次のコードでは「startTime」列と「time」列をdatetime型に変換しています。

df.loc[:, "startTime"] = pd.to_datetime(df.loc[:, "startTime"])
df.loc[:, "time"] = pd.to_datetime(df.loc[:, "time"], unit="ms")
df.head()
startTime time open high low close volume
0 2022-03-09 20:00:00+00:00 2022-03-09 20:00:00 42229.0 42271.0 42228.0 42254.0 4.986935e+06
1 2022-03-09 20:05:00+00:00 2022-03-09 20:05:00 42254.0 42357.0 42246.0 42253.0 1.541197e+07
2 2022-03-09 20:10:00+00:00 2022-03-09 20:10:00 42253.0 42318.0 42123.0 42146.0 1.741020e+07
3 2022-03-09 20:15:00+00:00 2022-03-09 20:15:00 42147.0 42183.0 42080.0 42089.0 8.337687e+06
4 2022-03-09 20:20:00+00:00 2022-03-09 20:20:00 42089.0 42190.0 42089.0 42110.0 5.248858e+06

Plotlyによる可視化

Plotlyはインタラクティブな可視化を簡素な記述で実装できるPythonパッケージです。pandasのDataFrameと相性がよく、次のコードのようにローソク足をかんたんに作成できます。

fig = go.Figure(
    data=[
        go.Candlestick(
            x=df["startTime"],
            open=df["open"],
            high=df["high"],
            low=df["low"],
            close=df["close"],
        )
    ]
)
fig.show()

あとで利用するために、pickle形式でデータを保存(直列化)します。

df.to_pickle("ftx_btc-rerp_20220306-20220312.pickle", protocol=4)