首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Pandas-matplotlib绘制Binance API Orderbook?

如何用Pandas-matplotlib绘制Binance API Orderbook?
EN

Stack Overflow用户
提问于 2020-09-05 18:06:22
回答 1查看 707关注 0票数 0

数据出现在(orderbook =pd.DataFrame(Orderbook_data))之后的3列:

代码语言:javascript
复制
   timestamp                bids                      asks
 UNIX timestamp      [bidprice, bidvolume]   [askprice, askvolume]
        list has 100 values of each. timestamp is the same 

问题是,我不知道如何访问/索引每行列表中的值、价格、每列的数量

我知道,通过运行-> bids =订单簿“出价”

我得到了100份清单

我想避免做一个循环..。必须有一种方法来绘制数据

我希望有人能理解我的问题。我只想画x的价格和y的成交量。目的是让它活下来。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-05 20:57:54

由于您没有显示您的输入文件,所以我自己准备的:

代码语言:javascript
复制
timestamp;bids
1579082401;[123.12, 300]
1579082461;[135.40, 220]
1579082736;[130.76, 20]
1579082801;[123.12, 180]

为了阅读它,我用:

代码语言:javascript
复制
orderbook = pd.read_csv('Input.csv', sep=';')
orderbook.timestamp = pd.to_datetime(orderbook.timestamp, unit='s')

其内容如下:

代码语言:javascript
复制
             timestamp           bids
0  2020-01-15 10:00:01  [123.12, 300]
1  2020-01-15 10:01:13  [135.40, 220]
2  2020-01-15 10:05:36   [130.76, 20]
3  2020-01-15 10:06:41  [123.12, 180]

现在:

  • 时间戳已被转换为本地日期时间类型
  • ,但投标是对象类型(实际上是字符串)。

而且,正如我所设想的,在从输入文件中读取时,情况是相同的。

现在的主要任务是:第一步是从投标中提取这两个数字,将它们转换为浮动和int,并保存在相应的列中:

代码语言:javascript
复制
orderbook = orderbook.join(orderbook.bids.str.extract(
    r'\[(?P<bidprice>\d+\.\d+), (?P<bidvolume>\d+)]'))
orderbook.bidprice = orderbook.bidprice.astype(float)
orderbook.bidvolume = orderbook.bidvolume.astype(int)

现在,订单簿包含:

代码语言:javascript
复制
            timestamp           bids  bidprice  bidvolume
0 2020-01-15 10:00:01  [123.12, 300]    123.12        300
1 2020-01-15 10:01:01  [135.40, 220]    135.40        220
2 2020-01-15 10:05:36   [130.76, 20]    130.76         20
3 2020-01-15 10:06:41  [123.12, 180]    123.12        180

您可以生成例如散点图,调用:

代码语言:javascript
复制
orderbook.plot.scatter('bidprice', 'bidvolume');

或其他绘图功能。

另一种可能性

或者你的orderbook_data是字典?类似于:

代码语言:javascript
复制
orderbook_data = {
    'timestamp': [1579082401, 1579082461, 1579082736, 1579082801],
    'bids': [[123.12, 300], [135.40, 220], [130.76, 20], [123.12, 180]] }

在本例中,当您从其中创建DataFrame时,列类型最初如下:

  • 时间戳-- int64,
  • 出价--也是一个对象,但这一次每个单元格都包含一个普通的pythonic

然后,您还可以将时间戳列转换为日期时间,就像上面一样。

但是,要将投标(lists的一列)分成两个单独的列,您应该运行:

代码语言:javascript
复制
orderbook[['bidprice', 'bidvolume']] = pd.DataFrame(orderbook.bids.tolist())

然后有两个新列,分别包含源列的组件,您可以像上面这样创建图形jus。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63757031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档