我有以下格式的 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
上面定义的 I,并且以类似的方式,使用 uniqueIndex(k) 和 uniqueIndex(k +1)。
我发帖的原因是因为我不相信我的效率很高,此外还有一些默认的 MATLAB 方法可以做到这一点吗?据我了解,大多数数据库都会以上述格式为我提供数据(不是最好的格式!),不幸的是我无法控制格式。