0

我有以下格式的 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 方法可以做到这一点吗?据我了解,大多数数据库都会以上述格式为我提供数据(不是最好的格式!),不幸的是我无法控制格式。

4

0 回答 0