如果在numpy或scipy中没有一些标准库函数来处理这个问题,我会感到惊讶,但是无论我如何搜索都找不到一个合适的答案。
我从Poloniex交易所获取数据 - 加密货币。可以将其视为获取股票价格 - 买入和卖出订单 - 推送到计算机上。因此,我拥有任何给定市场价格的时间序列。一个市场可能每天更新10次,而另一个市场每分钟更新10次 - 这完全取决于市场上有多少人在买卖。
因此,我的时间序列数据最终将变成:
[1 0.0003234,
1.01 0.0003233,
10.0004 0.00033,
124.23 0.0003334,
...]
第一列是时间值(在示例中我使用微秒的Unix时间戳,但我认为这不是必要的)。 第二列将是价格之一 - 要么是买价,要么是卖价。
我想要的是将其转换为矩阵,在其中数据以固定时间帧“采样”。因此,插值(零阶保持)矩阵将如下:
[1 0.0003234,
2 0.0003233,
3 0.0003233,
...
10 0.0003233,
11 0.00033,
12 0.00033,
13 0.00033,
...
120 0.00033,
125 0.0003334,
...]
我希望能以任何合理的时间间隔进行操作。目前我使用
np.linspace(start_time, end_time, time_step)
创建新的时间向量。编写自己的,虽然粗糙但很实用的0阶保持插值器不会很难。我将循环遍历原始时间向量,并使用np.nonzero查找所有符合一个时间戳(t0)和下一个(t1)之间的新时间向量中的索引,然后使用来自时间t0的值填充这些索引。
就目前而言,这种粗略的方法有效。价格矩阵并不是很大。但我必须考虑是否有一种更快的方法可以使用其中一个内置库。只是我找不到它。
此外,对于上述示例,我只使用Nx2的矩阵(列1:时间,列2:价格),但最终市场有6或8个不同的参数可能需要更新。能够处理不同列中的多个价格等的方法/库函数将是很好的选择。
Python3.5通过Windows7的Anaconda安装(希望没有影响)。
f = interpolate.interp1d(np.asarray(a[:, 0])[:, 0], a[:, 1], kind='zero', axis=0)
,其中a将是上面的示例数据。我遇到的唯一问题是linspace输出行向量,因此我需要将其提供给f作为new_y = f(new_x.T)
,其中new_x是linspace的输出。 - Gabe Spradlinkind
参数的参考或示例。 - Gabe Spradlin