从订单簿中绘制热图(pandas 数据框)
Plotly heatmap from order book (pandas dataframe)
我正在尝试将订单簿数据输入到我从交易所检索的绘图热图中 API。我检索的数据存储在 pandas 数据框中,格式如下:
id timestamp asks bids
0 4 2021-07-13 18:50:02 [[31416.0, 12.6396], [31417.0, 0.3847], [31418... [[31415.0, 0.6475], [31413.0, 0.1592], [31412....
1 10 2021-07-13 18:51:02 [[31416.0, 12.6396], [31417.0, 0.3847], [31418... [[31415.0, 0.6475], [31413.0, 0.1592], [31412....
2 15 2021-07-13 18:52:02 [[31416.0, 12.6396], [31417.0, 0.3847], [31418... [[31415.0, 0.6475], [31413.0, 0.1592], [31412....
3 20 2021-07-13 18:53:03 [[31416.0, 12.6396], [31417.0, 0.3847], [31418... [[31415.0, 0.6475], [31413.0, 0.1592], [31412....
4 25 2021-07-13 18:54:02 [[31416.0, 12.6396], [31417.0, 0.3847], [31418... [[31415.0, 0.6475], [31413.0, 0.1592], [31412....
... ... ... ... ...
4863 25288 2021-07-18 15:10:01 [[31416.0, 12.6396], [31417.0, 0.3847], [31418... [[31415.0, 0.6475], [31413.0, 0.1592], [31412....
4864 25294 2021-07-18 15:11:01 [[31416.0, 12.6396], [31417.0, 0.3847], [31418... [[31415.0, 0.6475], [31413.0, 0.1592], [31412....
4865 25299 2021-07-18 15:12:02 [[31416.0, 12.6396], [31417.0, 0.3847], [31418... [[31415.0, 0.6475], [31413.0, 0.1592], [31412....
4866 25304 2021-07-18 15:13:03 [[31416.0, 12.6396], [31417.0, 0.3847], [31418... [[31415.0, 0.6475], [31413.0, 0.1592], [31412....
4867 25309 2021-07-18 15:14:02 [[31416.0, 12.6396], [31417.0, 0.3847], [31418... [[31415.0, 0.6475], [31413.0, 0.1592], [31412....
[4868 rows x 4 columns]
如您所见,出价和要价列的内容具有以下格式:[[price, size of order], [price, size of order], ...]
根据https://plotly.com/python/heatmaps/,热图可以按照以下格式填充数据:
import plotly.graph_objects as go
fig = go.Figure(data=go.Heatmap(
z=[[1, None, 30, 50, 1], [20, 1, 60, 80, 30], [30, 60, 1, -10, 20]],
x=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
y=['Morning', 'Afternoon', 'Evening'],
hoverongaps = False))
fig.show()
热图应像本例中那样可视化:
--> x轴是时间戳
--> y轴是价格
--> z axis/color 是给定价格下的订单大小
对于 plotly 中的给定示例,我很难获得正确的 y 和 z 值。我的印象是,我需要聚合所有订单(针对所有时间戳),然后按价格对它们进行排序,然后将价格放入箱子中,然后填充间隙(使用 None),然后将它们放入正确的数组结构中...这似乎真的很复杂,我不知道该怎么做。有没有更简单的方法来实现这一目标?或者一些神奇的 python 功能可以满足需要?
fig = go.Figure(data=go.Heatmap(
x=df['timestamp'],
y=???,
z=???
))
如有任何帮助,我将不胜感激!谢谢!
编辑:来自数据框的示例数据:https://file.io/p2hktQxKljkI
您可以使用 df_order_book = pandas.read_csv("test.csv")
.
加载它
- 看过这个结构数据 - 刚看过问
- 当绘制成散点图、较小的订单、较高的购买价格时很有意义
- 热图,没看懂
获取一些数据
import requests
import pandas as pd
import time
df = pd.DataFrame()
for i in range(20):
df = pd.concat([df, pd.json_normalize(requests.get("https://api.cryptowat.ch/markets/kraken/btcusd/orderbook").json()["result"]).assign(timestamp=pd.to_datetime("now"))])
time.sleep(1)
重组并绘制成散点图
import numpy as np
import plotly.graph_objects as go
import plotly.express as px
d = df.loc[:, ["timestamp", "asks"]].explode("asks").assign(
price=lambda d: d["asks"].apply(lambda a: a[0]),
size=lambda d: d["asks"].apply(lambda a: a[1]),
)
px.scatter(d, x="timestamp", y="size", color="price")
热图
go.Figure(go.Heatmap(x=d["timestamp"], y=d["size"], z=d["price"]))
我正在尝试将订单簿数据输入到我从交易所检索的绘图热图中 API。我检索的数据存储在 pandas 数据框中,格式如下:
id timestamp asks bids
0 4 2021-07-13 18:50:02 [[31416.0, 12.6396], [31417.0, 0.3847], [31418... [[31415.0, 0.6475], [31413.0, 0.1592], [31412....
1 10 2021-07-13 18:51:02 [[31416.0, 12.6396], [31417.0, 0.3847], [31418... [[31415.0, 0.6475], [31413.0, 0.1592], [31412....
2 15 2021-07-13 18:52:02 [[31416.0, 12.6396], [31417.0, 0.3847], [31418... [[31415.0, 0.6475], [31413.0, 0.1592], [31412....
3 20 2021-07-13 18:53:03 [[31416.0, 12.6396], [31417.0, 0.3847], [31418... [[31415.0, 0.6475], [31413.0, 0.1592], [31412....
4 25 2021-07-13 18:54:02 [[31416.0, 12.6396], [31417.0, 0.3847], [31418... [[31415.0, 0.6475], [31413.0, 0.1592], [31412....
... ... ... ... ...
4863 25288 2021-07-18 15:10:01 [[31416.0, 12.6396], [31417.0, 0.3847], [31418... [[31415.0, 0.6475], [31413.0, 0.1592], [31412....
4864 25294 2021-07-18 15:11:01 [[31416.0, 12.6396], [31417.0, 0.3847], [31418... [[31415.0, 0.6475], [31413.0, 0.1592], [31412....
4865 25299 2021-07-18 15:12:02 [[31416.0, 12.6396], [31417.0, 0.3847], [31418... [[31415.0, 0.6475], [31413.0, 0.1592], [31412....
4866 25304 2021-07-18 15:13:03 [[31416.0, 12.6396], [31417.0, 0.3847], [31418... [[31415.0, 0.6475], [31413.0, 0.1592], [31412....
4867 25309 2021-07-18 15:14:02 [[31416.0, 12.6396], [31417.0, 0.3847], [31418... [[31415.0, 0.6475], [31413.0, 0.1592], [31412....
[4868 rows x 4 columns]
如您所见,出价和要价列的内容具有以下格式:[[price, size of order], [price, size of order], ...]
根据https://plotly.com/python/heatmaps/,热图可以按照以下格式填充数据:
import plotly.graph_objects as go
fig = go.Figure(data=go.Heatmap(
z=[[1, None, 30, 50, 1], [20, 1, 60, 80, 30], [30, 60, 1, -10, 20]],
x=['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
y=['Morning', 'Afternoon', 'Evening'],
hoverongaps = False))
fig.show()
热图应像本例中那样可视化:
--> x轴是时间戳
--> y轴是价格
--> z axis/color 是给定价格下的订单大小
对于 plotly 中的给定示例,我很难获得正确的 y 和 z 值。我的印象是,我需要聚合所有订单(针对所有时间戳),然后按价格对它们进行排序,然后将价格放入箱子中,然后填充间隙(使用 None),然后将它们放入正确的数组结构中...这似乎真的很复杂,我不知道该怎么做。有没有更简单的方法来实现这一目标?或者一些神奇的 python 功能可以满足需要?
fig = go.Figure(data=go.Heatmap(
x=df['timestamp'],
y=???,
z=???
))
如有任何帮助,我将不胜感激!谢谢!
编辑:来自数据框的示例数据:https://file.io/p2hktQxKljkI
您可以使用 df_order_book = pandas.read_csv("test.csv")
.
- 看过这个结构数据 - 刚看过问
- 当绘制成散点图、较小的订单、较高的购买价格时很有意义
- 热图,没看懂
获取一些数据
import requests
import pandas as pd
import time
df = pd.DataFrame()
for i in range(20):
df = pd.concat([df, pd.json_normalize(requests.get("https://api.cryptowat.ch/markets/kraken/btcusd/orderbook").json()["result"]).assign(timestamp=pd.to_datetime("now"))])
time.sleep(1)
重组并绘制成散点图
import numpy as np
import plotly.graph_objects as go
import plotly.express as px
d = df.loc[:, ["timestamp", "asks"]].explode("asks").assign(
price=lambda d: d["asks"].apply(lambda a: a[0]),
size=lambda d: d["asks"].apply(lambda a: a[1]),
)
px.scatter(d, x="timestamp", y="size", color="price")
热图
go.Figure(go.Heatmap(x=d["timestamp"], y=d["size"], z=d["price"]))