我有以下格式的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方法可以做到这一点?据我所知,大多数数据库都会以上述格式给出数据(不是最好的格式!),遗憾的是我无法控制格式。