序言:
H19时将整本书保存到磁盘上,我相信我希望使用numpy数组来执行脱机数据,理想情况下,它是写到磁盘上的每个x更新或计时器上。H 212F 213
如果我们假设一本示例书如下所示:
array([datetime.datetime(2017, 11, 6, 14, 57, 8, 532152), # book creation time
array(['20171106-14:57:08.528', '20171106-14:57:08.428'], dtype='<U21'), # quote entry (bid)
array([1.30699, 1.30698]), # quote price (bid)
array([100000., 250000.]), # quote size (bid)
array(['20171106-14:57:08.528'], dtype='<U21'), # quote entry (offer)
array([1.30709]), # quote price (offer)
array([100000.])], # quote size (offer)
dtype=object)Numpy不喜欢数组的锯齿状,虽然我很高兴(足够)使用np.pad将时间/价格/大小降到20倍,但我不想为图书的创建时间创建数组。
我能/应该以不同的方式去做吗?最后,我想加入一个交易列表,所以我想要一种列商店的方法。其他人怎么做到的?它们是否存储多行?还是多列?
编辑:
我想要做这样的事情:
with h5py.File("foo.h5", "w") as f:
f.create_dataset(data=my_np_array)然后,在我的hdf5 tickdata和交易数据之间执行一个asof连接。
EDIT2:
在KDB中,条目如下所示:
q)t:([]time:2017.11.06D14:57:08.528;sym:`EURUSD;bid_time:enlist 2017.11.06T14:57:08.528 20171106T14:57:08.428;bid_px:enlist 1.30699, 1.30698;bid_size:enlist 100000. 250000.;ask_time:enlist 2017.11.06T14:57:08.528;ask_px:enlist 1.30709;ask_size:enlist 100000.)
q)t
time sym bid_time bid_px bid_size ask_time ask_px ask_size
-----------------------------------------------------------------------------------------------------------------------------------------------------------
2017.11.06D14:57:08.528000000 EURUSD 2017.11.06T14:57:08.528 2017.11.06T14:57:08.428 1.30699 1.30698 100000 250000 2017.11.06T14:57:08.528 1.30709 100000
q)first t
time | 2017.11.06D14:57:08.528000000
sym | `EURUSD
bid_time| 2017.11.06T14:57:08.528 2017.11.06T14:57:08.428
bid_px | 1.30699 1.30698
bid_size| 100000 250000f
ask_time| 2017.11.06T14:57:08.528
ask_px | 1.30709
ask_size| 100000fEDIT3:
我是否应该放弃嵌套列的概念,并有120个列(20*(bid_times+bid_prices+bid_sizes+ask_times+ask_prices+ask_sizes)?似乎太过分了,而且很难处理.
发布于 2022-03-29 11:31:48
对于任何一个在2年后都会遇到这种情况的人来说,我最近重新研究了这段代码,并将h5py替换为pyarrow+parquet。
这意味着我可以创建一个带有嵌套列的模式,并轻松地将其读入熊猫DataFrame中:
import pyarrow as pa
schema = pa.schema([
("Time", pa.timestamp("ns")),
("Symbol", pa.string()),
("BidTimes", pa.list_(pa.timestamp("ns"))),
("BidPrices", pa.list_(pa.float64())),
("BidSizes", pa.list_(pa.float64())),
("BidProviders", pa.list_(pa.string())),
("AskTimes", pa.list_(pa.timestamp("ns"))),
("AskPrices", pa.list_(pa.float64())),
("AskSizes", pa.list_(pa.float64())),
("AskProviders", pa.list_(pa.string())),
])在将数据流到磁盘方面,我使用pq.ParquetWriter.write_table跟踪打开的文件句柄(每个符号一个),这样我就可以追加到文件中,只在完成时关闭(从而写入元数据)。
而不是流吡箭头表,而是流常规Python字典,在达到给定大小(例如1024行)时创建一个Pandas DataFrame,然后将其传递给ParquetWriter编写。
https://stackoverflow.com/questions/62980473
复制相似问题