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