将数据转换为时间序列 - MATLAB

时间:2013-07-31 19:01:32

标签: matlab import time-series

我有以下格式的Excel数据

Ticker     Date     Price
GOOG       1/1/12    100
GOOG       1/2/12    200
AAPL       1/1/12     50

我想以下列格式将其转换为时间序列集合(或仅仅是数据矩阵):

Date      GOOG   AAPL   .... (variable number of tickers)
1/1/12     100     50

因为这在Matlab中更容易用来对它进行一些计算。

我过去这样做的方式,我不相信它是最有效的,就是运行一个unique(tickers)函数来检查我们有多少代码,然后相应地砍掉数据。 for循环。我认为对于较大的数据集来说这是非常低效(和丑陋的)。我希望有人会有更好的建议吗?

以下是我在类似数据上做过的先前尝试的示例,假设数据按自动收报机排序:

[uniqueSecurities, uniqueIndex] = unique(Tickers);
numberSecurities = length(uniqueSecurities);

上面的代码现在会告诉您新的自动收报机在哪个位置开始(在每个uniqueIndex条目中)。

现在假设每个股票代码的观察数量相同,您可以这样切断数据:

numberObservations = whatever
j = 0;
for secIndex = 1:numberSecurities   
    NewDataMatrix(:,secIndex) = Prices(j : j + numberObservations);
    j = j + numbrtObservations;
end

现在,如果你对每个安全性有一个可变数量的观察结果,而不是按“numberObservations”间隔跳过,你可以使用我在上面定义的uniqueIndex,并且以类似的方式,使用之间的索引来切割所有内容。 uniqueIndex(k)和uniqueIndex(k + 1)。

我发帖的原因是因为我不相信我的效率非常高,而且还有一些默认的MATLAB方法可以做到这一点?据我所知,大多数数据库都会以上述格式给出数据(不是最好的格式!),遗憾的是我无法控制格式。

0 个答案:

没有答案