Botterのためのpandas入門(仮)
Botterのためのpandas入門(仮)¶
Warning
ToDo 免責事項をかく
データの取得¶
Jupyterカーネルはevent loopが作成されています。 asyncio.run
や loop.run_until_complete
を実行すると、event loopがネスト構造となりますが、Pythonではネストしたevent loopが生成できません。
Jupyterからasyncioを実行¶
nest_asyncio はネストしたevent loopが実装でき、JupyterやGUIアプリケーションなどの実行環境で asyncio.run
や loop.run_until_complete
を実行できます。
import asyncio
import nest_asyncio
import pandas as pd
import plotly.graph_objects as go
import pybotters
from IPython.display import HTML
nest_asyncio.apply()
APIからデータを取得¶
pandasの利用例として、ヒストリカルデータを扱います。 pybotters を利用して、FTXのAPIから4本値を取得します。
async def get_candles(market_name, resolution, start_time, end_time):
async with pybotters.Client(
apis={"ftx": ["", ""]}, base_url="https://ftx.com/api"
) as client:
res = await client.get(
f"/markets/{market_name}/candles",
params={
"resolution": resolution,
"start_time": start_time,
"end_time": end_time,
},
)
return await res.json()
data = asyncio.run(get_candles("BTC-PERP", 300, 1643641200, 1643727600))
data["result"][:5]
[{'startTime': '2022-01-31T15:00:00+00:00',
'time': 1643641200000.0,
'open': 37534.0,
'high': 37734.0,
'low': 37534.0,
'close': 37673.0,
'volume': 38447865.9473},
{'startTime': '2022-01-31T15:05:00+00:00',
'time': 1643641500000.0,
'open': 37673.0,
'high': 37853.0,
'low': 37615.0,
'close': 37791.0,
'volume': 30392886.7346},
{'startTime': '2022-01-31T15:10:00+00:00',
'time': 1643641800000.0,
'open': 37791.0,
'high': 37819.0,
'low': 37720.0,
'close': 37724.0,
'volume': 23186162.9091},
{'startTime': '2022-01-31T15:15:00+00:00',
'time': 1643642100000.0,
'open': 37724.0,
'high': 37900.0,
'low': 37720.0,
'close': 37799.0,
'volume': 25461367.2357},
{'startTime': '2022-01-31T15:20:00+00:00',
'time': 1643642400000.0,
'open': 37799.0,
'high': 37873.0,
'low': 37774.0,
'close': 37833.0,
'volume': 17233801.3338}]
DataFrameの作成¶
DataFrame
クラスに辞書やリストを渡すと、DataFrameを生成します。
df = pd.DataFrame(data["result"])
df.head()
startTime | time | open | high | low | close | volume | |
---|---|---|---|---|---|---|---|
0 | 2022-01-31T15:00:00+00:00 | 1.643641e+12 | 37534.0 | 37734.0 | 37534.0 | 37673.0 | 3.844787e+07 |
1 | 2022-01-31T15:05:00+00:00 | 1.643642e+12 | 37673.0 | 37853.0 | 37615.0 | 37791.0 | 3.039289e+07 |
2 | 2022-01-31T15:10:00+00:00 | 1.643642e+12 | 37791.0 | 37819.0 | 37720.0 | 37724.0 | 2.318616e+07 |
3 | 2022-01-31T15:15:00+00:00 | 1.643642e+12 | 37724.0 | 37900.0 | 37720.0 | 37799.0 | 2.546137e+07 |
4 | 2022-01-31T15:20:00+00:00 | 1.643642e+12 | 37799.0 | 37873.0 | 37774.0 | 37833.0 | 1.723380e+07 |
データ型¶
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-01-31 15:00:00+00:00 | 2022-01-31 15:00:00 | 37534.0 | 37734.0 | 37534.0 | 37673.0 | 3.844787e+07 |
1 | 2022-01-31 15:05:00+00:00 | 2022-01-31 15:05:00 | 37673.0 | 37853.0 | 37615.0 | 37791.0 | 3.039289e+07 |
2 | 2022-01-31 15:10:00+00:00 | 2022-01-31 15:10:00 | 37791.0 | 37819.0 | 37720.0 | 37724.0 | 2.318616e+07 |
3 | 2022-01-31 15:15:00+00:00 | 2022-01-31 15:15:00 | 37724.0 | 37900.0 | 37720.0 | 37799.0 | 2.546137e+07 |
4 | 2022-01-31 15:20:00+00:00 | 2022-01-31 15:20:00 | 37799.0 | 37873.0 | 37774.0 | 37833.0 | 1.723380e+07 |
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()
fig.write_html("candle.html")
HTML("./candle.html")
Important
あとはしんせいたろうさんに任せる